diff options
author | Charles Yin <yinyunqiao@gmail.com> | 2012-03-28 00:06:28 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-30 05:18:32 +0200 |
commit | 200f783745b571725f899f08c34d1155be632523 (patch) | |
tree | 146c481f5ad5bbb900acf9fbf9251a68d633c266 /src/quick/items/context2d/qquickcontext2dcommandbuffer.cpp | |
parent | 652fa5b7a44d2d7bb38126b4659e7347caa5d4a8 (diff) |
Fix context2d transform issues
After calling transform related methods, the current path should be transformed with the same method but in reversal mode.
So that during painting, the painter will apply the CTM to this path again, otherwise path will be transformed twice.
Change-Id: I7e12bdff82dabb408f47152ba07b608872d4093f
Task-number: QTBUG-24988
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'src/quick/items/context2d/qquickcontext2dcommandbuffer.cpp')
-rw-r--r-- | src/quick/items/context2d/qquickcontext2dcommandbuffer.cpp | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/quick/items/context2d/qquickcontext2dcommandbuffer.cpp b/src/quick/items/context2d/qquickcontext2dcommandbuffer.cpp index 591fc216a4..f6b9a1afeb 100644 --- a/src/quick/items/context2d/qquickcontext2dcommandbuffer.cpp +++ b/src/quick/items/context2d/qquickcontext2dcommandbuffer.cpp @@ -236,7 +236,7 @@ void QQuickContext2DCommandBuffer::replay(QPainter* p, QQuickContext2D::State& s reset(); - QTransform originMatrix = p->transform(); + QTransform originMatrix = p->worldTransform(); QPen pen = makePen(state); setPainterState(p, state, pen); @@ -247,7 +247,7 @@ void QQuickContext2DCommandBuffer::replay(QPainter* p, QQuickContext2D::State& s case QQuickContext2D::UpdateMatrix: { state.matrix = takeMatrix(); - p->setTransform(state.matrix * originMatrix); + p->setWorldTransform(state.matrix * originMatrix); break; } case QQuickContext2D::ClearRect: @@ -303,36 +303,42 @@ void QQuickContext2DCommandBuffer::replay(QPainter* p, QQuickContext2D::State& s state.strokeStyle = takeStrokeStyle(); state.strokePatternRepeatX = takeBool(); state.strokePatternRepeatY = takeBool(); - pen.setBrush(state.strokeStyle); - p->setPen(pen); + QPen nPen = p->pen(); + nPen.setBrush(state.strokeStyle); + p->setPen(nPen); break; } case QQuickContext2D::LineWidth: { state.lineWidth = takeLineWidth(); - pen.setWidth(state.lineWidth); - p->setPen(pen); + QPen nPen = p->pen(); + + nPen.setWidthF(state.lineWidth); + p->setPen(nPen); break; } case QQuickContext2D::LineCap: { state.lineCap = takeLineCap(); - pen.setCapStyle(state.lineCap); - p->setPen(pen); + QPen nPen = p->pen(); + nPen.setCapStyle(state.lineCap); + p->setPen(nPen); break; } case QQuickContext2D::LineJoin: { state.lineJoin = takeLineJoin(); - pen.setJoinStyle(state.lineJoin); - p->setPen(pen); + QPen nPen = p->pen(); + nPen.setJoinStyle(state.lineJoin); + p->setPen(nPen); break; } case QQuickContext2D::MiterLimit: { state.miterLimit = takeMiterLimit(); - pen.setMiterLimit(state.miterLimit); - p->setPen(pen); + QPen nPen = p->pen(); + nPen.setMiterLimit(state.miterLimit); + p->setPen(nPen); break; } case QQuickContext2D::TextAlign: |