Bug 1234485 - Part 9. Implement MaskLayerUserData::constructor & operator=.
Move MaskLayerUserData member data setup code into assign operator to reduce
codes in CreateMaskLayer.
MozReview-Commit-ID: FKsM3OfWhvS
--- a/layout/base/FrameLayerBuilder.cpp
+++ b/layout/base/FrameLayerBuilder.cpp
@@ -1513,16 +1513,36 @@ public:
*/
struct MaskLayerUserData : public LayerUserData
{
MaskLayerUserData()
: mScaleX(-1.0f)
, mScaleY(-1.0f)
, mAppUnitsPerDevPixel(-1)
{ }
+ MaskLayerUserData(const DisplayItemClip& aClip,
+ uint32_t aRoundedRectClipCount,
+ int32_t aAppUnitsPerDevPixel,
+ const ContainerLayerParameters& aParams)
+ : mScaleX(aParams.mXScale)
+ , mScaleY(aParams.mYScale)
+ , mOffset(aParams.mOffset)
+ , mAppUnitsPerDevPixel(aAppUnitsPerDevPixel)
+ {
+ aClip.AppendRoundedRects(&mRoundedClipRects, aRoundedRectClipCount);
+ }
+
+ void operator=(MaskLayerUserData&& aOther)
+ {
+ mScaleX = aOther.mScaleX;
+ mScaleY = aOther.mScaleY;
+ mOffset = aOther.mOffset;
+ mAppUnitsPerDevPixel = aOther.mAppUnitsPerDevPixel;
+ mRoundedClipRects.SwapElements(aOther.mRoundedClipRects);
+ }
bool
operator== (const MaskLayerUserData& aOther) const
{
return mRoundedClipRects == aOther.mRoundedClipRects &&
mScaleX == aOther.mScaleX &&
mScaleY == aOther.mScaleY &&
mOffset == aOther.mOffset &&
@@ -6226,23 +6246,18 @@ ContainerState::CreateMaskLayer(Layer *a
[](Layer* aMaskLayer)
{
aMaskLayer->SetUserData(&gMaskLayerUserData,
new MaskLayerUserData());
}
);
MaskLayerUserData* userData = GetMaskLayerUserData(maskLayer);
- MaskLayerUserData newData;
- aClip.AppendRoundedRects(&newData.mRoundedClipRects, aRoundedRectClipCount);
- newData.mScaleX = mParameters.mXScale;
- newData.mScaleY = mParameters.mYScale;
- newData.mOffset = mParameters.mOffset;
- newData.mAppUnitsPerDevPixel = mContainerFrame->PresContext()->AppUnitsPerDevPixel();
-
+ int32_t A2D = mContainerFrame->PresContext()->AppUnitsPerDevPixel();
+ MaskLayerUserData newData(aClip, aRoundedRectClipCount, A2D, mParameters);
if (*userData == newData) {
return maskLayer.forget();
}
// calculate a more precise bounding rect
gfx::Rect boundingRect = CalculateBounds(newData.mRoundedClipRects,
newData.mAppUnitsPerDevPixel);
boundingRect.Scale(mParameters.mXScale, mParameters.mYScale);
@@ -6328,19 +6343,15 @@ ContainerState::CreateMaskLayer(Layer *a
maskLayer->SetContainer(container);
maskTransform.Invert();
Matrix4x4 matrix = Matrix4x4::From2D(maskTransform);
matrix.PreTranslate(mParameters.mOffset.x, mParameters.mOffset.y, 0);
maskLayer->SetBaseTransform(matrix);
// save the details of the clip in user data
- userData->mScaleX = newData.mScaleX;
- userData->mScaleY = newData.mScaleY;
- userData->mOffset = newData.mOffset;
- userData->mAppUnitsPerDevPixel = newData.mAppUnitsPerDevPixel;
- userData->mRoundedClipRects.SwapElements(newData.mRoundedClipRects);
+ *userData = Move(newData);
userData->mImageKey.Reset(lookupKey);
return maskLayer.forget();
}
} // namespace mozilla