From 3dfe60b882b8770e68eeedace61b2c5c0739c724 Mon Sep 17 00:00:00 2001 From: Kartikaya Gupta Date: Tue, 24 Jul 2018 14:06:23 -0400 Subject: [PATCH] Bug 1477471 - Implement PushLayerWithBlend for DrawTargetTiled. r=jrmuizel --- gfx/2d/DrawTargetTiled.cpp | 23 +++++++++++++++++++++++ gfx/2d/DrawTargetTiled.h | 6 ++++++ 2 files changed, 29 insertions(+) diff --git a/gfx/2d/DrawTargetTiled.cpp b/gfx/2d/DrawTargetTiled.cpp index e4b75e27f7b6..a2c9eddf91fc 100644 --- a/gfx/2d/DrawTargetTiled.cpp +++ b/gfx/2d/DrawTargetTiled.cpp @@ -347,6 +347,29 @@ DrawTargetTiled::PushLayer(bool aOpaque, Float aOpacity, SourceSurface* aMask, SetPermitSubpixelAA(aOpaque); } +void +DrawTargetTiled::PushLayerWithBlend(bool aOpaque, Float aOpacity, + SourceSurface* aMask, + const Matrix& aMaskTransform, + const IntRect& aBounds, + bool aCopyBackground, + CompositionOp aOp) +{ + // XXX - not sure this is what we want or whether we want to continue drawing to a larger + // intermediate surface, that would require tweaking the code in here a little though. + for (size_t i = 0; i < mTiles.size(); i++) { + if (!mTiles[i].mClippedOut) { + IntRect bounds = aBounds; + bounds.MoveBy(-mTiles[i].mTileOrigin); + mTiles[i].mDrawTarget->PushLayerWithBlend(aOpaque, aOpacity, aMask, aMaskTransform, bounds, aCopyBackground, aOp); + } + } + + PushedLayer layer(GetPermitSubpixelAA()); + mPushedLayers.push_back(layer); + SetPermitSubpixelAA(aOpaque); +} + void DrawTargetTiled::PopLayer() { diff --git a/gfx/2d/DrawTargetTiled.h b/gfx/2d/DrawTargetTiled.h index 9756e9ebb939..15c96e96d1cd 100644 --- a/gfx/2d/DrawTargetTiled.h +++ b/gfx/2d/DrawTargetTiled.h @@ -116,6 +116,12 @@ public: const Matrix& aMaskTransform, const IntRect& aBounds = IntRect(), bool aCopyBackground = false) override; + virtual void PushLayerWithBlend(bool aOpaque, Float aOpacity, + SourceSurface* aMask, + const Matrix& aMaskTransform, + const IntRect& aBounds = IntRect(), + bool aCopyBackground = false, + CompositionOp = CompositionOp::OP_OVER) override; virtual void PopLayer() override;