Tom.

After this commit, enventor text editor  works incorrectly.

As you can see , enventor uses 2 textblocks, one for line number and the other 
one is for edc editor.
But both line height is not exactly same even if they uses the same styles.

Could you please review your fixes again based on the enventor?

whenever types the "enter" to increase the line.
you will see the entry cursor is jumped twice to be positioned.
 
 
------------------------------------
-Regards, Hermet- 

-----Original Message-----
From: "Tom Hacohen - Enlightenment Git"<no-re...@enlightenment.org> 
To: <enlightenment-...@lists.sourceforge.net>; 
Cc: 
Sent: 2013-08-06 (화) 17:30:20
Subject: [EGIT] [core/efl] master 01/01: Evas textblock: Use max ascent/descent 
at the edges of the textblock.

tasn pushed a commit to branch master.

commit 6583b83c7304dcc1cb3f6c869ba1a391770b677c
Author: Tom Hacohen <tom>@stosb.com>
Date:   Tue Aug 6 09:28:38 2013 +0100

    Evas textblock: Use max ascent/descent at the edges of the textblock.
    
    Thanks to Youngbok Shin for reporting the difference in behaviour between
    textblock and text object.
---
 src/lib/evas/canvas/evas_object_textblock.c  63 +++++++++++++++++++++--------
 src/tests/evas/evas_test_textblock.c          4 +-
 2 files changed, 49 insertions(+), 18 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 8f49861..ec58bf6 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -2577,17 +2577,47 @@ _layout_item_ascent_descent_adjust(const Evas_Object 
*eo_obj,
 
    _layout_format_ascent_descent_adjust(eo_obj, maxascent, maxdescent, 
it->format);
 
-   if ((it->type == EVAS_TEXTBLOCK_ITEM_TEXT) &&
-         (position == TEXTBLOCK_POSITION_START))
+   if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
      {
-        int asc = 0, desc = 0;
-        evas_common_font_ascent_descent_get((void *) it->format->font.font,
-              &_ITEM_TEXT(it)->text_props, &asc, &desc);
+        void *fi = _ITEM_TEXT(it)->text_props.font_instance;
+
+        if (position == TEXTBLOCK_POSITION_START)
+          {
+             int asc = 0;
+
+             if (fi)
+               {
+                  asc = evas_common_font_instance_max_ascent_get(fi);
+               }
+             else
+               {
+                  Evas_Object_Protected_Data *obj =
+                     eo_data_scope_get(eo_obj, EVAS_OBJ_CLASS);
+                  asc = ENFN->font_max_ascent_get(ENDT, it->format->font.font);
+               }
 
-        if (maxascent && (asc > *maxascent))
-           *maxascent = asc;
-        if (maxdescent && (desc < *maxdescent))
-           *maxdescent = desc;
+             if (maxascent && (asc > *maxascent))
+                *maxascent = asc;
+          }
+        else if (position == TEXTBLOCK_POSITION_END)
+          {
+             int desc = 0;
+
+             if (fi)
+               {
+                  desc = evas_common_font_instance_max_descent_get(fi);
+               }
+             else
+               {
+                  Evas_Object_Protected_Data *obj =
+                     eo_data_scope_get(eo_obj, EVAS_OBJ_CLASS);
+                  desc =
+                     ENFN->font_max_descent_get(ENDT, it->format->font.font);
+               }
+
+             if (maxdescent && (desc < *maxdescent))
+                *maxdescent = desc;
+          }
      }
 }
 
@@ -10204,13 +10234,13 @@ static void
 _size_native_calc_paragraph_size(const Evas_Object *eo_obj,
       const Evas_Object_Textblock *o,
       const Evas_Object_Textblock_Paragraph *par,
+      Textblock_Position *position,
       Evas_Coord *_w, Evas_Coord *_h)
 {
    Eina_List *i;
    Evas_Object_Textblock_Item *it;
    Eina_List *line_items = NULL;
    Evas_Coord w = 0, y = 0, wmax = 0, h = 0, ascent = 0, descent = 0;
-   Textblock_Position position = TEXTBLOCK_POSITION_START;
 
    EINA_LIST_FOREACH(par->logical_items, i, it)
      {
@@ -10222,7 +10252,7 @@ _size_native_calc_paragraph_size(const Evas_Object 
*eo_obj,
                       _IS_PARAGRAPH_SEPARATOR(o, fi->item)))
                {
                   _size_native_calc_line_finalize(eo_obj, line_items, &ascent,
-                        &descent, &w, position);
+                        &descent, &w, *position);
 
                   if (ascent + descent > h)
                      h = ascent + descent;
@@ -10232,7 +10262,7 @@ _size_native_calc_paragraph_size(const Evas_Object 
*eo_obj,
                      wmax = w;
                   h = 0;
                   ascent = descent = 0;
-                  position = TEXTBLOCK_POSITION_ELSE;
+                  *position = TEXTBLOCK_POSITION_ELSE;
                   line_items = eina_list_free(line_items);
                }
              else
@@ -10242,7 +10272,7 @@ _size_native_calc_paragraph_size(const Evas_Object 
*eo_obj,
                    * according to the current format. */
                   if (it && (ascent + descent == 0))
                      _layout_item_ascent_descent_adjust(eo_obj, &ascent,
-                           &descent, it, position);
+                           &descent, it, *position);
 
                   _layout_calculate_format_item_size(eo_obj, fi, &ascent,
                         &descent, &fy, &fw, &fh);
@@ -10251,11 +10281,11 @@ _size_native_calc_paragraph_size(const Evas_Object 
*eo_obj,
         else
           {
              _layout_item_ascent_descent_adjust(eo_obj, &ascent,
-                   &descent, it, position);
+                   &descent, it, *position);
           }
      }
 
-   _size_native_calc_line_finalize(eo_obj, line_items, &ascent, &descent, &w, 
position);
+   _size_native_calc_line_finalize(eo_obj, line_items, &ascent, &descent, &w, 
*position);
 
    line_items = eina_list_free(line_items);
 
@@ -10286,13 +10316,14 @@ _textblock_size_native_get(Eo *eo_obj, void *_pd, 
va_list *list)
      {
         Evas_Coord wmax = 0, hmax = 0;
         Evas_Object_Textblock_Paragraph *par;
+        Textblock_Position position = TEXTBLOCK_POSITION_START;
         /* We just want the layout objects to update, should probably
          * split that. */
         if (!o->formatted.valid) _relayout(eo_obj);
         EINA_INLIST_FOREACH(o->paragraphs, par)
           {
              Evas_Coord tw, th;
-             _size_native_calc_paragraph_size(eo_obj, o, par, &tw, &th);
+             _size_native_calc_paragraph_size(eo_obj, o, par, &position, &tw, 
&th);
              if (tw > wmax)
                 wmax = tw;
              hmax += th;
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index 03332b4..9e0a11c 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -2616,8 +2616,8 @@ START_TEST(evas_textblock_size)
    evas_object_textblock_size_native_get(tb, &nw, &nh);
    fail_if((w != nw)  (h2 != nh));
 
-   /* Two lines == double the height */
-   fail_if(h * 2 != h2);
+   /* Two lines != double the height */
+   fail_if(h * 2 == h2);
 
    evas_object_textblock_text_markup_set(tb, buf);
 

-- 

------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent 
caught up. So what steps can you take to put your SQL databases under 
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk


------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to