png: handle 9-patch ends with stretch 15/249115/2
authorShinwoo Kim <cinoo.kim@samsung.com>
Mon, 7 Dec 2020 07:52:54 +0000 (16:52 +0900)
committerShinwoo Kim <cinoo.kim@samsung.com>
Mon, 7 Dec 2020 07:56:05 +0000 (16:56 +0900)
Summary:
The strech region has paired information; total and strechable.
Refer to function _strech_region_load retrieving strech region info.

But if 9-patch information line ends with strechable,
png did not push the strechable information.
And it leads to devide by zero.

This patch is adding strechable info to the strech region,
if 9-patch information ends with strechable.

Test Plan:
[Code]
{F4219278}
{F4219280}

[Test]
ECORE_EVAS_ENGINE=opengl_x11 ./evas-image-9patch ./end_with_strech.9.png

Reviewers: Hermet, jsuya, herb, cedric

Reviewed By: Hermet

Subscribers: #reviewers, #committers

Tags: #efl

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

Change-Id: I6242b2686358c28e2efbb152d40e59a898ee435d

src/modules/evas/image_loaders/png/evas_image_load_png.c

index 962af15..edc14d8 100644 (file)
@@ -639,6 +639,13 @@ evas_image_load_file_head_with_data_png(void *loader_data,
              evas_loader_helper_stretch_region_push(&prop->stretch.horizontal.region,
                                                     &current, stretchable);
           }
+        // End with strechable, add length info
+        if (stretchable)
+          {
+             evas_loader_helper_stretch_region_push(&prop->stretch.horizontal.region,
+                                                    &current, stretchable);
+             stretchable = !stretchable;
+          }
 
         current = 0;
 
@@ -679,6 +686,13 @@ evas_image_load_file_head_with_data_png(void *loader_data,
              evas_loader_helper_stretch_region_push(&prop->stretch.vertical.region,
                                                     &current, stretchable);
           }
+        // End with strechable, add length info
+        if (stretchable)
+          {
+             evas_loader_helper_stretch_region_push(&prop->stretch.vertical.region,
+                                                    &current, stretchable);
+             stretchable = !stretchable;
+          }
 
         // Content zone is optional, if not provided, we should use the one we guessed
         if (prop->content.x == 0 || prop->content.y == 0)