flesh out valign prop to have real api. untested currently.
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 30 Mar 2011 10:31:29 +0000 (10:31 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 30 Mar 2011 10:31:29 +0000 (10:31 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@58199 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/Evas.h
src/lib/canvas/evas_object_textblock.c

index bf137f5..579476b 100644 (file)
@@ -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;
 
index 390a36e..547be2b 100644 (file)
@@ -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;
@@ -4145,6 +4147,43 @@ evas_object_textblock_newline_mode_get(const Evas_Object *obj)
 }
 
 /**
+ * @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;