From 5613ca50ae8c674a3965ff01bb193cbce1cd0b2b Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 3 Apr 2015 16:33:07 +0200 Subject: [PATCH] ector: remember last position and translate to Ector_Renderer origin position. --- src/lib/ector/cairo/ector_cairo_private.h | 3 +++ src/lib/ector/cairo/ector_cairo_surface.c | 1 + src/lib/ector/cairo/ector_renderer_cairo_base.c | 10 ++++++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/lib/ector/cairo/ector_cairo_private.h b/src/lib/ector/cairo/ector_cairo_private.h index 14277a744b..07446a82c2 100644 --- a/src/lib/ector/cairo/ector_cairo_private.h +++ b/src/lib/ector/cairo/ector_cairo_private.h @@ -7,6 +7,9 @@ typedef struct _Ector_Cairo_Surface_Data Ector_Cairo_Surface_Data; struct _Ector_Cairo_Surface_Data { cairo_t *cairo; + struct { + double x, y; + } current; Eina_Bool internal : 1; }; diff --git a/src/lib/ector/cairo/ector_cairo_surface.c b/src/lib/ector/cairo/ector_cairo_surface.c index 7204eedaf4..ff30135714 100644 --- a/src/lib/ector/cairo/ector_cairo_surface.c +++ b/src/lib/ector/cairo/ector_cairo_surface.c @@ -95,6 +95,7 @@ _ector_cairo_surface_context_set(Eo *obj, if (!internal) internal = cairo_image_surface_create(0, 1, 1); ctx = cairo_create(internal); } + pd->current.x = pd->current.y = 0; pd->cairo = ctx; } diff --git a/src/lib/ector/cairo/ector_renderer_cairo_base.c b/src/lib/ector/cairo/ector_renderer_cairo_base.c index a9eb99a38b..5e1c0606cc 100644 --- a/src/lib/ector/cairo/ector_renderer_cairo_base.c +++ b/src/lib/ector/cairo/ector_renderer_cairo_base.c @@ -143,6 +143,7 @@ _ector_renderer_cairo_base_ector_renderer_generic_base_draw(Eo *obj, { double r, g, b, a; cairo_operator_t cop; + double cx, cy; USE(obj, cairo_translate, EINA_FALSE); USE(obj, cairo_set_source_rgba, EINA_FALSE); @@ -166,9 +167,14 @@ _ector_renderer_cairo_base_ector_renderer_generic_base_draw(Eo *obj, a = ((double)((pd->generic->color.a * A_VAL(&mul_col)) >> 8)) / 255; cairo_set_operator(pd->parent->cairo, cop); + cairo_transform(pd->parent->cairo, &identity); if (pd->m) cairo_transform(pd->parent->cairo, pd->m); - else cairo_transform(pd->parent->cairo, &identity); - cairo_translate(pd->parent->cairo, pd->generic->origin.x - x, pd->generic->origin.y - y); + cx = pd->generic->origin.x - pd->parent->current.x; + cy = pd->generic->origin.y - pd->parent->current.y; + cairo_translate(pd->parent->cairo, cx, cy); + pd->parent->current.x = pd->generic->origin.x; + pd->parent->current.y = pd->generic->origin.y; + cairo_set_source_rgba(pd->parent->cairo, r, g, b, a); return EINA_TRUE;