hermet pushed a commit to branch master.

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

commit e53f07f44ff7f7a9454586e3448c1ca23e926a84
Author: JunsuChoi <[email protected]>
Date:   Tue Jun 16 13:10:25 2020 +0900

    Efl.Canvas.Vg.Object: Fix wrong render area
    
    Summary:
    When determining the size of the ector buffer,
    it was used the smaller of the object's geometry or path_bounds.
    However, because of that, path worked as absolute coordinates.
    path_bounds should be relative to geometry of object.
    
    Test Plan:
    {F3900444}
    original
    {F3900445}
    
    before
    + evas_object_geometry_set(vg, 100, 100, 200, 200);
    {F3900447}
    
    after
    + evas_object_geometry_set(vg, 100, 100, 200, 200);
    {F3900448}
    
    Reviewers: Hermet, kimcinoo, herb, smohanty
    
    Reviewed By: Hermet
    
    Subscribers: cedric, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D11974
---
 src/lib/evas/canvas/efl_canvas_vg_object.c | 34 ++++++++++++++----------------
 1 file changed, 16 insertions(+), 18 deletions(-)

diff --git a/src/lib/evas/canvas/efl_canvas_vg_object.c 
b/src/lib/evas/canvas/efl_canvas_vg_object.c
index 0ce2fbb22d..f2cd687b8f 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_object.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_object.c
@@ -719,30 +719,28 @@ _user_vg_entry_render(Evas_Object_Protected_Data *obj,
    Eina_Rect render_rect = EINA_RECT(x, y, w, h);
 
    // Get changed boundary and fit the size.
-   Eina_Rect r;
    if (pd->changed)
      efl_gfx_path_bounds_get(user_entry->root, &user_entry->path_bounds);
-   EINA_RECTANGLE_SET(&r, user_entry->path_bounds.x,
-                      user_entry->path_bounds.y,
-                      user_entry->path_bounds.w,
-                      user_entry->path_bounds.h);
+
+   if (user_entry->path_bounds.w != 0 && user_entry->path_bounds.h != 0)
+     {
+        EINA_RECTANGLE_SET(&render_rect, user_entry->path_bounds.x,
+                           user_entry->path_bounds.y,
+                           user_entry->path_bounds.w,
+                           user_entry->path_bounds.h);
+     }
 
    if (pd->viewbox.w != 0 && pd->viewbox.h !=0)
      {
         double sx = 0, sy= 0;
-        sx = (double)render_rect.w / (double)pd->viewbox.w;
-        sy = (double)render_rect.h / (double)pd->viewbox.h;
-        r.pos.x = (r.pos.x - pd->viewbox.x) * sx;
-        r.pos.y = (r.pos.y - pd->viewbox.y) * sy;
-        r.size.w *= sx;
-        r.size.h *= sy;
+        sx = (double)w / (double)pd->viewbox.w;
+        sy = (double)h / (double)pd->viewbox.h;
+        render_rect.x = (render_rect.x - pd->viewbox.x) * sx;
+        render_rect.y = (render_rect.y - pd->viewbox.y) * sy;
+        render_rect.w *= sx;
+        render_rect.h *= sy;
      }
 
-   if (render_rect.x < r.pos.x) render_rect.x = r.pos.x;
-   if (render_rect.y < r.pos.y) render_rect.y = r.pos.y;
-   if (render_rect.w > r.size.w) render_rect.w = r.size.w;
-   if (render_rect.h > r.size.h) render_rect.h = r.size.h;
-
    //if the size doesn't match, drop previous cache surface.
    if ((user_entry->w != render_rect.w ) ||
        (user_entry->h != render_rect.h))
@@ -778,8 +776,8 @@ _user_vg_entry_render(Evas_Object_Protected_Data *obj,
    _render_buffer_to_screen(obj,
                             engine, output, context, surface,
                             buffer,
-                            x + r.pos.x,
-                            y + r.pos.y,
+                            x + render_rect.x,
+                            y + render_rect.y,
                             render_rect.w, render_rect.h,
                             do_async, EINA_TRUE);
 }

-- 


Reply via email to