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
|
#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 {
|
class nsDisplayBullet : public nsDisplayItem {
|
||||||
public:
|
public:
|
||||||
nsDisplayBullet(nsDisplayListBuilder* aBuilder, nsBulletFrame* aFrame) :
|
nsDisplayBullet(nsDisplayListBuilder* aBuilder, nsBulletFrame* aFrame) :
|
||||||
@@ -200,6 +213,27 @@ public:
|
|||||||
bool snap;
|
bool snap;
|
||||||
return GetBounds(aBuilder, &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,
|
void nsDisplayBullet::Paint(nsDisplayListBuilder* aBuilder,
|
||||||
|
|||||||
@@ -99,6 +99,8 @@ public:
|
|||||||
}
|
}
|
||||||
void SetFontSizeInflation(float aInflation);
|
void SetFontSizeInflation(float aInflation);
|
||||||
|
|
||||||
|
int32_t GetOrdinal() { return mOrdinal; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
nsresult OnStartContainer(imgIRequest *aRequest, imgIContainer *aImage);
|
nsresult OnStartContainer(imgIRequest *aRequest, imgIContainer *aImage);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user