diff options
Diffstat (limited to 'src/gui/painting/qpaintengine_p.h')
-rw-r--r-- | src/gui/painting/qpaintengine_p.h | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/gui/painting/qpaintengine_p.h b/src/gui/painting/qpaintengine_p.h index 9d511f9bad..8ac3fcff5c 100644 --- a/src/gui/painting/qpaintengine_p.h +++ b/src/gui/painting/qpaintengine_p.h @@ -71,6 +71,7 @@ public: QPaintDevice *pdev; QPaintEngine *q_ptr; + QRegion baseSystemClip; QRegion systemClip; QRect systemRect; QRegion systemViewport; @@ -79,8 +80,9 @@ public: uint hasSystemTransform : 1; uint hasSystemViewport : 1; - inline void transformSystemClip() + inline void updateSystemClip() { + systemClip = baseSystemClip; if (systemClip.isEmpty()) return; @@ -104,15 +106,30 @@ public: inline void setSystemTransform(const QTransform &xform) { systemTransform = xform; - if ((hasSystemTransform = !xform.isIdentity()) || hasSystemViewport) - transformSystemClip(); - systemStateChanged(); + hasSystemTransform = !xform.isIdentity(); + updateSystemClip(); + if (q_ptr->state) + systemStateChanged(); } inline void setSystemViewport(const QRegion ®ion) { systemViewport = region; hasSystemViewport = !systemViewport.isEmpty(); + updateSystemClip(); + if (q_ptr->state) + systemStateChanged(); + } + + inline void setSystemTransformAndViewport(const QTransform &xform, const QRegion ®ion) + { + systemTransform = xform; + hasSystemTransform = !xform.isIdentity(); + systemViewport = region; + hasSystemViewport = !systemViewport.isEmpty(); + updateSystemClip(); + if (q_ptr->state) + systemStateChanged(); } virtual void systemStateChanged() { } |