[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Maposmatic-dev] [PATCH] cairo_renderer: use transform() instead of set_

From: Thomas Petazzoni
Subject: [Maposmatic-dev] [PATCH] cairo_renderer: use transform() instead of set_matrix() for markers
Date: Mon, 26 Mar 2012 16:49:50 +0200

From: Thomas Petazzoni <address@hidden>

Mapnik is current using context.set_matrix() to modify the Cairo
transformation matrix to render markers at the right location and with
the right angle on the map. This is typically used to render one-way
arrows with the MapQuest stylesheet.

Unfortunately, context.set_matrix() completely _overrides_ the
existing Cairo transformation matrix instead of making an _additional_
transformation to it. However, in MapOSMatic
(, for our map-rendering needs, we pass to
Mapnik a Cairo surface on which we have already applied a
translation+scaling transformation. The usage of .set_matrix() by
Mapnik completely overrides this transformation, with the result of
having completely misplaced one-way arrows.

By using context.transform(), then the transformation matrix is
applied on _top_ of the current one, which fixes the rendering. Now,
the one-way arrows are at the right locations on our translated+scaled
Cairo surface.

Thanks to Gaƫl Utard <address@hidden> for his help in debugging
this problem.

Signed-off-by: Thomas Petazzoni <address@hidden>
 src/cairo_renderer.cpp |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/cairo_renderer.cpp b/src/cairo_renderer.cpp
index 589247e..12f6277 100644
--- a/src/cairo_renderer.cpp
+++ b/src/cairo_renderer.cpp
@@ -1269,7 +1269,7 @@ void cairo_renderer_base::start_map_processing(Map const& 
                 double x, y, angle;
                 while (placement.get_point(&x, &y, &angle)) {
                     Cairo::Matrix matrix = Cairo::rotation_matrix(angle) * 
Cairo::translation_matrix(x,y) ;
-                    context.set_matrix(matrix);
+                    context.transform(matrix);

reply via email to

[Prev in Thread] Current Thread [Next in Thread]