add the api routines to query the text objects

SVN revision: 3455
This commit is contained in:
Carsten Haitzler 2000-09-13 17:19:38 +00:00
parent 54af8d51ff
commit 3a1fb0355c
2 changed files with 149 additions and 7 deletions

View File

@ -323,13 +323,16 @@ double evas_screen_x_to_world(Evas e, int x);
double evas_screen_y_to_world(Evas e, int y);
/* text query ops */
char *evas_get_text_string(Evas e, Evas_Object o);
char *evas_get_text_font(Evas e, Evas_Object o);
int evas_get_text_size(Evas e, Evas_Object o);
int evas_text_at_position(Evas e, Evas_Object o, double x, double y, int *char_x, int *char_y, int *char_w, int *char_h);
void evas_text_at(Evas e, Evas_Object o, int index, int *char_x, int *char_y, int *char_w, int *char_h);
void evas_text_get_ascent_descent(Evas e, Evas_Object o, double *ascent, double *descent);
char *evas_get_text_string(Evas e, Evas_Object o);
char *evas_get_text_font(Evas e, Evas_Object o);
int evas_get_text_size(Evas e, Evas_Object o);
int evas_text_at_position(Evas e, Evas_Object o, double x, double y, int *char_x, int *char_y, int *char_w, int *char_h);
void evas_text_at(Evas e, Evas_Object o, int index, int *char_x, int *char_y, int *char_w, int *char_h);
void evas_text_get_ascent_descent(Evas e, Evas_Object o, double *ascent, double *descent);
void evas_text_get_max_ascent_descent(Evas e, Evas_Object o, double *ascent, double *descent);
void evas_text_get_advance(Evas e, Evas_Object o, double *h_advance, double *v_advance);
double evas_text_get_inset(Evas e, Evas_Object o);
/* object query ops */
void evas_get_color(Evas e, Evas_Object o, int *r, int *g, int *b, int *a);
Evas_Object evas_get_object_under_mouse(Evas e);

View File

@ -297,6 +297,145 @@ evas_text_get_ascent_descent(Evas e, Evas_Object o,
if (descent) *descent = d;
}
void
evas_text_get_max_ascent_descent(Evas e, Evas_Object o,
double *ascent, double *descent)
{
int a, d;
Evas_Object_Text oo;
oo = o;
a = 0; d = 0;
switch (e->current.render_method)
{
case RENDER_METHOD_ALPHA_SOFTWARE:
{
Evas_Imlib_Font *fn;
fn = __evas_imlib_text_font_new(e->current.display, oo->current.font, oo->current.size);
if (fn)
{
a = __evas_imlib_text_font_get_max_ascent(fn);
d = __evas_imlib_text_font_get_max_descent(fn);
__evas_imlib_text_font_free(fn);
}
}
break;
case RENDER_METHOD_BASIC_HARDWARE:
break;
case RENDER_METHOD_3D_HARDWARE:
{
Evas_GL_Font *fn;
fn = __evas_gl_text_font_new(e->current.display, oo->current.font, oo->current.size);
if (fn)
{
a = __evas_gl_text_font_get_max_ascent(fn);
d = __evas_gl_text_font_get_max_descent(fn);
__evas_gl_text_font_free(fn);
}
}
break;
case RENDER_METHOD_ALPHA_HARDWARE:
break;
default:
break;
}
if (ascent) *ascent = a;
if (descent) *descent = d;
}
void
evas_text_get_advance(Evas e, Evas_Object o,
double *h_advance, double *v_advance)
{
int a, d;
Evas_Object_Text oo;
oo = o;
a = 0; d = 0;
switch (e->current.render_method)
{
case RENDER_METHOD_ALPHA_SOFTWARE:
{
Evas_Imlib_Font *fn;
fn = __evas_imlib_text_font_new(e->current.display, oo->current.font, oo->current.size);
if (fn)
{
__evas_imlib_text_font_get_advances(fn, oo->current.text, &a, &d);
__evas_imlib_text_font_free(fn);
}
}
break;
case RENDER_METHOD_BASIC_HARDWARE:
break;
case RENDER_METHOD_3D_HARDWARE:
{
Evas_GL_Font *fn;
fn = __evas_gl_text_font_new(e->current.display, oo->current.font, oo->current.size);
if (fn)
{
__evas_gl_text_font_get_advances(fn, oo->current.text, &a, &d);
__evas_gl_text_font_free(fn);
}
}
break;
case RENDER_METHOD_ALPHA_HARDWARE:
break;
default:
break;
}
if (h_advance) *h_advance = a;
if (v_advance) *v_advance = d;
}
double
evas_text_get_inset(Evas e, Evas_Object o)
{
Evas_Object_Text oo;
int inset;
oo = o;
switch (e->current.render_method)
{
case RENDER_METHOD_ALPHA_SOFTWARE:
{
Evas_Imlib_Font *fn;
fn = __evas_imlib_text_font_new(e->current.display, oo->current.font, oo->current.size);
if (fn)
{
inset = __evas_imlib_text_font_get_first_inset(fn, oo->current.text);
__evas_imlib_text_font_free(fn);
return (double)inset;
}
}
break;
case RENDER_METHOD_BASIC_HARDWARE:
break;
case RENDER_METHOD_3D_HARDWARE:
{
Evas_GL_Font *fn;
fn = __evas_gl_text_font_new(e->current.display, oo->current.font, oo->current.size);
if (fn)
{
inset = __evas_gl_text_font_get_first_inset(fn, oo->current.text);
__evas_gl_text_font_free(fn);
return (double)inset;
}
}
break;
case RENDER_METHOD_ALPHA_HARDWARE:
break;
default:
break;
}
return 0;
}
void
evas_set_text(Evas e, Evas_Object o, char *text)
{