Bug 1355791 - Instead of pushing a scroll layer, put the clip mask into the existing item clip. r?mchang
MozReview-Commit-ID: jdKEkamSs4
--- a/gfx/layers/wr/WebRenderCanvasLayer.cpp
+++ b/gfx/layers/wr/WebRenderCanvasLayer.cpp
@@ -58,23 +58,21 @@ WebRenderCanvasLayer::RenderLayer(wr::Di
gfx::Matrix4x4 transform = GetTransform();
const bool needsYFlip = (mOriginPos == gl::OriginPos::BottomLeft);
if (needsYFlip) {
transform.PreTranslate(0, mBounds.height, 0).PreScale(1, -1, 1);
}
gfx::Rect relBounds = GetWrRelBounds();
- gfx::Rect overflow(0, 0, relBounds.width, relBounds.height);
+ gfx::Rect rect = RelativeToVisible(gfx::Rect(0, 0, mBounds.width, mBounds.height));
- gfx::Rect rect = RelativeToVisible(gfx::Rect(0, 0, mBounds.width, mBounds.height));
gfx::Rect clipRect = GetWrClipRect(rect);
-
Maybe<WrImageMask> mask = BuildWrMaskLayer();
- WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect));
+ WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect), mask.ptrOr(nullptr));
wr::ImageRendering filter = wr::ToImageRendering(mSamplingFilter);
wr::MixBlendMode mixBlendMode = wr::ToWrMixBlendMode(GetMixBlendMode());
DumpLayerInfo("CanvasLayer", rect);
if (gfxPrefs::LayersDump()) {
printf_stderr("CanvasLayer %p texture-filter=%s\n",
this->GetLayer(),
@@ -86,21 +84,17 @@ WebRenderCanvasLayer::RenderLayer(wr::Di
key.mHandle = WrBridge()->GetNextResourceId();
WrBridge()->AddWebRenderParentCommand(OpAddExternalImage(mExternalImageId, key));
aBuilder.PushStackingContext(wr::ToWrRect(relBounds),
1.0f,
//GetAnimations(),
transform,
mixBlendMode);
- aBuilder.PushScrollLayer(wr::ToWrRect(overflow),
- wr::ToWrRect(overflow),
- mask.ptrOr(nullptr));
aBuilder.PushImage(wr::ToWrRect(rect), clip, filter, key);
- aBuilder.PopScrollLayer();
aBuilder.PopStackingContext();
}
void
WebRenderCanvasLayer::AttachCompositable()
{
mCanvasClient->Connect();
}
--- a/gfx/layers/wr/WebRenderColorLayer.cpp
+++ b/gfx/layers/wr/WebRenderColorLayer.cpp
@@ -16,35 +16,29 @@ namespace layers {
using namespace mozilla::gfx;
void
WebRenderColorLayer::RenderLayer(wr::DisplayListBuilder& aBuilder)
{
gfx::Matrix4x4 transform = GetTransform();
gfx::Rect relBounds = GetWrRelBounds();
- gfx::Rect overflow(0, 0, relBounds.width, relBounds.height);
+ gfx::Rect rect = GetWrBoundsRect();
- gfx::Rect rect = GetWrBoundsRect();
gfx::Rect clipRect = GetWrClipRect(rect);
-
Maybe<WrImageMask> mask = BuildWrMaskLayer();
- WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect));
+ WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect), mask.ptrOr(nullptr));
wr::MixBlendMode mixBlendMode = wr::ToWrMixBlendMode(GetMixBlendMode());
DumpLayerInfo("ColorLayer", rect);
aBuilder.PushStackingContext(wr::ToWrRect(relBounds),
1.0f,
//GetAnimations(),
transform,
mixBlendMode);
- aBuilder.PushScrollLayer(wr::ToWrRect(overflow),
- wr::ToWrRect(overflow),
- mask.ptrOr(nullptr));
aBuilder.PushRect(wr::ToWrRect(rect), clip, wr::ToWrColor(mColor));
- aBuilder.PopScrollLayer();
aBuilder.PopStackingContext();
}
} // namespace layers
} // namespace mozilla
--- a/gfx/layers/wr/WebRenderImageLayer.cpp
+++ b/gfx/layers/wr/WebRenderImageLayer.cpp
@@ -124,29 +124,28 @@ WebRenderImageLayer::RenderLayer(wr::Dis
gfx::IntSize size = image->GetSize();
if (mImageClient && !mImageClient->UpdateImage(mContainer, /* unused */0)) {
return;
}
gfx::Matrix4x4 transform = GetTransform();
gfx::Rect relBounds = GetWrRelBounds();
- gfx::Rect overflow(0, 0, relBounds.width, relBounds.height);
gfx::Rect rect = gfx::Rect(0, 0, size.width, size.height);
if (mScaleMode != ScaleMode::SCALE_NONE) {
NS_ASSERTION(mScaleMode == ScaleMode::STRETCH,
"No other scalemodes than stretch and none supported yet.");
rect = gfx::Rect(0, 0, mScaleToSize.width, mScaleToSize.height);
}
rect = RelativeToVisible(rect);
+
gfx::Rect clipRect = GetWrClipRect(rect);
-
Maybe<WrImageMask> mask = BuildWrMaskLayer();
- WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect));
+ WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect), mask.ptrOr(nullptr));
wr::ImageRendering filter = wr::ToImageRendering(mSamplingFilter);
wr::MixBlendMode mixBlendMode = wr::ToWrMixBlendMode(GetMixBlendMode());
DumpLayerInfo("Image Layer", rect);
if (gfxPrefs::LayersDump()) {
printf_stderr("ImageLayer %p texture-filter=%s \n",
GetLayer(),
@@ -158,21 +157,17 @@ WebRenderImageLayer::RenderLayer(wr::Dis
key.mHandle = WrBridge()->GetNextResourceId();
WrBridge()->AddWebRenderParentCommand(OpAddExternalImage(mExternalImageId, key));
aBuilder.PushStackingContext(wr::ToWrRect(relBounds),
1.0f,
//GetAnimations(),
transform,
mixBlendMode);
- aBuilder.PushScrollLayer(wr::ToWrRect(overflow),
- wr::ToWrRect(overflow),
- mask.ptrOr(nullptr));
aBuilder.PushImage(wr::ToWrRect(rect), clip, filter, key);
- aBuilder.PopScrollLayer();
aBuilder.PopStackingContext();
//mContainer->SetImageFactory(originalIF);
}
Maybe<WrImageMask>
WebRenderImageLayer::RenderMaskLayer(const gfx::Matrix4x4& aTransform)
{
--- a/gfx/layers/wr/WebRenderPaintedLayer.cpp
+++ b/gfx/layers/wr/WebRenderPaintedLayer.cpp
@@ -181,40 +181,34 @@ WebRenderPaintedLayer::RenderLayer(wr::D
RefPtr<TextureWrapperImage> image = new TextureWrapperImage(texture, IntRect(IntPoint(0, 0), imageSize));
mImageContainer->SetCurrentImageInTransaction(image);
if (!mImageClient->UpdateImage(mImageContainer, /* unused */0)) {
return;
}
gfx::Matrix4x4 transform = GetTransform();
gfx::Rect relBounds = GetWrRelBounds();
- gfx::Rect overflow(0, 0, relBounds.width, relBounds.height);
+ gfx::Rect rect(0, 0, size.width, size.height);
- gfx::Rect rect(0, 0, size.width, size.height);
gfx::Rect clipRect = GetWrClipRect(rect);
-
Maybe<WrImageMask> mask = BuildWrMaskLayer();
- WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect));
+ WrClipRegion clip = aBuilder.BuildClipRegion(wr::ToWrRect(clipRect), mask.ptrOr(nullptr));
wr::MixBlendMode mixBlendMode = wr::ToWrMixBlendMode(GetMixBlendMode());
DumpLayerInfo("PaintedLayer", rect);
WrImageKey key;
key.mNamespace = WrBridge()->GetNamespace();
key.mHandle = WrBridge()->GetNextResourceId();
WrBridge()->AddWebRenderParentCommand(OpAddExternalImage(mExternalImageId, key));
aBuilder.PushStackingContext(wr::ToWrRect(relBounds),
1.0f,
//GetAnimations(),
transform,
mixBlendMode);
- aBuilder.PushScrollLayer(wr::ToWrRect(overflow),
- wr::ToWrRect(overflow),
- mask.ptrOr(nullptr));
aBuilder.PushImage(wr::ToWrRect(rect), clip, wr::ImageRendering::Auto, key);
- aBuilder.PopScrollLayer();
aBuilder.PopStackingContext();
}
} // namespace layers
} // namespace mozilla