Closed
Bug 323669
Opened 20 years ago
Closed 20 years ago
Percent attribute values in userSpace gradients don't work
Categories
(Core :: SVG, defect)
Core
SVG
Tracking
()
RESOLVED
FIXED
People
(Reporter: tor, Assigned: tor)
Details
Attachments
(2 files)
394 bytes,
image/svg+xml
|
Details | |
6.39 KB,
patch
|
scootermorris
:
review+
|
Details | Diff | Splinter Review |
The attached example which has a userspace radial gradient without a radius specified (and thus gets the default value of 50%) doesn't draw properly. This is due to CairoRadialGradient getting a value of 0.5 back from GetR() and handing this off to cairo.
Comment 3•20 years ago
|
||
Comment on attachment 208886 [details] [diff] [review]
patch
>Index: nsSVGGradientFrame.cpp
>===================================================================
>RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGGradientFrame.cpp,v
>retrieving revision 1.21
>diff -u -8 -p -r1.21 nsSVGGradientFrame.cpp
>--- nsSVGGradientFrame.cpp 13 Jan 2006 18:20:00 -0000 1.21
>+++ nsSVGGradientFrame.cpp 18 Jan 2006 19:47:11 -0000
>@@ -148,16 +148,17 @@ protected:
> PRBool checkURITarget();
> //
> NS_IMETHOD PrivateGetGradientUnits(nsIDOMSVGAnimatedEnumeration * *aEnum);
> NS_IMETHOD PrivateGetSpreadMethod(nsIDOMSVGAnimatedEnumeration * *aValue);
> //
>
> nsSVGGradientFrame *mNextGrad;
> PRBool mLoopFlag;
>+ nsCOMPtr<nsIContent> mSourceContent;
>
> private:
> // Cached values
> nsCOMPtr<nsIDOMSVGAnimatedEnumeration> mGradientUnits;
> nsCOMPtr<nsIDOMSVGAnimatedEnumeration> mSpreadMethod;
>
> nsAutoString mNextGradStr;
>
>@@ -529,16 +530,20 @@ nsSVGGradientFrame::GetGradientTransform
> float x, y, width, height;
> rect->GetX(&x);
> rect->GetY(&y);
> rect->GetWidth(&width);
> rect->GetHeight(&height);
> NS_NewSVGMatrix(getter_AddRefs(bboxTransform),
> width, 0, 0, height, x, y);
> }
>+ } else {
>+ nsIFrame *frame = nsnull;
>+ CallQueryInterface(aSource, &frame);
>+ mSourceContent = frame->GetContent();
> }
>
> if (!bboxTransform)
> NS_NewSVGMatrix(getter_AddRefs(bboxTransform));
>
> nsCOMPtr<nsIDOMSVGMatrix> gradientTransform;
> // See if we need to get the value from another gradient
> if (!checkURITarget(nsSVGAtoms::gradientTransform)) {
>@@ -860,56 +865,80 @@ NS_IMETHODIMP
> nsSVGLinearGradientFrame::GetX1(float *aX1)
> {
> if (!mX1) {
> PrivateGetX1(getter_AddRefs(mX1));
> if (!mX1)
> return NS_ERROR_FAILURE;
> NS_ADD_SVGVALUE_OBSERVER(mX1);
> }
>- mX1->GetValue(aX1);
Could you comment this here? Something along the lines of
// We handle object bounding box units as part of GetGradientTransform,
// but we need handle user space units as part of the individual get
// routines. Fixes bug 323669
>+ PRUint16 bbox;
>+ GetGradientUnits(&bbox);
>+ if (bbox == nsIDOMSVGGradientElement::SVG_GRUNITS_OBJECTBOUNDINGBOX) {
>+ mX1->GetValue(aX1);
>+ } else {
>+ *aX1 = nsSVGUtils::UserSpace(mSourceContent, mX1, nsSVGUtils::X);
>+ }
> return NS_OK;
> }
>
Comment 4•20 years ago
|
||
Comment on attachment 208886 [details] [diff] [review]
patch
r=scooter with comment
Attachment #208886 -
Flags: review?(scootermorris) → review+
Checked in with comment.
Status: ASSIGNED → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•