summaryrefslogtreecommitdiffstats
path: root/tdegtk/tqtcairopainter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdegtk/tqtcairopainter.cpp')
-rw-r--r--tdegtk/tqtcairopainter.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/tdegtk/tqtcairopainter.cpp b/tdegtk/tqtcairopainter.cpp
index 75d1b99..0e8da20 100644
--- a/tdegtk/tqtcairopainter.cpp
+++ b/tdegtk/tqtcairopainter.cpp
@@ -847,6 +847,7 @@ TQt3CairoPaintDevice::TQt3CairoPaintDevice( cairo_surface_t *cairosurface )
: TQPaintDevice( TQInternal::Picture | TQInternal::ExternalDevice ), m_intermediateSurface(NULL), m_painter(NULL), m_devicePainter(NULL)
{
m_surface = cairosurface;
+ m_worldMatrixStack.setAutoDelete(TRUE);
}
/*!
@@ -1174,6 +1175,7 @@ bool TQt3CairoPaintDevice::cmd( int c, TQPainter *pt, TQPDevCmdParam *p )
setCairoTransformations();
m_clipRegion = TQImage();
m_clipRegionEnabled = false;
+ m_worldMatrixStack.clear();
}
break;
case PdcEnd:
@@ -1386,16 +1388,28 @@ bool TQt3CairoPaintDevice::cmd( int c, TQPainter *pt, TQPDevCmdParam *p )
}
}
break;
-#if 0
-#ifndef QT_NO_TRANSFORMATIONS
case PdcSaveWMatrix:
- painter->saveWorldMatrix();
+ if (p) {
+ const TQWMatrix* tqt3matrix = p[0].matrix;
+ m_worldMatrixStack.push(new TQWMatrix(*tqt3matrix));
+ }
break;
case PdcRestoreWMatrix:
- painter->restoreWorldMatrix();
+ if (p) {
+ if (!m_worldMatrixStack.isEmpty()) {
+ TQWMatrix* matrix = m_worldMatrixStack.pop();
+
+ // Set world matrix
+ TQPDevCmdParam param[2];
+ int command = PdcSetWMatrix;
+ param[0].matrix = matrix;
+ param[1].ival = 0;
+ cmd(command, pt, param);
+
+ delete matrix;
+ }
+ }
break;
-#endif
-#endif
case PdcSetClip:
if ((p) && (m_painter)) {
m_clipRegionEnabled = p[0].ival;