Bug 1240275 - Support SVG 2 radialGradient fr attribute. r=cam r=peterv (see comment 16)

This commit is contained in:
Robert Longson 2017-05-22 07:28:30 +01:00
Родитель 65ea740eda
Коммит a1d45be365
10 изменённых файлов: 97 добавлений и 13 удалений

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

@ -1493,6 +1493,7 @@ GK_ATOM(font_style, "font-style")
GK_ATOM(font_variant, "font-variant")
GK_ATOM(foreignObject, "foreignObject")
GK_ATOM(fractalNoise, "fractalNoise")
GK_ATOM(fr, "fr")
GK_ATOM(fx, "fx")
GK_ATOM(fy, "fy")
GK_ATOM(G, "G")

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

@ -198,13 +198,14 @@ SVGRadialGradientElement::WrapNode(JSContext* aCx, JS::Handle<JSObject*> aGivenP
return SVGRadialGradientElementBinding::Wrap(aCx, this, aGivenProto);
}
nsSVGElement::LengthInfo SVGRadialGradientElement::sLengthInfo[5] =
nsSVGElement::LengthInfo SVGRadialGradientElement::sLengthInfo[6] =
{
{ &nsGkAtoms::cx, 50, nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE, SVGContentUtils::X },
{ &nsGkAtoms::cy, 50, nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE, SVGContentUtils::Y },
{ &nsGkAtoms::r, 50, nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE, SVGContentUtils::XY },
{ &nsGkAtoms::fx, 50, nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE, SVGContentUtils::X },
{ &nsGkAtoms::fy, 50, nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE, SVGContentUtils::Y },
{ &nsGkAtoms::fr, 0, nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE, SVGContentUtils::XY },
};
//----------------------------------------------------------------------
@ -252,6 +253,12 @@ SVGRadialGradientElement::Fy()
return mLengthAttributes[ATTR_FY].ToDOMAnimatedLength(this);
}
already_AddRefed<SVGAnimatedLength>
SVGRadialGradientElement::Fr()
{
return mLengthAttributes[ATTR_FR].ToDOMAnimatedLength(this);
}
//----------------------------------------------------------------------
// nsSVGElement methods

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

@ -142,13 +142,14 @@ public:
already_AddRefed<SVGAnimatedLength> R();
already_AddRefed<SVGAnimatedLength> Fx();
already_AddRefed<SVGAnimatedLength> Fy();
already_AddRefed<SVGAnimatedLength> Fr();
protected:
virtual LengthAttributesInfo GetLengthInfo() override;
enum { ATTR_CX, ATTR_CY, ATTR_R, ATTR_FX, ATTR_FY };
nsSVGLength2 mLengthAttributes[5];
static LengthInfo sLengthInfo[5];
enum { ATTR_CX, ATTR_CY, ATTR_R, ATTR_FX, ATTR_FY, ATTR_FR };
nsSVGLength2 mLengthAttributes[6];
static LengthInfo sLengthInfo[6];
};
} // namespace dom

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

@ -21,5 +21,7 @@ interface SVGRadialGradientElement : SVGGradientElement {
readonly attribute SVGAnimatedLength fx;
[Constant]
readonly attribute SVGAnimatedLength fy;
// readonly attribute SVGAnimatedLength fr;
// XXX: Bug 1242048
// [SameObject]
readonly attribute SVGAnimatedLength fr;
};

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

@ -0,0 +1,27 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Test gradient fr attribute</title>
<defs>
<radialGradient id="grad1" fr="100%">
<stop offset="0%" stop-color="red" />
<stop offset="100%" stop-color="lime" />
</radialGradient>
<radialGradient id="grad2" xlink:href="#grad1"/>
<style>
circle {
stroke-width: 3px;
stroke: lime;
}
</style>
</defs>
<rect width="100%" height="100%" fill="lime"/>
<circle cx="100" cy="100" r="50" fill="url(#grad1)" />
<circle cx="300" cy="100" r="50" fill="url(#grad2)" />
</svg>

