Bug 1351511 - Support nsDisplaySolidColorRegion to WR DisplayItems
MozReview-Commit-ID: LMs5ON8NC2p
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -2963,16 +2963,36 @@ nsDisplaySolidColorRegion::WriteDebugInf
{
aStream << " (rgba "
<< int(mColor.r * 255) << ","
<< int(mColor.g * 255) << ","
<< int(mColor.b * 255) << ","
<< mColor.a << ")";
}
+bool
+nsDisplaySolidColorRegion::CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
+ const StackingContextHelper& aSc,
+ nsTArray<WebRenderParentCommand>& aParentCommands,
+ mozilla::layers::WebRenderLayerManager* aManager,
+ nsDisplayListBuilder* aDisplayListBuilder)
+{
+ for (auto iter = mRegion.RectIter(); !iter.Done(); iter.Next()) {
+ nsRect rect = iter.Get();
+ LayoutDeviceRect layerRects = LayoutDeviceRect::FromAppUnits(
+ rect, mFrame->PresContext()->AppUnitsPerDevPixel());
+ wr::LayoutRect transformedRect = aSc.ToRelativeLayoutRect(layerRects);
+ aBuilder.PushRect(transformedRect,
+ transformedRect,
+ wr::ToColorF(ToDeviceColor(mColor)));
+ }
+
+ return true;
+}
+
static void
RegisterThemeGeometry(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
nsITheme::ThemeGeometryType aType)
{
if (aBuilder->IsInChromeDocumentOrPopup() && !aBuilder->IsInTransform()) {
nsIFrame* displayRoot = nsLayoutUtils::GetDisplayRootFrame(aFrame);
nsPoint offset = aBuilder->IsInSubdocument() ? aBuilder->ToReferenceFrame(aFrame)
: aFrame->GetOffsetTo(displayRoot);
--- a/layout/painting/nsDisplayList.h
+++ b/layout/painting/nsDisplayList.h
@@ -3113,16 +3113,22 @@ public:
static_cast<const nsDisplaySolidColorRegionGeometry*>(aGeometry);
if (mColor == geometry->mColor) {
aInvalidRegion->Xor(geometry->mRegion, mRegion);
} else {
aInvalidRegion->Or(geometry->mRegion.GetBounds(), mRegion.GetBounds());
}
}
+ virtual bool CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
+ const StackingContextHelper& aSc,
+ nsTArray<WebRenderParentCommand>& aParentCommands,
+ mozilla::layers::WebRenderLayerManager* aManager,
+ nsDisplayListBuilder* aDisplayListBuilder) override;
+
NS_DISPLAY_DECL_NAME("SolidColorRegion", TYPE_SOLID_COLOR_REGION)
protected:
virtual nsRect GetBounds(nsDisplayListBuilder* aBuilder, bool* aSnap) override;
virtual void Paint(nsDisplayListBuilder* aBuilder, gfxContext* aCtx) override;
virtual void WriteDebugInfo(std::stringstream& aStream) override;