Bug 614732 - Temporary patch to add an mCoveredRegion to SVG leaf frames to cache their covered regions, since we can't reliably compute their pre-change covered regions for invalidation from the user space bounds now in their mRects (see bug 614732 comment 32 solution #1). r=roc.

This commit is contained in:
Jonathan Watt 2012-02-10 12:33:49 +00:00
Родитель 1d73cae00d
Коммит 7e602bb427
6 изменённых файлов: 27 добавлений и 3 удалений

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

@ -348,7 +348,9 @@ nsSVGForeignObjectFrame::GetFrameForPoint(const nsPoint &aPoint)
NS_IMETHODIMP_(nsRect)
nsSVGForeignObjectFrame::GetCoveredRegion()
{
return nsSVGUtils::TransformFrameRectToOuterSVG(mRect, GetCanvasTM(), PresContext());
// See bug 614732 comment 32:
//return nsSVGUtils::TransformFrameRectToOuterSVG(mRect, GetCanvasTM(), PresContext());
return mCoveredRegion;
}
NS_IMETHODIMP
@ -369,6 +371,7 @@ nsSVGForeignObjectFrame::UpdateCoveredRegion()
mRect = nsLayoutUtils::RoundGfxRectToAppRect(
gfxRect(0.0, 0.0, w, h),
PresContext()->AppUnitsPerDevPixel());
mCoveredRegion = ToCanvasBounds(gfxRect(0.0, 0.0, w, h), GetCanvasTM(), PresContext());
return NS_OK;
}

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

@ -166,6 +166,8 @@ protected:
// Areas dirtied by changes to sub-documents embedded by our decendents
nsRegion mSubDocDirtyRegion;
nsRect mCoveredRegion;
bool mInReflow;
};

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

@ -124,6 +124,8 @@ protected:
*/
float MaybeOptimizeOpacity(float aFillOrStrokeOpacity);
nsRect mCoveredRegion;
private:
bool GetStrokeDashData(FallibleTArray<gfxFloat>& dashes, gfxFloat *dashOffset);
};

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

@ -440,7 +440,9 @@ nsSVGGlyphFrame::GetFrameForPoint(const nsPoint &aPoint)
NS_IMETHODIMP_(nsRect)
nsSVGGlyphFrame::GetCoveredRegion()
{
return nsSVGUtils::TransformFrameRectToOuterSVG(mRect, GetCanvasTM(), PresContext());
// See bug 614732 comment 32:
//return nsSVGUtils::TransformFrameRectToOuterSVG(mRect, GetCanvasTM(), PresContext());
return mCoveredRegion;
}
NS_IMETHODIMP
@ -492,6 +494,10 @@ nsSVGGlyphFrame::UpdateCoveredRegion()
PresContext()->AppUnitsPerDevPixel());
}
// See bug 614732 comment 32.
mCoveredRegion = nsSVGUtils::TransformFrameRectToOuterSVG(
mRect, GetCanvasTM(), PresContext());
return NS_OK;
}

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

@ -495,6 +495,10 @@ nsSVGImageFrame::UpdateCoveredRegion()
PresContext()->AppUnitsPerDevPixel());
}
// See bug 614732 comment 32.
mCoveredRegion = nsSVGUtils::TransformFrameRectToOuterSVG(
mRect, GetCanvasTM(), PresContext());
return NS_OK;
}

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

@ -204,7 +204,9 @@ nsSVGPathGeometryFrame::GetFrameForPoint(const nsPoint &aPoint)
NS_IMETHODIMP_(nsRect)
nsSVGPathGeometryFrame::GetCoveredRegion()
{
return nsSVGUtils::TransformFrameRectToOuterSVG(mRect, GetCanvasTM(), PresContext());
// See bug 614732 comment 32:
//return nsSVGUtils::TransformFrameRectToOuterSVG(mRect, GetCanvasTM(), PresContext());
return mCoveredRegion;
}
NS_IMETHODIMP
@ -216,6 +218,11 @@ nsSVGPathGeometryFrame::UpdateCoveredRegion()
nsSVGUtils::eBBoxIncludeMarkers);
mRect = nsLayoutUtils::RoundGfxRectToAppRect(extent,
PresContext()->AppUnitsPerDevPixel());
// See bug 614732 comment 32.
mCoveredRegion = nsSVGUtils::TransformFrameRectToOuterSVG(
mRect, GetCanvasTM(), PresContext());
return NS_OK;
}