Bug 1388662 - Correct canvas transform in layers-free mode. r=mtseng
MozReview-Commit-ID: 5J0I1OTA6Ql
--- a/layout/generic/nsHTMLCanvasFrame.cpp
+++ b/layout/generic/nsHTMLCanvasFrame.cpp
@@ -172,21 +172,24 @@ public:
wr::LayoutRect r = aSc.ToRelativeLayoutRect(bounds);
aBuilder.PushIFrame(r, data->GetPipelineId().ref());
gfx::Matrix4x4 scTransform;
if (data->NeedsYFlip()) {
scTransform = scTransform.PreTranslate(0, data->GetSize().height, 0).PreScale(1, -1, 1);
}
+ gfxRect destGFXRect = mFrame->PresContext()->AppUnitsToGfxUnits(dest);
+ scTransform.PreScale(destGFXRect.Width() / canvasSizeInPx.width,
+ destGFXRect.Height() / canvasSizeInPx.height, 1.0f);
+
MaybeIntSize scaleToSize;
LayerRect scBounds(0, 0, bounds.width, bounds.height);
wr::ImageRendering filter = wr::ToImageRendering(nsLayoutUtils::GetSamplingFilterForFrame(mFrame));
wr::MixBlendMode mixBlendMode = wr::MixBlendMode::Normal;
-
aManager->WrBridge()->AddWebRenderParentCommand(OpUpdateAsyncImagePipeline(data->GetPipelineId().value(),
scBounds,
scTransform,
scaleToSize,
filter,
mixBlendMode));
break;
}