From 5fa60a7abaa72ba95b90a4587476b940e764d889 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Mon, 17 Sep 2012 15:20:04 -0500 Subject: [PATCH] Add world matrix stack --- tdegtk/tqtcairopainter.cpp | 26 ++++++++++++++++++++------ tdegtk/tqtcairopainter.h | 5 +++++ 2 files changed, 25 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; diff --git a/tdegtk/tqtcairopainter.h b/tdegtk/tqtcairopainter.h index 9332128..d04e9a4 100644 --- a/tdegtk/tqtcairopainter.h +++ b/tdegtk/tqtcairopainter.h @@ -29,11 +29,14 @@ #include "ntqbrush.h" #include "ntqfont.h" #include "ntqimage.h" +#include "ntqptrstack.h" #include "ntqpainter.h" #include #include +typedef TQPtrStack TQWMatrixStack; + class Q_EXPORT TQt3CairoPaintDevice : public TQPaintDevice // picture class { public: @@ -85,6 +88,8 @@ class Q_EXPORT TQt3CairoPaintDevice : public TQPaintDevice // picture class TQFont m_font; TQImage m_clipRegion; bool m_clipRegionEnabled; + + TQWMatrixStack m_worldMatrixStack; }; #endif // TDEQT4PAINTER_H