From 3a1fb0355ca56117777063dda9e951b19b23e4c7 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 13 Sep 2000 17:19:38 +0000 Subject: [PATCH] add the api routines to query the text objects SVN revision: 3455 --- legacy/evas/src/Evas.h | 17 +++-- legacy/evas/src/evas_text.c | 139 ++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+), 7 deletions(-) diff --git a/legacy/evas/src/Evas.h b/legacy/evas/src/Evas.h index a52d5186ac..844bc18746 100644 --- a/legacy/evas/src/Evas.h +++ b/legacy/evas/src/Evas.h @@ -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); diff --git a/legacy/evas/src/evas_text.c b/legacy/evas/src/evas_text.c index 54dfa0a297..e49be5917b 100644 --- a/legacy/evas/src/evas_text.c +++ b/legacy/evas/src/evas_text.c @@ -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) {