mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 990907 - Have DLBI pick up changes in the char-clip on text frames. r=mstange,mattwoodrow
This commit is contained in:
parent
f7637d9c23
commit
d4629d57fe
@ -5949,6 +5949,30 @@ nsDisplayTransform::WriteDebugInfo(std::stringstream& aStream)
|
||||
AppendToString(aStream, GetTransform());
|
||||
}
|
||||
|
||||
nsDisplayItemGeometry*
|
||||
nsCharClipDisplayItem::AllocateGeometry(nsDisplayListBuilder* aBuilder)
|
||||
{
|
||||
return new nsCharClipGeometry(this, aBuilder);
|
||||
}
|
||||
|
||||
void
|
||||
nsCharClipDisplayItem::ComputeInvalidationRegion(nsDisplayListBuilder* aBuilder,
|
||||
const nsDisplayItemGeometry* aGeometry,
|
||||
nsRegion* aInvalidRegion)
|
||||
{
|
||||
const nsCharClipGeometry* geometry = static_cast<const nsCharClipGeometry*>(aGeometry);
|
||||
|
||||
bool snap;
|
||||
nsRect newRect = geometry->mBounds;
|
||||
nsRect oldRect = GetBounds(aBuilder, &snap);
|
||||
if (mLeftEdge != geometry->mLeftEdge ||
|
||||
mRightEdge != geometry->mRightEdge ||
|
||||
!oldRect.IsEqualInterior(newRect) ||
|
||||
!geometry->mBorderRect.IsEqualInterior(GetBorderRect())) {
|
||||
aInvalidRegion->Or(oldRect, newRect);
|
||||
}
|
||||
}
|
||||
|
||||
nsDisplaySVGEffects::nsDisplaySVGEffects(nsDisplayListBuilder* aBuilder,
|
||||
nsIFrame* aFrame, nsDisplayList* aList)
|
||||
: nsDisplayWrapList(aBuilder, aFrame, aList),
|
||||
|
@ -3687,6 +3687,12 @@ public:
|
||||
explicit nsCharClipDisplayItem(nsIFrame* aFrame)
|
||||
: nsDisplayItem(aFrame) {}
|
||||
|
||||
virtual nsDisplayItemGeometry* AllocateGeometry(nsDisplayListBuilder* aBuilder) MOZ_OVERRIDE;
|
||||
|
||||
virtual void ComputeInvalidationRegion(nsDisplayListBuilder* aBuilder,
|
||||
const nsDisplayItemGeometry* aGeometry,
|
||||
nsRegion* aInvalidRegion) MOZ_OVERRIDE;
|
||||
|
||||
struct ClipEdges {
|
||||
ClipEdges(const nsDisplayItem& aItem,
|
||||
nscoord aLeftEdge, nscoord aRightEdge) {
|
||||
|
@ -115,3 +115,9 @@ nsDisplaySVGEffectsGeometry::MoveBy(const nsPoint& aOffset)
|
||||
mBounds.MoveBy(aOffset);
|
||||
mFrameOffsetToReferenceFrame += aOffset;
|
||||
}
|
||||
|
||||
nsCharClipGeometry::nsCharClipGeometry(nsCharClipDisplayItem* aItem, nsDisplayListBuilder* aBuilder)
|
||||
: nsDisplayItemGenericGeometry(aItem, aBuilder)
|
||||
, mLeftEdge(aItem->mLeftEdge)
|
||||
, mRightEdge(aItem->mRightEdge)
|
||||
{}
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "nsColor.h"
|
||||
#include "gfxRect.h"
|
||||
|
||||
class nsCharClipDisplayItem;
|
||||
class nsDisplayItem;
|
||||
class nsDisplayListBuilder;
|
||||
class nsDisplayBackgroundImage;
|
||||
@ -247,4 +248,13 @@ public:
|
||||
nsPoint mFrameOffsetToReferenceFrame;
|
||||
};
|
||||
|
||||
class nsCharClipGeometry : public nsDisplayItemGenericGeometry
|
||||
{
|
||||
public:
|
||||
nsCharClipGeometry(nsCharClipDisplayItem* aItem, nsDisplayListBuilder* aBuilder);
|
||||
|
||||
nscoord mLeftEdge;
|
||||
nscoord mRightEdge;
|
||||
};
|
||||
|
||||
#endif /*NSDISPLAYLISTINVALIDATION_H_*/
|
||||
|
@ -4554,11 +4554,11 @@ nsTextFrame::DidSetStyleContext(nsStyleContext* aOldStyleContext)
|
||||
nsFrame::DidSetStyleContext(aOldStyleContext);
|
||||
}
|
||||
|
||||
class nsDisplayTextGeometry : public nsDisplayItemGenericGeometry
|
||||
class nsDisplayTextGeometry : public nsCharClipGeometry
|
||||
{
|
||||
public:
|
||||
nsDisplayTextGeometry(nsDisplayItem* aItem, nsDisplayListBuilder* aBuilder)
|
||||
: nsDisplayItemGenericGeometry(aItem, aBuilder)
|
||||
nsDisplayTextGeometry(nsCharClipDisplayItem* aItem, nsDisplayListBuilder* aBuilder)
|
||||
: nsCharClipGeometry(aItem, aBuilder)
|
||||
{
|
||||
nsTextFrame* f = static_cast<nsTextFrame*>(aItem->Frame());
|
||||
f->GetTextDecorations(f->PresContext(), nsTextFrame::eResolvedColors, mDecorations);
|
||||
@ -4629,6 +4629,8 @@ public:
|
||||
nsRect newRect = geometry->mBounds;
|
||||
nsRect oldRect = GetBounds(aBuilder, &snap);
|
||||
if (decorations != geometry->mDecorations ||
|
||||
mLeftEdge != geometry->mLeftEdge ||
|
||||
mRightEdge != geometry->mRightEdge ||
|
||||
!oldRect.IsEqualInterior(newRect) ||
|
||||
!geometry->mBorderRect.IsEqualInterior(GetBorderRect())) {
|
||||
aInvalidRegion->Or(oldRect, newRect);
|
||||
|
Loading…
Reference in New Issue
Block a user