Bug 1414097 - Convert nsDisplaySelectionOverlay to WebRender. r?ethlin
MozReview-Commit-ID: 5icpe4OR0Qa
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -2110,47 +2110,75 @@ public:
#ifdef NS_BUILD_REFCNT_LOGGING
virtual ~nsDisplaySelectionOverlay() {
MOZ_COUNT_DTOR(nsDisplaySelectionOverlay);
}
#endif
virtual void Paint(nsDisplayListBuilder* aBuilder,
gfxContext* aCtx) override;
+ bool CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
+ mozilla::wr::IpcResourceUpdateQueue& aResources,
+ const StackingContextHelper& aSc,
+ mozilla::layers::WebRenderLayerManager* aManager,
+ nsDisplayListBuilder* aDisplayListBuilder) override;
NS_DISPLAY_DECL_NAME("SelectionOverlay", TYPE_SELECTION_OVERLAY)
private:
+ Color ComputeColor() const;
+
int16_t mSelectionValue;
};
-void nsDisplaySelectionOverlay::Paint(nsDisplayListBuilder* aBuilder,
- gfxContext* aCtx)
-{
- DrawTarget& aDrawTarget = *aCtx->GetDrawTarget();
-
+Color
+nsDisplaySelectionOverlay::ComputeColor() const
+{
LookAndFeel::ColorID colorID;
if (mSelectionValue == nsISelectionController::SELECTION_ON) {
colorID = LookAndFeel::eColorID_TextSelectBackground;
} else if (mSelectionValue == nsISelectionController::SELECTION_ATTENTION) {
colorID = LookAndFeel::eColorID_TextSelectBackgroundAttention;
} else {
colorID = LookAndFeel::eColorID_TextSelectBackgroundDisabled;
}
Color c = Color::FromABGR(LookAndFeel::GetColor(colorID, NS_RGB(255, 255, 255)));
c.a = .5;
- ColorPattern color(ToDeviceColor(c));
+ return ToDeviceColor(c);
+}
+
+void nsDisplaySelectionOverlay::Paint(nsDisplayListBuilder* aBuilder,
+ gfxContext* aCtx)
+{
+ DrawTarget& aDrawTarget = *aCtx->GetDrawTarget();
+ ColorPattern color(ComputeColor());
nsIntRect pxRect =
mVisibleRect.ToOutsidePixels(mFrame->PresContext()->AppUnitsPerDevPixel());
Rect rect(pxRect.x, pxRect.y, pxRect.width, pxRect.height);
MaybeSnapToDevicePixels(rect, aDrawTarget, true);
aDrawTarget.FillRect(rect, color);
}
+
+bool
+nsDisplaySelectionOverlay::CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
+ mozilla::wr::IpcResourceUpdateQueue& aResources,
+ const StackingContextHelper& aSc,
+ mozilla::layers::WebRenderLayerManager* aManager,
+ nsDisplayListBuilder* aDisplayListBuilder)
+{
+ wr::LayoutRect bounds = aSc.ToRelativeLayoutRect(
+ LayoutDeviceRect::FromAppUnits(nsRect(ToReferenceFrame(), Frame()->GetSize()),
+ mFrame->PresContext()->AppUnitsPerDevPixel()));
+ aBuilder.PushRect(bounds, bounds, !BackfaceIsHidden(),
+ wr::ToColorF(ComputeColor()));
+ return true;
+}
+
/********************************************************
* Refreshes each content's frame
*********************************************************/
void
nsFrame::DisplaySelectionOverlay(nsDisplayListBuilder* aBuilder,
nsDisplayList* aList,
uint16_t aContentType)