evas: fix adjustment logic about image border
authorJiwon Kim <jwkim0000@gmail.com>
Mon, 2 Jan 2017 09:38:59 +0000 (18:38 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Tue, 3 Jan 2017 01:59:49 +0000 (10:59 +0900)
Summary:
If border left+right >= image width, center area does not rendered.
Although adjusement logic, _draw_image()'s src_w can be a 0.
This commit try to secure center area at least 1 pixel.

This should fix T5057

@fix

Reviewers: raster, jypark, jpeg

Subscribers: cedric

Maniphest Tasks: T5057

Differential Revision: https://phab.enlightenment.org/D4538

src/lib/evas/canvas/evas_object_image.c

index 036fac63138356211db9d865b027a76c3c76f672..08fdb1f163daaad46a625ddb4a61b82d85e5ff4f 100644 (file)
@@ -2068,21 +2068,31 @@ _evas_image_render(Eo *eo_obj, Evas_Object_Protected_Data *obj,
                             bt = o->cur->border.t;
                             bb = o->cur->border.b;
                             // fix impossible border settings if img pixels not enough
-                            if ((bl + br) > imw)
+                            if ((bl + br) > 0)
                               {
-                                 if ((bl + br) > 0)
+                                 if ((bl + br) > imw)
                                    {
                                       bl = (bl * imw) / (bl + br);
                                       br = imw - bl;
                                    }
+                                 if ((bl + br) == imw)
+                                   {
+                                      if (bl < br) br--;
+                                      else bl--;
+                                   }
                               }
-                            if ((bt + bb) > imh)
+                            if ((bt + bb) > 0)
                               {
-                                 if ((bt + bb) > 0)
+                                 if ((bt + bb) > imh)
                                    {
                                       bt = (bt * imh) / (bt + bb);
                                       bb = imh - bt;
                                    }
+                                 if ((bt + bb) == imh)
+                                   {
+                                      if (bt < bb) bb--;
+                                      else bt--;
+                                   }
                               }
                             if (!EINA_DBL_CMP(o->cur->border.scale, 1.0))
                               {