Bug 822141 - Invalidate bullet display items when their value changes. r=roc
This commit is contained in:
@@ -170,6 +170,19 @@ nsBulletFrame::DidSetStyleContext(nsStyleContext* aOldStyleContext)
|
||||
#endif
|
||||
}
|
||||
|
||||
class nsDisplayBulletGeometry : public nsDisplayItemGenericGeometry
|
||||
{
|
||||
public:
|
||||
nsDisplayBulletGeometry(nsDisplayItem* aItem, nsDisplayListBuilder* aBuilder)
|
||||
: nsDisplayItemGenericGeometry(aItem, aBuilder)
|
||||
{
|
||||
nsBulletFrame* f = static_cast<nsBulletFrame*>(aItem->GetUnderlyingFrame());
|
||||
mOrdinal = f->GetOrdinal();
|
||||
}
|
||||
|
||||
int32_t mOrdinal;
|
||||
};
|
||||
|
||||
class nsDisplayBullet : public nsDisplayItem {
|
||||
public:
|
||||
nsDisplayBullet(nsDisplayListBuilder* aBuilder, nsBulletFrame* aFrame) :
|
||||
@@ -200,6 +213,27 @@ public:
|
||||
bool snap;
|
||||
return GetBounds(aBuilder, &snap);
|
||||
}
|
||||
|
||||
virtual nsDisplayItemGeometry* AllocateGeometry(nsDisplayListBuilder* aBuilder)
|
||||
{
|
||||
return new nsDisplayBulletGeometry(this, aBuilder);
|
||||
}
|
||||
|
||||
virtual void ComputeInvalidationRegion(nsDisplayListBuilder* aBuilder,
|
||||
const nsDisplayItemGeometry* aGeometry,
|
||||
nsRegion *aInvalidRegion)
|
||||
{
|
||||
const nsDisplayBulletGeometry* geometry = static_cast<const nsDisplayBulletGeometry*>(aGeometry);
|
||||
nsBulletFrame* f = static_cast<nsBulletFrame*>(mFrame);
|
||||
|
||||
if (f->GetOrdinal() != geometry->mOrdinal) {
|
||||
bool snap;
|
||||
aInvalidRegion->Or(geometry->mBounds, GetBounds(aBuilder, &snap));
|
||||
return;
|
||||
}
|
||||
|
||||
return nsDisplayItem::ComputeInvalidationRegion(aBuilder, aGeometry, aInvalidRegion);
|
||||
}
|
||||
};
|
||||
|
||||
void nsDisplayBullet::Paint(nsDisplayListBuilder* aBuilder,
|
||||
|
||||
Reference in New Issue
Block a user