Bug 759036. Fix a masking bug in Thebes-Azure. r=Bas

This commit is contained in:
Nicholas Cameron 2012-06-14 10:40:43 +12:00
parent 9f3d57ab47
commit 2314a427af
2 changed files with 7 additions and 11 deletions

View File

@ -46,10 +46,10 @@ public:
Matrix transform = state.surfTransform;
if (state.patternTransformChanged) {
Matrix mat = state.patternTransform;
Matrix mat = mContext->mDT->GetTransform();
mat.Invert();
transform = mat * mContext->mDT->GetTransform() * transform;
transform = mat * state.patternTransform * transform;
}
mPattern = new (mSurfacePattern.addr())
@ -1423,7 +1423,7 @@ gfxContext::Mask(gfxASurface *surface, const gfxPoint& offset)
mDT->Mask(GeneralPattern(this),
SurfacePattern(sourceSurf, EXTEND_CLAMP,
Matrix(1.0f, 0, 0, 1.0f, Float(offset.x - pt.x), Float(offset.y - pt.y))),
DrawOptions(1.0f, CurrentState().op, CurrentState().aaMode));
DrawOptions(1.0f, CurrentState().op, CurrentState().aaMode));
}
}

View File

@ -167,7 +167,6 @@ gfxPattern::GetPattern(DrawTarget *aTarget, Matrix *aPatternTransform)
AdjustTransformForPattern(newMat, aTarget->GetTransform(), aPatternTransform);
newMat.Invert();
double x, y;
cairo_surface_get_device_offset(surf, &x, &y);
newMat.Translate(-x, -y);
@ -209,8 +208,6 @@ gfxPattern::GetPattern(DrawTarget *aTarget, Matrix *aPatternTransform)
AdjustTransformForPattern(newMat, aTarget->GetTransform(), aPatternTransform);
newMat.Invert();
mGfxPattern = new (mLinearGradientPattern.addr())
LinearGradientPattern(Point(x1, y1), Point(x2, y2), mStops, newMat);
@ -248,8 +245,6 @@ gfxPattern::GetPattern(DrawTarget *aTarget, Matrix *aPatternTransform)
AdjustTransformForPattern(newMat, aTarget->GetTransform(), aPatternTransform);
newMat.Invert();
double x1, y1, x2, y2, r1, r2;
cairo_pattern_get_radial_circles(mPattern, &x1, &y1, &r1, &x2, &y2, &r2);
mGfxPattern = new (mRadialGradientPattern.addr())
@ -417,12 +412,13 @@ gfxPattern::AdjustTransformForPattern(Matrix &aPatternTransform,
const Matrix &aCurrentTransform,
const Matrix *aOriginalTransform)
{
aPatternTransform.Invert();
if (!aOriginalTransform) {
return;
}
Matrix mat = *aOriginalTransform;
Matrix mat = aCurrentTransform;
mat.Invert();
aPatternTransform = mat * aCurrentTransform * aPatternTransform;
}
aPatternTransform = aPatternTransform * *aOriginalTransform * mat;
}