зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
9ac2c3e3be
Коммит
6d81cd6a30
|
@ -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,
|
||||
|
|
Загрузка…
Ссылка в новой задаче