mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-07 21:43:24 +00:00
Bug 362233 - merge filter with subregion misbehaves.
Patch by amenzie@us.ibm.com, r=tor, sr=roc
This commit is contained in:
parent
0c22a1838a
commit
88f250bdff
@ -276,6 +276,14 @@ public:
|
||||
return mRect;
|
||||
}
|
||||
|
||||
/*
|
||||
* Releasing a source image will prevent FixupTarget() from copying pixels
|
||||
* outside of the filter sub-region to the target surface.
|
||||
*/
|
||||
void ReleaseSource() {
|
||||
mSourceData = nsnull;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns total length of data buffer in bytes
|
||||
*/
|
||||
@ -417,7 +425,13 @@ nsSVGFilterResource::FixupTarget()
|
||||
// left
|
||||
if (mRect.x > 0) {
|
||||
for (PRInt32 y = mRect.y; y < mRect.y + mRect.height; y++)
|
||||
memcpy(mTargetData + y * mStride, mSourceData + y * mStride, 4 * mRect.x);
|
||||
if (mSourceData) {
|
||||
memcpy(mTargetData + y * mStride,
|
||||
mSourceData + y * mStride,
|
||||
4 * mRect.x);
|
||||
} else {
|
||||
memset(mTargetData + y * mStride, 0, 4 * mRect.x);
|
||||
}
|
||||
}
|
||||
|
||||
// right
|
||||
@ -1568,6 +1582,7 @@ nsSVGFEMergeElement::Filter(nsSVGFilterInstance *instance)
|
||||
cairo_set_source_surface(cr, sourceSurface, 0, 0);
|
||||
cairo_paint(cr);
|
||||
}
|
||||
fr.ReleaseSource();
|
||||
cairo_destroy(cr);
|
||||
return NS_OK;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user