Bug 1310575 - Part 1. Have a new base class for nsDisplayMaskGeometry and nsDisplayFilterGeometry. r=mstange

Use nsDisplayMaskGeometry, created by nsDisplayMask, in nsDisplaySVGEffects,
which is the parent class of nsDisplayMask) is odd.
So create a base class for both nsDisplayMaskGeometry and
nsDisplayFilterGeometry. Use this base class in nsDisplaySVGEffects's code.

MozReview-Commit-ID: G3FLybT1pQp

--HG--
extra : rebase_source : c8d2f5f122a9888adaba7d309f95cea6b957ee3e
This commit is contained in:
cku 2016-10-26 15:55:32 +08:00
Родитель 2cd6e3dddb
Коммит 5c0dd57b39
3 изменённых файлов: 35 добавлений и 38 удалений

Просмотреть файл

@ -6798,8 +6798,8 @@ nsDisplaySVGEffects::ComputeInvalidationRegion(nsDisplayListBuilder* aBuilder,
const nsDisplayItemGeometry* aGeometry,
nsRegion* aInvalidRegion)
{
const nsDisplayMaskGeometry* geometry =
static_cast<const nsDisplayMaskGeometry*>(aGeometry);
const nsDisplaySVGEffectGeometry* geometry =
static_cast<const nsDisplaySVGEffectGeometry*>(aGeometry);
bool snap;
nsRect bounds = GetBounds(aBuilder, &snap);
if (geometry->mFrameOffsetToReferenceFrame != ToReferenceFrame() ||

Просмотреть файл

@ -113,37 +113,31 @@ nsDisplaySolidColorRegionGeometry::MoveBy(const nsPoint& aOffset)
mRegion.MoveBy(aOffset);
}
nsDisplayMaskGeometry::nsDisplayMaskGeometry(nsDisplayMask* aItem, nsDisplayListBuilder* aBuilder)
nsDisplaySVGEffectGeometry::nsDisplaySVGEffectGeometry(nsDisplaySVGEffects* aItem, nsDisplayListBuilder* aBuilder)
: nsDisplayItemGeometry(aItem, aBuilder)
, nsImageGeometryMixin(aItem, aBuilder)
, mBBox(aItem->BBoxInUserSpace())
, mUserSpaceOffset(aItem->UserSpaceOffset())
, mFrameOffsetToReferenceFrame(aItem->ToReferenceFrame())
{}
void
nsDisplaySVGEffectGeometry::MoveBy(const nsPoint& aOffset)
{
mBounds.MoveBy(aOffset);
mFrameOffsetToReferenceFrame += aOffset;
}
nsDisplayMaskGeometry::nsDisplayMaskGeometry(nsDisplayMask* aItem, nsDisplayListBuilder* aBuilder)
: nsDisplaySVGEffectGeometry(aItem, aBuilder)
, nsImageGeometryMixin(aItem, aBuilder)
, mDestRects(aItem->GetDestRects())
{}
void
nsDisplayMaskGeometry::MoveBy(const nsPoint& aOffset)
{
mBounds.MoveBy(aOffset);
mFrameOffsetToReferenceFrame += aOffset;
}
nsDisplayFilterGeometry::nsDisplayFilterGeometry(nsDisplayFilter* aItem, nsDisplayListBuilder* aBuilder)
: nsDisplayItemGeometry(aItem, aBuilder)
: nsDisplaySVGEffectGeometry(aItem, aBuilder)
, nsImageGeometryMixin(aItem, aBuilder)
, mBBox(aItem->BBoxInUserSpace())
, mUserSpaceOffset(aItem->UserSpaceOffset())
, mFrameOffsetToReferenceFrame(aItem->ToReferenceFrame())
{}
void
nsDisplayFilterGeometry::MoveBy(const nsPoint& aOffset)
{
mBounds.MoveBy(aOffset);
mFrameOffsetToReferenceFrame += aOffset;
}
nsCharClipGeometry::nsCharClipGeometry(nsCharClipDisplayItem* aItem, nsDisplayListBuilder* aBuilder)
: nsDisplayItemGenericGeometry(aItem, aBuilder)
, mVisIStartEdge(aItem->mVisIStartEdge)

Просмотреть файл

@ -19,6 +19,7 @@ class nsDisplayItem;
class nsDisplayListBuilder;
class nsDisplayTableItem;
class nsDisplayThemedBackground;
class nsDisplaySVGEffects;
class nsDisplayMask;
class nsDisplayFilter;
@ -266,39 +267,41 @@ public:
mozilla::gfx::Color mColor;
};
class nsDisplayMaskGeometry : public nsDisplayItemGeometry
class nsDisplaySVGEffectGeometry : public nsDisplayItemGeometry
{
public:
nsDisplaySVGEffectGeometry(nsDisplaySVGEffects* aItem,
nsDisplayListBuilder* aBuilder);
virtual void MoveBy(const nsPoint& aOffset) override;
gfxRect mBBox;
gfxPoint mUserSpaceOffset;
nsPoint mFrameOffsetToReferenceFrame;
};
class nsDisplayMaskGeometry : public nsDisplaySVGEffectGeometry
, public nsImageGeometryMixin<nsDisplayMaskGeometry>
{
public:
nsDisplayMaskGeometry(nsDisplayMask* aItem, nsDisplayListBuilder* aBuilder);
virtual void MoveBy(const nsPoint& aOffset) override;
gfxRect mBBox;
gfxPoint mUserSpaceOffset;
nsPoint mFrameOffsetToReferenceFrame;
nsTArray<nsRect> mDestRects;
};
class nsDisplayFilterGeometry : public nsDisplayItemGeometry
, public nsImageGeometryMixin<nsDisplayMaskGeometry>
class nsDisplayFilterGeometry : public nsDisplaySVGEffectGeometry
, public nsImageGeometryMixin<nsDisplayFilterGeometry>
{
public:
nsDisplayFilterGeometry(nsDisplayFilter* aItem,
nsDisplayListBuilder* aBuilder);
virtual void MoveBy(const nsPoint& aOffset) override;
gfxRect mBBox;
gfxPoint mUserSpaceOffset;
nsPoint mFrameOffsetToReferenceFrame;
};
class nsCharClipGeometry : public nsDisplayItemGenericGeometry
{
public:
nsCharClipGeometry(nsCharClipDisplayItem* aItem, nsDisplayListBuilder* aBuilder);
nsCharClipGeometry(nsCharClipDisplayItem* aItem,
nsDisplayListBuilder* aBuilder);
nscoord mVisIStartEdge;
nscoord mVisIEndEdge;