зеркало из https://github.com/mozilla/gecko-dev.git
Bug 390193 - incorrect gradient transform inside filter. r=longsonr, sr=roc, a=vlad
This commit is contained in:
Родитель
3c1ab9901d
Коммит
2521c277ce
|
@ -51,7 +51,8 @@ class nsSVGRenderState;
|
|||
struct nsRect;
|
||||
|
||||
#define NS_ISVGCHILDFRAME_IID \
|
||||
{ 0x154fa60f, 0xc605, 0x49c7, { 0x88, 0xc4, 0xc5, 0xb4, 0xdc, 0x12, 0x47, 0xeb } }
|
||||
{ 0x93560e72, 0x6818, 0x4218, \
|
||||
{ 0xa1, 0xe9, 0xf3, 0xb9, 0x63, 0x6a, 0xff, 0xc2 } }
|
||||
|
||||
class nsISVGChildFrame : public nsISupports {
|
||||
public:
|
||||
|
@ -85,9 +86,10 @@ public:
|
|||
NS_IMETHOD SetMatrixPropagation(PRBool aPropagate)=0;
|
||||
|
||||
// Set the current transformation matrix to a particular matrix.
|
||||
// Value is only used if matrix propogation is prevented
|
||||
// Value is only used if matrix propagation is prevented
|
||||
// (SetMatrixPropagation()). nsnull aCTM means identity transform.
|
||||
NS_IMETHOD SetOverrideCTM(nsIDOMSVGMatrix *aCTM)=0;
|
||||
virtual already_AddRefed<nsIDOMSVGMatrix> GetOverrideCTM()=0;
|
||||
|
||||
// XXX move this function into interface nsISVGLocatableMetrics
|
||||
NS_IMETHOD GetBBox(nsIDOMSVGRect **_retval)=0; // bbox in local coords
|
||||
|
|
|
@ -111,6 +111,7 @@ public:
|
|||
NS_IMETHOD NotifyRedrawUnsuspended();
|
||||
NS_IMETHOD SetMatrixPropagation(PRBool aPropagate) { return NS_ERROR_FAILURE; }
|
||||
NS_IMETHOD SetOverrideCTM(nsIDOMSVGMatrix *aCTM) { return NS_ERROR_FAILURE; }
|
||||
virtual already_AddRefed<nsIDOMSVGMatrix> GetOverrideCTM() { return nsnull; }
|
||||
NS_IMETHOD GetBBox(nsIDOMSVGRect **_retval);
|
||||
NS_IMETHOD_(PRBool) IsDisplayContainer() { return PR_TRUE; }
|
||||
NS_IMETHOD_(PRBool) HasValidCoveredRect() { return PR_FALSE; }
|
||||
|
|
|
@ -425,6 +425,14 @@ nsSVGForeignObjectFrame::SetOverrideCTM(nsIDOMSVGMatrix *aCTM)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGMatrix>
|
||||
nsSVGForeignObjectFrame::GetOverrideCTM()
|
||||
{
|
||||
nsIDOMSVGMatrix *matrix = mOverrideCTM.get();
|
||||
NS_IF_ADDREF(matrix);
|
||||
return matrix;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSVGForeignObjectFrame::GetBBox(nsIDOMSVGRect **_retval)
|
||||
{
|
||||
|
|
|
@ -121,6 +121,7 @@ public:
|
|||
NS_IMETHOD NotifyRedrawUnsuspended();
|
||||
NS_IMETHOD SetMatrixPropagation(PRBool aPropagate);
|
||||
NS_IMETHOD SetOverrideCTM(nsIDOMSVGMatrix *aCTM);
|
||||
virtual already_AddRefed<nsIDOMSVGMatrix> GetOverrideCTM();
|
||||
NS_IMETHOD GetBBox(nsIDOMSVGRect **_retval);
|
||||
NS_IMETHOD_(PRBool) IsDisplayContainer() { return PR_TRUE; }
|
||||
NS_IMETHOD_(PRBool) HasValidCoveredRect() { return PR_FALSE; }
|
||||
|
|
|
@ -92,6 +92,14 @@ nsSVGGFrame::SetOverrideCTM(nsIDOMSVGMatrix *aCTM)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGMatrix>
|
||||
nsSVGGFrame::GetOverrideCTM()
|
||||
{
|
||||
nsIDOMSVGMatrix *matrix = mOverrideCTM.get();
|
||||
NS_IF_ADDREF(matrix);
|
||||
return matrix;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGMatrix>
|
||||
nsSVGGFrame::GetCanvasTM()
|
||||
{
|
||||
|
|
|
@ -76,6 +76,7 @@ public:
|
|||
NS_IMETHOD NotifyCanvasTMChanged(PRBool suppressInvalidation);
|
||||
NS_IMETHOD SetMatrixPropagation(PRBool aPropagate);
|
||||
NS_IMETHOD SetOverrideCTM(nsIDOMSVGMatrix *aCTM);
|
||||
virtual already_AddRefed<nsIDOMSVGMatrix> GetOverrideCTM();
|
||||
|
||||
// nsSVGContainerFrame methods:
|
||||
virtual already_AddRefed<nsIDOMSVGMatrix> GetCanvasTM();
|
||||
|
|
|
@ -117,6 +117,7 @@ public:
|
|||
NS_IMETHOD NotifyRedrawUnsuspended();
|
||||
NS_IMETHOD SetMatrixPropagation(PRBool aPropagate) { return NS_OK; }
|
||||
NS_IMETHOD SetOverrideCTM(nsIDOMSVGMatrix *aCTM) { return NS_ERROR_FAILURE; }
|
||||
virtual already_AddRefed<nsIDOMSVGMatrix> GetOverrideCTM() { return nsnull; }
|
||||
NS_IMETHOD GetBBox(nsIDOMSVGRect **_retval);
|
||||
NS_IMETHOD_(PRBool) IsDisplayContainer() { return PR_FALSE; }
|
||||
NS_IMETHOD_(PRBool) HasValidCoveredRect() { return PR_TRUE; }
|
||||
|
|
|
@ -269,10 +269,13 @@ nsSVGGradientFrame::GetGradientTransform(nsSVGGeometryFrame *aSource)
|
|||
}
|
||||
nsCOMPtr<nsIDOMSVGRect> rect;
|
||||
if (frame) {
|
||||
nsCOMPtr<nsIDOMSVGMatrix> matrix = frame->GetOverrideCTM();
|
||||
frame->SetMatrixPropagation(PR_FALSE);
|
||||
frame->SetOverrideCTM(nsnull);
|
||||
frame->NotifyCanvasTMChanged(PR_TRUE);
|
||||
frame->GetBBox(getter_AddRefs(rect));
|
||||
frame->SetMatrixPropagation(PR_TRUE);
|
||||
frame->SetOverrideCTM(matrix);
|
||||
frame->NotifyCanvasTMChanged(PR_TRUE);
|
||||
}
|
||||
if (rect) {
|
||||
|
|
|
@ -90,6 +90,7 @@ public:
|
|||
NS_IMETHOD NotifyCanvasTMChanged(PRBool suppressInvalidation);
|
||||
NS_IMETHOD SetMatrixPropagation(PRBool aPropagate);
|
||||
NS_IMETHOD SetOverrideCTM(nsIDOMSVGMatrix *aCTM);
|
||||
virtual already_AddRefed<nsIDOMSVGMatrix> GetOverrideCTM();
|
||||
NS_IMETHOD GetFrameForPointSVG(float x, float y, nsIFrame** hit);
|
||||
|
||||
// nsSVGContainerFrame methods:
|
||||
|
@ -213,6 +214,14 @@ nsSVGInnerSVGFrame::SetOverrideCTM(nsIDOMSVGMatrix *aCTM)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGMatrix>
|
||||
nsSVGInnerSVGFrame::GetOverrideCTM()
|
||||
{
|
||||
nsIDOMSVGMatrix *matrix = mOverrideCTM.get();
|
||||
NS_IF_ADDREF(matrix);
|
||||
return matrix;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSVGInnerSVGFrame::GetFrameForPointSVG(float x, float y, nsIFrame** hit)
|
||||
{
|
||||
|
|
|
@ -496,6 +496,14 @@ nsSVGPathGeometryFrame::SetOverrideCTM(nsIDOMSVGMatrix *aCTM)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGMatrix>
|
||||
nsSVGPathGeometryFrame::GetOverrideCTM()
|
||||
{
|
||||
nsIDOMSVGMatrix *matrix = mOverrideCTM.get();
|
||||
NS_IF_ADDREF(matrix);
|
||||
return matrix;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSVGPathGeometryFrame::GetBBox(nsIDOMSVGRect **_retval)
|
||||
{
|
||||
|
|
|
@ -113,6 +113,7 @@ protected:
|
|||
NS_IMETHOD NotifyRedrawUnsuspended();
|
||||
NS_IMETHOD SetMatrixPropagation(PRBool aPropagate);
|
||||
NS_IMETHOD SetOverrideCTM(nsIDOMSVGMatrix *aCTM);
|
||||
virtual already_AddRefed<nsIDOMSVGMatrix> GetOverrideCTM();
|
||||
NS_IMETHOD GetBBox(nsIDOMSVGRect **_retval);
|
||||
NS_IMETHOD_(PRBool) IsDisplayContainer() { return PR_FALSE; }
|
||||
NS_IMETHOD_(PRBool) HasValidCoveredRect() { return PR_TRUE; }
|
||||
|
|
|
@ -116,6 +116,14 @@ nsSVGTSpanFrame::SetOverrideCTM(nsIDOMSVGMatrix *aCTM)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGMatrix>
|
||||
nsSVGTSpanFrame::GetOverrideCTM()
|
||||
{
|
||||
nsIDOMSVGMatrix *matrix = mOverrideCTM.get();
|
||||
NS_IF_ADDREF(matrix);
|
||||
return matrix;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// nsSVGContainerFrame methods:
|
||||
|
||||
|
|
|
@ -83,7 +83,8 @@ public:
|
|||
// nsISVGChildFrame interface:
|
||||
NS_IMETHOD SetMatrixPropagation(PRBool aPropagate);
|
||||
NS_IMETHOD SetOverrideCTM(nsIDOMSVGMatrix *aCTM);
|
||||
|
||||
virtual already_AddRefed<nsIDOMSVGMatrix> GetOverrideCTM();
|
||||
|
||||
// nsSVGContainerFrame methods:
|
||||
virtual already_AddRefed<nsIDOMSVGMatrix> GetCanvasTM();
|
||||
|
||||
|
|
|
@ -238,6 +238,14 @@ nsSVGTextFrame::SetOverrideCTM(nsIDOMSVGMatrix *aCTM)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGMatrix>
|
||||
nsSVGTextFrame::GetOverrideCTM()
|
||||
{
|
||||
nsIDOMSVGMatrix *matrix = mOverrideCTM.get();
|
||||
NS_IF_ADDREF(matrix);
|
||||
return matrix;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSVGTextFrame::GetBBox(nsIDOMSVGRect **_retval)
|
||||
{
|
||||
|
|
|
@ -80,6 +80,7 @@ public:
|
|||
// nsISVGChildFrame interface:
|
||||
NS_IMETHOD SetMatrixPropagation(PRBool aPropagate);
|
||||
NS_IMETHOD SetOverrideCTM(nsIDOMSVGMatrix *aCTM);
|
||||
virtual already_AddRefed<nsIDOMSVGMatrix> GetOverrideCTM();
|
||||
NS_IMETHOD NotifyCanvasTMChanged(PRBool suppressInvalidation);
|
||||
NS_IMETHOD NotifyRedrawSuspended();
|
||||
NS_IMETHOD NotifyRedrawUnsuspended();
|
||||
|
|
Загрузка…
Ссылка в новой задаче