Tom, after this commit, 
i found a side effect in the enventor.

As you launch the enventor, 
you see the group name (in the bottom status bar) has a one white space 
leftover.

Looks weird.

Could you please check the commit again?

------------------------------------
-Regards, Hermet-

-----Original Message-----
From: "Tom Hacohen"<[email protected]> 
To: <[email protected]>; 
Cc: 
Sent: 2014-03-10 (월) 23:58:31
Subject: [EGIT] [core/efl] master 01/01: Evas textblock: Fix clipping issues 
with some texts with width > advance.

tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=d175b8aa69c31fc155f05269350f6703e81886b7

commit d175b8aa69c31fc155f05269350f6703e81886b7
Author: Tom Hacohen <tom>@stosb.com>
Date:   Thu Feb 27 10:39:52 2014 +0000

    Evas textblock: Fix clipping issues with some texts with width > advance.
    
    This happens with many texts. The issue occurs when the width of the
    last char is larger than it's advance. Before this patch, we didn't the
    width into account when calculating width, thus causing clipping issues
    in some cases.
---
 src/lib/evas/canvas/evas_object_textblock.c  12 +++++++++---
 src/lib/evas/common/evas_font_query.c         6 ++++--
 src/tests/evas/evas_test_textblock.c         15 +++++++++------
 3 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 1298a82..4956ac9 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -3350,7 +3350,7 @@ loop_advance:
         it->x = x;
         x += it->adv;
 
-        if ((it->x + it->adv) > c->ln->w) c->ln->w = it->x + it->adv;
+        if ((it->w > 0) && ((it->x + it->w) > c->ln->w)) c->ln->w = it->x + 
it->w;
      }
 
    c->ln->y = c->y - c->par->y;
