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) { --