Bug 1384043 - Support solid color for layers free mode. r=mattwoodrow
MozReview-Commit-ID: H4YWgdl1yAV
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -2879,16 +2879,41 @@ nsDisplaySolidColor::WriteDebugInfo(std:
{
aStream << " (rgba "
<< (int)NS_GET_R(mColor) << ","
<< (int)NS_GET_G(mColor) << ","
<< (int)NS_GET_B(mColor) << ","
<< (int)NS_GET_A(mColor) << ")";
}
+bool
+nsDisplaySolidColor::CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
+ const StackingContextHelper& aSc,
+ nsTArray<WebRenderParentCommand>& aParentCommands,
+ mozilla::layers::WebRenderLayerManager* aManager,
+ nsDisplayListBuilder* aDisplayListBuilder)
+{
+ if (aManager->IsLayersFreeTransaction()) {
+ ContainerLayerParameters parameter;
+ if (GetLayerState(aDisplayListBuilder, aManager, parameter) != LAYER_ACTIVE) {
+ return false;
+ }
+ }
+
+ LayoutDeviceRect bounds = LayoutDeviceRect::FromAppUnits(
+ mVisibleRect, mFrame->PresContext()->AppUnitsPerDevPixel());
+ wr::LayoutRect transformedRect = aSc.ToRelativeLayoutRect(bounds);
+
+ aBuilder.PushRect(transformedRect,
+ transformedRect,
+ wr::ToColorF(ToDeviceColor(mColor)));
+
+ return true;
+}
+
nsRect
nsDisplaySolidColorRegion::GetBounds(nsDisplayListBuilder* aBuilder, bool* aSnap)
{
*aSnap = true;
return mRegion.GetBounds();
}
void
--- a/layout/painting/nsDisplayList.h
+++ b/layout/painting/nsDisplayList.h
@@ -2999,16 +2999,22 @@ public:
virtual already_AddRefed<Layer> BuildLayer(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerLayerParameters& aContainerParameters) override;
virtual void Paint(nsDisplayListBuilder* aBuilder, gfxContext* aCtx) override;
virtual void WriteDebugInfo(std::stringstream& aStream) override;
+ virtual bool CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
+ const StackingContextHelper& aSc,
+ nsTArray<WebRenderParentCommand>& aParentCommands,
+ mozilla::layers::WebRenderLayerManager* aManager,
+ nsDisplayListBuilder* aDisplayListBuilder) override;
+
NS_DISPLAY_DECL_NAME("SolidColor", TYPE_SOLID_COLOR)
private:
nsRect mBounds;
};
/**
* A display item that renders a solid color over a region. This is not