@@ -4595,7 +4595,7 @@ _layout_par(Ctxt *c)
         /* Check if we need to wrap, i.e the text is bigger than the width,
            or we already found a wrap point. */
         if ((c->w >= 0) &&
-              (((c->x + it->adv) >
+              (((c->x + it->w) >
                 (c->w - c->o->style_pad.l - c->o->style_pad.r -
                  c->marginl - c->marginr))  (wrap > 0)))
           {
@@ -10304,7 +10304,7 @@ static void
 _size_native_calc_line_finalize(const Evas_Object *eo_obj, Eina_List *items,
       Evas_Coord *ascent, Evas_Coord *descent, Evas_Coord *w, 
Textblock_Position position)
 {
-   Evas_Object_Textblock_Item *it;
+   Evas_Object_Textblock_Item *it, *last_it = NULL;
    Eina_List *i;
 
    it = eina_list_data_get(items);
@@ -10358,7 +10358,13 @@ _size_native_calc_line_finalize(const Evas_Object 
*eo_obj, Eina_List *items,
 
 loop_advance:
         *w += it->adv;
+
+        if (!last_it  (it->visual_pos > last_it->visual_pos))
+           last_it = it;
      }
+
+   if (last_it)
+      *w += last_it->w - last_it->adv;
 }
 
 /* FIXME: doc */
diff --git a/src/lib/evas/common/evas_font_query.c 
b/src/lib/evas/common/evas_font_query.c
index eebab70..1c219ee 100644
--- a/src/lib/evas/common/evas_font_query.c
+++ b/src/lib/evas/common/evas_font_query.c
@@ -822,7 +822,8 @@ evas_common_font_query_last_up_to_pos(RGBA_Font *fn, const 
Evas_Text_Props *text
                   if (gli->index == 0) continue;
                   if ((x >= pen_x) &&
                         (((i == 0) && (x <= full_adv)) 
-                         (x <= (full_adv - (gli[-1].pen_after - start_pen)))) 
&&
+                         (x < (full_adv - (gli[-1].pen_after - start_pen)) 
+                         (x <= (pen_x + gli->width)))) &&
                         (y >= -asc) && (y <= desc))
                     {
 #ifdef OT_SUPPORT
@@ -848,7 +849,8 @@ evas_common_font_query_last_up_to_pos(RGBA_Font *fn, const 
Evas_Text_Props *text
              if (!EVAS_FONT_WALK_IS_VISIBLE) continue;
 
              if ((x >= EVAS_FONT_WALK_PEN_X) &&
-                 (x <= (EVAS_FONT_WALK_PEN_X_AFTER)) &&
+                   ((x < (EVAS_FONT_WALK_PEN_X_AFTER)) 
+                   (x <= (EVAS_FONT_WALK_PEN_X + _glyph_itr->width))) &&
                  (y >= -asc) && (y <= desc))
                {
                   ret = EVAS_FONT_WALK_POS;
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index dfddefa..7836e2e 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -484,7 +484,7 @@ START_TEST(evas_textblock_cursor)
              evas_textblock_cursor_pen_geometry_get(cur, &x, &y, &w, &h);
              fail_if(0 != evas_textblock_cursor_line_geometry_get(
                       cur, &lx, &ly, &lw, &lh));
-             fail_if((x < lx)  (x + w > lx + lw) 
+             fail_if((x < lx) 
                    (y < ly)  (y + h > ly + lh));
              fail_if((lx != plx)  (ly != ply)  (lw != plw)  (lh != plh));
 
@@ -505,7 +505,7 @@ START_TEST(evas_textblock_cursor)
              evas_textblock_cursor_pen_geometry_get(cur, &x, &y, &w, &h);
              fail_if(1 != evas_textblock_cursor_line_geometry_get(
                       cur, &lx, &ly, &lw, &lh));
-             fail_if((x < lx)  (x + w > lx + lw) 
+             fail_if((x < lx) 
                    (y < ly)  (y + h > ly + lh));
              fail_if((lx != plx)  (ly != ply)  (lw != plw)  (lh != plh));
 
@@ -1596,6 +1596,7 @@ START_TEST(evas_textblock_wrapping)
    evas_object_resize(tb, bw + 1, bh);
    evas_object_textblock_size_formatted_get(tb, &w, &h);
    /* Wrap to minimum */
+   ck_assert_int_eq(w, bw);
    fail_if(w != bw);
    fail_if(h <= bh);
 
@@ -1607,7 +1608,8 @@ START_TEST(evas_textblock_wrapping)
    evas_object_textblock_size_native_get(tb, &nw, &nh);
    evas_object_resize(tb, nw, nh);
    evas_object_textblock_size_formatted_get(tb, &w, &h);
-   fail_if((w != nw)  (h != nh));
+   ck_assert_int_eq(w, nw);
+   ck_assert_int_eq(h, nh);
 
    /* Reduce size until reaching the minimum, making sure we don't
     * get something wrong along the way */
@@ -1760,13 +1762,13 @@ START_TEST(evas_textblock_wrapping)
    evas_object_textblock_text_markup_set(tb, 
"<wrap>=word><keyword>return</keyword> <number>0</number>;</wrap>");
 
    evas_object_textblock_size_formatted_get(tb, &w, &h);
-   ck_assert_int_eq(w, 33);
+   ck_assert_int_eq(w, 32);
    ck_assert_int_eq(h, 25);
 
    evas_object_resize(tb, 400, 400);
 
    evas_object_textblock_size_formatted_get(tb, &w, &h);
-   ck_assert_int_eq(w, 45);
+   ck_assert_int_eq(w, 44);
    ck_assert_int_eq(h, 16);
 
    /* Complex compound clusters using Devanagari. */
@@ -2663,6 +2665,7 @@ START_TEST(evas_textblock_style)
       evas_object_textblock_line_number_geometry_get(tb, 1, &x[1], &y[1], 
&w2[1], &h2[1]);
 
       // check line 1 geometry relatively to line 0
+      ck_assert_int_eq(w2[0], w2[1]);
       fail_if((x[0] != x[1])  ((y[0] + h2[0]) != y[1])  (w2[0] != w2[1])  
(h2[0] != h2[1]));
 
       evas_object_textblock_text_markup_set(tb, "Test
<style>=glow>Test</>
Test");
@@ -2672,7 +2675,7 @@ START_TEST(evas_textblock_style)
       evas_object_textblock_line_number_geometry_get(tb, 2, &x[4], &y[4], 
&w2[4], &h2[4]);
 
       // check line 1 geometry relatively to line 0
-      fail_if((x[2] != x[3])  ((y[2] + h2[2]) != y[3])  (w2[2] != w2[3])  
(h2[2] != h2[3]));
+      fail_if((x[2] != x[3])  ((y[2] + h2[2]) != y[3])  (w2[2] > w2[3])  
(h2[2] != h2[3]));
 
       // check padding is correct
       fail_if((x[2] != (x[0] + l))  (y[2] != (y[0] + t)));

-- 



------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/13534_NeoTech
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to