diff options
Diffstat (limited to 'tdegtk/tqtcairopainter.cpp')
-rw-r--r-- | tdegtk/tqtcairopainter.cpp | 26 |
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; |