From 12d1b2d24d88f8fc67fe453b725b3ad030e8f433 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 30 Mar 2011 10:31:29 +0000 Subject: [PATCH] flesh out valign prop to have real api. untested currently. SVN revision: 58199 --- legacy/evas/src/lib/Evas.h | 3 ++ .../src/lib/canvas/evas_object_textblock.c | 48 +++++++++++++++++-- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index bf137f5cdd..579476b112 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -1409,6 +1409,9 @@ typedef void (*Evas_Object_Image_Pixels_Get_Cb) (void *data, Evas_Object *o); EAPI const Evas_Textblock_Style *evas_object_textblock_style_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; EAPI void evas_object_textblock_replace_char_set(Evas_Object *obj, const char *ch) EINA_ARG_NONNULL(1); EAPI const char *evas_object_textblock_replace_char_get(Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; + EAPI void evas_object_textblock_valign_set(Evas_Object *obj, double align); + EAPI double evas_object_textblock_valign_get(const Evas_Object *obj); + EAPI void evas_object_textblock_newline_mode_set(Evas_Object *obj, Eina_Bool mode) EINA_ARG_NONNULL(1); EAPI Eina_Bool evas_object_textblock_newline_mode_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; diff --git a/legacy/evas/src/lib/canvas/evas_object_textblock.c b/legacy/evas/src/lib/canvas/evas_object_textblock.c index 390a36e186..547be2baeb 100644 --- a/legacy/evas/src/lib/canvas/evas_object_textblock.c +++ b/legacy/evas/src/lib/canvas/evas_object_textblock.c @@ -420,10 +420,11 @@ struct _Evas_Object_Textblock Evas_Object_Textblock_Node_Text *text_nodes; Evas_Object_Textblock_Node_Format *format_nodes; Evas_Object_Textblock_Paragraph *paragraphs; - int last_w; + int last_w, last_h; struct { int l, r, t, b; } style_pad; + double valign; char *markup_text; void *engine_data; const char *repch; @@ -3760,6 +3761,7 @@ _relayout(const Evas_Object *obj) &o->formatted.w, &o->formatted.h); o->formatted.valid = 1; o->last_w = obj->cur.geometry.w; + o->last_h = obj->cur.geometry.h; o->changed = 0; o->content_changed = 0; o->redraw = 1; @@ -4144,6 +4146,43 @@ evas_object_textblock_newline_mode_get(const Evas_Object *obj) return o->newline_is_ps; } +/** + * @brief Sets the vertical alignment of text within the textblock object + * as a whole. + * + * Normally alignment is 0.0 (top of object). Values given should be + * between 0.0 and 1.0 (1.0 bottom of object, 0.5 being vertically centered + * etc.). + * + * @param obj The given textblock object. + * @param align A value between 0.0 and 1.0 + * @since 1.1.0 + */ +EAPI void +evas_object_textblock_valign_set(Evas_Object *obj, double align) +{ + TB_HEAD(); + if (align < 0.0) align = 0.0; + else if (align > 1.0) align = 1.0; + if (o->valign == align) return; + o->valign = align; + _evas_textblock_text_node_changed(o, obj, NULL); +} + +/** + * @brief Gets the vertical alignment of a textblock + * + * @param obj The given textblock object. + * @return The elignment set for the object + * @since 1.1.0 + */ +EAPI double +evas_object_textblock_valign_get(const Evas_Object *obj) +{ + TB_HEAD_RETURN(0.0); + return o->valign; +} + /** * @brief Get the "replacement character" for given textblock object. Returns * NULL if no replacement character is in use. @@ -8605,7 +8644,8 @@ evas_object_textblock_render_pre(Evas_Object *obj) /* if so what and where and add the appropriate redraw textblocks */ o = (Evas_Object_Textblock *)(obj->object_data); if ((o->changed) || (o->content_changed) || - (o->last_w != obj->cur.geometry.w)) + ((obj->cur.geometry.w != o->last_w) || + ((o->valign != 0.0) && (obj->cur.geometry.h != o->last_h)))) { o->formatted.valid = 0; _layout(obj, @@ -8614,6 +8654,7 @@ evas_object_textblock_render_pre(Evas_Object *obj) &o->formatted.w, &o->formatted.h); o->formatted.valid = 1; o->last_w = obj->cur.geometry.w; + o->last_h = obj->cur.geometry.h; o->redraw = 0; evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj); o->changed = 0; @@ -8760,7 +8801,8 @@ evas_object_textblock_coords_recalc(Evas_Object *obj) Evas_Object_Textblock *o; o = (Evas_Object_Textblock *)(obj->object_data); - if (obj->cur.geometry.w != o->last_w) + if ((obj->cur.geometry.w != o->last_w) || + ((o->valign != 0.0) && (obj->cur.geometry.h != o->last_h))) { o->formatted.valid = 0; o->changed = 1;