Bug 1233632 - Moz2Dify GetBlurAndSpreadRadius(). r=dholbert.

The CurrentMatrix()-to-GetTransform() change in GetBlurAndSpreadRadius() is
valid because the operations performed on the resulting |transform| only
consult the _11, _12, _21 and _22 members; not the _31 and _32 members (which
are different in gfxContext vs. DrawTarget).

--HG--
extra : rebase_source : 4f40eb223e3e2153607c9c336fc1c850d0e1776f
This commit is contained in:
Nicholas Nethercote 2015-12-17 20:04:12 -08:00
Родитель 9ac2c3e3be
Коммит 6d81cd6a30
2 изменённых файлов: 9 добавлений и 9 удалений

Просмотреть файл

@ -5408,7 +5408,7 @@ nsContextBoxBlur::Init(const nsRect& aRect, nscoord aSpreadRadius,
IntSize blurRadius;
IntSize spreadRadius;
GetBlurAndSpreadRadius(aDestinationCtx, aAppUnitsPerDevPixel,
GetBlurAndSpreadRadius(aDestinationCtx->GetDrawTarget(), aAppUnitsPerDevPixel,
aBlurRadius, aSpreadRadius,
blurRadius, spreadRadius);
@ -5558,7 +5558,7 @@ nsContextBoxBlur::BlurRectangle(gfxContext* aDestinationCtx,
}
/* static */ void
nsContextBoxBlur::GetBlurAndSpreadRadius(gfxContext* aDestinationCtx,
nsContextBoxBlur::GetBlurAndSpreadRadius(DrawTarget* aDestDrawTarget,
int32_t aAppUnitsPerDevPixel,
nscoord aBlurRadius,
nscoord aSpreadRadius,
@ -5566,16 +5566,15 @@ nsContextBoxBlur::GetBlurAndSpreadRadius(gfxContext* aDestinationCtx,
IntSize& aOutSpreadRadius,
bool aConstrainSpreadRadius)
{
gfxFloat scaleX = 1;
gfxFloat scaleY = 1;
// Do blurs in device space when possible.
// Chrome/Skia always does the blurs in device space
// and will sometimes get incorrect results (e.g. rotated blurs)
gfxMatrix transform = aDestinationCtx->CurrentMatrix();
Matrix transform = aDestDrawTarget->GetTransform();
// XXX: we could probably handle negative scales but for now it's easier just to fallback
gfxFloat scaleX, scaleY;
if (transform.HasNonAxisAlignedTransform() || transform._11 <= 0.0 || transform._22 <= 0.0) {
transform = gfxMatrix();
scaleX = 1;
scaleY = 1;
} else {
scaleX = transform._11;
scaleY = transform._22;
@ -5617,7 +5616,7 @@ nsContextBoxBlur::InsetBoxBlur(gfxContext* aDestinationCtx,
IntSize spreadRadius;
// Convert the blur and spread radius to device pixels
bool constrainSpreadRadius = false;
GetBlurAndSpreadRadius(aDestinationCtx, aAppUnitsPerDevPixel,
GetBlurAndSpreadRadius(aDestinationCtx->GetDrawTarget(), aAppUnitsPerDevPixel,
aBlurRadiusAppUnits, aSpreadDistanceAppUnits,
blurRadius, spreadRadius, constrainSpreadRadius);

Просмотреть файл

@ -849,6 +849,7 @@ protected:
*/
class nsContextBoxBlur {
typedef mozilla::gfx::Color Color;
typedef mozilla::gfx::DrawTarget DrawTarget;
typedef mozilla::gfx::RectCornerRadii RectCornerRadii;
public:
@ -997,7 +998,7 @@ public:
mozilla::gfx::Point aShadowOffset);
protected:
static void GetBlurAndSpreadRadius(gfxContext* aContext,
static void GetBlurAndSpreadRadius(DrawTarget* aDestDrawTarget,
int32_t aAppUnitsPerDevPixel,
nscoord aBlurRadius,
nscoord aSpreadRadius,