]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix drawing of scaled bitmaps in wxCairoContext.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 2 Jun 2010 11:58:25 +0000 (11:58 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 2 Jun 2010 11:58:25 +0000 (11:58 +0000)
We must offset the coordinate system before scaling it, otherwise incorrect
offset is used.

Add a test for drawing translated/scaled bitmaps to the drawing sample.

See #11097.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64463 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/drawing/drawing.cpp
src/generic/graphicc.cpp

index 36ecfb44895da518006da7235300dc9751a61648..afebb3086948b776b5d228ea6c99ca0f214404b8 100644 (file)
@@ -1052,8 +1052,15 @@ void MyCanvas::DrawGraphics(wxGraphicsContext* gc)
         gc->PopState();
     }
     gc->PopState();
+
+    gc->PushState();
+    gc->Translate(60, 400);
+    gc->DrawText("Scaled smiley inside a square", 0, 0);
+    gc->DrawRectangle(BASE2, BASE2, 100, 100);
+    gc->DrawBitmap(m_smile_bmp, BASE2, BASE2, 100, 100);
+    gc->PopState();
 }
-#endif
+#endif // wxUSE_GRAPHICS_CONTEXT
 
 void MyCanvas::DrawCircles(wxDC& dc)
 {
index b21d03e9d7d80d8727c2b969f939e1ce6816c3bd..9b9e88b22feda74941714ab168c9a2bebe847612 100644 (file)
@@ -1471,10 +1471,10 @@ void wxCairoContext::DrawBitmap(const wxGraphicsBitmap &bmp, wxDouble x, wxDoubl
 
     wxDouble scaleX = w / size.GetWidth();
     wxDouble scaleY = h / size.GetHeight();
-    cairo_scale(m_context, scaleX, scaleY);
 
     // prepare to draw the image
     cairo_translate(m_context, x, y);
+    cairo_scale(m_context, scaleX, scaleY);
     cairo_set_source(m_context, pattern);
     // use the original size here since the context is scaled already...
     cairo_rectangle(m_context, 0, 0, size.GetWidth(), size.GetHeight());