cedric pushed a commit to branch master.

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

commit 355a4e3830207a3bb5cdb88f55a85e917b92bc96
Author: Subhransu Mohanty <sub.moha...@samsung.com>
Date:   Tue Nov 8 12:51:11 2016 +0900

    evas/vg: fix handling of stroke width in cairo and native backend
    
    T3351
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/ector/cairo/ector_renderer_cairo_shape.c       |  2 +-
 src/lib/ector/software/ector_renderer_software_shape.c |  5 +++--
 src/lib/ector/software/ector_software_private.h        |  2 +-
 src/lib/ector/software/ector_software_rasterizer.c     | 16 ++++++++++++++--
 4 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/lib/ector/cairo/ector_renderer_cairo_shape.c 
b/src/lib/ector/cairo/ector_renderer_cairo_shape.c
index 6f67fb6..29eefd8 100644
--- a/src/lib/ector/cairo/ector_renderer_cairo_shape.c
+++ b/src/lib/ector/cairo/ector_renderer_cairo_shape.c
@@ -205,7 +205,7 @@ _ector_renderer_cairo_shape_ector_renderer_draw(Eo *obj, 
Ector_Renderer_Cairo_Sh
          }
 
        // Set dash, cap and join
-       cairo_set_line_width(pd->parent->cairo, (pd->public_shape->stroke.width 
* pd->public_shape->stroke.scale * 2));
+       cairo_set_line_width(pd->parent->cairo, (pd->public_shape->stroke.width 
* pd->public_shape->stroke.scale));
        cairo_set_line_cap(pd->parent->cairo, (cairo_line_cap_t) 
pd->public_shape->stroke.cap);
        cairo_set_line_join(pd->parent->cairo, (cairo_line_join_t) 
pd->public_shape->stroke.join);
        cairo_stroke(pd->parent->cairo);
diff --git a/src/lib/ector/software/ector_renderer_software_shape.c 
b/src/lib/ector/software/ector_renderer_software_shape.c
index 50fcddf..faafe0d 100644
--- a/src/lib/ector/software/ector_renderer_software_shape.c
+++ b/src/lib/ector/software/ector_renderer_software_shape.c
@@ -543,9 +543,10 @@ _update_rle(Eo *obj, Ector_Renderer_Software_Shape_Data 
*pd)
           {
              ector_software_rasterizer_stroke_set(pd->surface->rasterizer,
                                                   
(pd->public_shape->stroke.width *
-                                                   
pd->public_shape->stroke.scale),
+                                                  
pd->public_shape->stroke.scale),
                                                   pd->public_shape->stroke.cap,
-                                                  
pd->public_shape->stroke.join);
+                                                  
pd->public_shape->stroke.join,
+                                                  pd->base->m);
 
              if (pd->public_shape->stroke.dash)
                {
diff --git a/src/lib/ector/software/ector_software_private.h 
b/src/lib/ector/software/ector_software_private.h
index 1aa1511..d11ba3a 100644
--- a/src/lib/ector/software/ector_software_private.h
+++ b/src/lib/ector/software/ector_software_private.h
@@ -108,7 +108,7 @@ void ector_software_rasterizer_init(Software_Rasterizer 
*rasterizer);
 void ector_software_rasterizer_done(Software_Rasterizer *rasterizer);
 
 void ector_software_rasterizer_stroke_set(Software_Rasterizer *rasterizer, 
double width,
-                                          Efl_Gfx_Cap cap_style, Efl_Gfx_Join 
join_style);
+                                          Efl_Gfx_Cap cap_style, Efl_Gfx_Join 
join_style, Eina_Matrix3 *m);
 
 void ector_software_rasterizer_transform_set(Software_Rasterizer *rasterizer, 
Eina_Matrix3 *t);
 void ector_software_rasterizer_color_set(Software_Rasterizer *rasterizer, int 
r, int g, int b, int a);
diff --git a/src/lib/ector/software/ector_software_rasterizer.c 
b/src/lib/ector/software/ector_software_rasterizer.c
index cd59eb8..b0ea483 100644
--- a/src/lib/ector/software/ector_software_rasterizer.c
+++ b/src/lib/ector/software/ector_software_rasterizer.c
@@ -365,11 +365,23 @@ void ector_software_rasterizer_done(Software_Rasterizer 
*rasterizer)
 }
 
 void ector_software_rasterizer_stroke_set(Software_Rasterizer *rasterizer, 
double width,
-                                          Efl_Gfx_Cap cap_style, Efl_Gfx_Join 
join_style)
+                                          Efl_Gfx_Cap cap_style, Efl_Gfx_Join 
join_style,
+                                          Eina_Matrix3 *m)
 {
    SW_FT_Stroker_LineCap cap;
    SW_FT_Stroker_LineJoin join;
-   int stroke_width = (int)(width * 64);
+   int stroke_width;
+   double scale_factor = 1.0;
+   if (m)
+     {
+        // get the minimum scale factor from matrix
+        scale_factor =  m->xx < m->yy ? m->xx : m->yy;
+     }
+   width = width * scale_factor;
+   width = width/2.0; // as free type uses it as the radius of the
+                      // pen not the diameter.
+   // convert to freetype co-ordinate
+   stroke_width = (int)(width * 64);
 
    switch (cap_style)
      {

-- 


Reply via email to