После

Ширина:  |  Высота:  |  Размер: 748 B

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

@ -0,0 +1,25 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Test gradient fr attribute</title>
<defs>
<radialGradient id="grad1">
<stop offset="0%" stop-color="red" />
<stop offset="20%" stop-color="red" />
<stop offset="100%" stop-color="lime" />
</radialGradient>
<style>
circle {
stroke-width: 2px;
}
</style>
</defs>
<rect width="100%" height="100%" fill="lime"/>
<circle cx="100" cy="100" r="50" fill="url(#grad1)" />
<circle cx="100" cy="100" r="50" fill="none" stroke="lime" />
</svg>

После

Ширина:  |  Высота:  |  Размер: 714 B

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

@ -0,0 +1,24 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Test gradient fr attribute</title>
<defs>
<radialGradient id="grad1" fr="10%">
<stop offset="0%" stop-color="red" />
<stop offset="100%" stop-color="lime" />
</radialGradient>
<style>
circle {
stroke-width: 2px;
}
</style>
</defs>
<rect width="100%" height="100%" fill="lime"/>
<circle cx="100" cy="100" r="50" fill="url(#grad1)" />
<circle cx="100" cy="100" r="50" fill="none" stroke="lime" />
</svg>

После

Ширина:  |  Высота:  |  Размер: 678 B

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

@ -375,6 +375,8 @@ fuzzy-if(skiaContent,3,5) == pattern-scale-01c.svg pattern-scale-01-ref.svg
== radialGradient-basic-02.svg pass.svg
fuzzy-if(cocoaWidget,4,15982) fuzzy-if(winWidget,4,92) fuzzy-if(skiaContent,4,60) == radialGradient-basic-03.svg radialGradient-basic-03-ref.svg
== radialGradient-basic-04.svg pass.svg
== radialGradient-fr-01.svg pass.svg
fuzzy(1,3235) == radialGradient-fr-02.svg radialGradient-fr-02-ref.svg
fuzzy-if(skiaContent,1,3600) == rect-01.svg pass.svg
== rect-02.svg pass.svg

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

@ -621,7 +621,7 @@ nsSVGRadialGradientFrame::GradientVectorLengthIsZero()
already_AddRefed<gfxPattern>
nsSVGRadialGradientFrame::CreateGradient()
{
float cx, cy, r, fx, fy;
float cx, cy, r, fx, fy, fr;
cx = GetLengthValue(dom::SVGRadialGradientElement::ATTR_CX);
cy = GetLengthValue(dom::SVGRadialGradientElement::ATTR_CY);
@ -629,6 +629,7 @@ nsSVGRadialGradientFrame::CreateGradient()
// If fx or fy are not set, use cx/cy instead
fx = GetLengthValue(dom::SVGRadialGradientElement::ATTR_FX, cx);
fy = GetLengthValue(dom::SVGRadialGradientElement::ATTR_FY, cy);
fr = GetLengthValue(dom::SVGRadialGradientElement::ATTR_FR);
if (fx != cx || fy != cy) {
// The focal point (fFx and fFy) must be clamped to be *inside* - not on -
@ -649,7 +650,7 @@ nsSVGRadialGradientFrame::CreateGradient()
}
}
RefPtr<gfxPattern> pattern = new gfxPattern(fx, fy, 0, cx, cy, r);
RefPtr<gfxPattern> pattern = new gfxPattern(fx, fy, fr, cx, cy, r);
return pattern.forget();
}

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

@ -795,12 +795,6 @@
[SVGElement interface: linearGradient must inherit property "onsort" with the proper type (62)]
expected: FAIL
[SVGRadialGradientElement interface: attribute fr]
expected: FAIL
[SVGRadialGradientElement interface: radialGradient must inherit property "fr" with the proper type (5)]
expected: FAIL
[SVGElement interface: radialGradient must inherit property "onautocomplete" with the proper type (8)]
expected: FAIL