mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-30 00:01:50 +00:00
Remove notion of percentage intrinsic size: remove the single case that (incorrectly) sets percentage intrinsic sizes, and fix all of the tests that depend on our old incorrect behavior. (Bug 611099) r=dholbert
Needed to help CSS 2.1 meet Proposed Recommendation entrance criteria.
This commit is contained in:
parent
d69c8fdc7b
commit
2487c4de1e
@ -18,15 +18,15 @@
|
|||||||
// <embed> elements.
|
// <embed> elements.
|
||||||
|
|
||||||
// * FIRST TWO ROWS: <img> has width=auto height=auto
|
// * FIRST TWO ROWS: <img> has width=auto height=auto
|
||||||
// - Each <img> renders w/ width = 10% * body_width = .1*600 = 60px
|
// - Each <img> renders w/ width = 300px (default)
|
||||||
// - Synthesized viewBox has width = 10% * viewport_width = .1*60 = 6
|
// - Synthesized viewBox has width = 10% * viewport_width = .1*300 = 30
|
||||||
// - <img> & viewBox both get height=30px, from <svg> height attr
|
// - <img> & viewBox both get height=30px, from <svg> height attr
|
||||||
svgParams.viewBox = [0, 0, 6, 30],
|
svgParams.viewBox = [0, 0, 30, 30],
|
||||||
appendSVGSubArrayWithParams(svgParams, "embed", "60px", "30px");
|
appendSVGSubArrayWithParams(svgParams, "embed", "300px", "30px");
|
||||||
|
|
||||||
// * SECOND TWO ROWS: <img> has width=auto, height=20px
|
// * SECOND TWO ROWS: <img> has width=auto, height=20px
|
||||||
// Calculations are as above, except <img> now imposes height="20px".
|
// Calculations are as above, except <img> now imposes height="20px".
|
||||||
appendSVGSubArrayWithParams(svgParams, "embed", "60px", "20px");
|
appendSVGSubArrayWithParams(svgParams, "embed", "300px", "20px");
|
||||||
|
|
||||||
// * THIRD TWO ROWS: <img> has width=30px height=auto
|
// * THIRD TWO ROWS: <img> has width=30px height=auto
|
||||||
// - <img> now renders w/ width = 30px (imposed by <img> width attr)
|
// - <img> now renders w/ width = 30px (imposed by <img> width attr)
|
||||||
|
@ -18,11 +18,11 @@
|
|||||||
// <embed> elements.
|
// <embed> elements.
|
||||||
|
|
||||||
// * FIRST TWO ROWS: <img> has width=auto height=auto
|
// * FIRST TWO ROWS: <img> has width=auto height=auto
|
||||||
// - Each <img> renders w/ height = 20% * body_height = .2*600 = 120px
|
// - Each <img> renders w/ height = 150px (default)
|
||||||
// - Synthesized viewBox has height = 20% * viewport_height = .2*120 = 24
|
// - Synthesized viewBox has height = 20% * viewport_height = .2*150 = 30
|
||||||
// - <img> & viewBox both get width=20px, from <svg> width attr
|
// - <img> & viewBox both get width=20px, from <svg> width attr
|
||||||
svgParams.viewBox = [0, 0, 20, 24],
|
svgParams.viewBox = [0, 0, 20, 30],
|
||||||
appendSVGSubArrayWithParams(svgParams, "embed", "20px", "120px");
|
appendSVGSubArrayWithParams(svgParams, "embed", "20px", "150px");
|
||||||
|
|
||||||
// * SECOND TWO ROWS: <img> has width=auto, height=20px
|
// * SECOND TWO ROWS: <img> has width=auto, height=20px
|
||||||
// - <img> now renders w/ height = 20px (imposed by <img> height attr)
|
// - <img> now renders w/ height = 20px (imposed by <img> height attr)
|
||||||
@ -34,8 +34,8 @@
|
|||||||
// * THIRD TWO ROWS: <img> has width=30px height=auto
|
// * THIRD TWO ROWS: <img> has width=30px height=auto
|
||||||
// Calculations are as with "FIRST TWO ROWS", except <img> now imposes
|
// Calculations are as with "FIRST TWO ROWS", except <img> now imposes
|
||||||
// width="30px".
|
// width="30px".
|
||||||
svgParams.viewBox = [0, 0, 20, 24],
|
svgParams.viewBox = [0, 0, 20, 30],
|
||||||
appendSVGSubArrayWithParams(svgParams, "embed", "30px", "120px");
|
appendSVGSubArrayWithParams(svgParams, "embed", "30px", "150px");
|
||||||
|
|
||||||
// * FOURTH TWO ROWS: <img> has width=30px height=20px
|
// * FOURTH TWO ROWS: <img> has width=30px height=20px
|
||||||
// Calculations are as with "SECOND TWO ROWS", except <img> now imposes
|
// Calculations are as with "SECOND TWO ROWS", except <img> now imposes
|
||||||
|
@ -14,6 +14,8 @@ function m() {
|
|||||||
svg.style.position = 'absolute';
|
svg.style.position = 'absolute';
|
||||||
svg.style.left = '0px';
|
svg.style.left = '0px';
|
||||||
svg.style.top = '0px';
|
svg.style.top = '0px';
|
||||||
|
svg.style.width = '100%';
|
||||||
|
svg.style.height = '100%';
|
||||||
document.body.appendChild(svg);
|
document.body.appendChild(svg);
|
||||||
|
|
||||||
var rect = document.createElementNS(SVG_NS, "rect");
|
var rect = document.createElementNS(SVG_NS, "rect");
|
||||||
|
@ -22,7 +22,7 @@ html, body, div {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%; /* inline style override on the div below */
|
height: 100%; /* inline style override on the div below */
|
||||||
background: red;
|
background: white;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ document.addEventListener("MozReftestInvalidate", resize_div, false);
|
|||||||
|
|
||||||
<div style="height:50%;">
|
<div style="height:50%;">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="5000" height="100%">
|
<svg xmlns="http://www.w3.org/2000/svg" width="5000" height="100%">
|
||||||
<rect width="100%" height="100%" fill="lime"/>
|
<rect width="100%" height="100%" fill="blue"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ html, body, div {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
width: 100%; /* inline style override on the div below */
|
width: 100%; /* inline style override on the div below */
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background: red;
|
background: white;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ document.addEventListener("MozReftestInvalidate", resize_div, false);
|
|||||||
|
|
||||||
<div style="width:50%;">
|
<div style="width:50%;">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="5000">
|
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="5000">
|
||||||
<rect width="100%" height="100%" fill="lime"/>
|
<rect width="100%" height="100%" fill="blue"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -10,10 +10,11 @@
|
|||||||
<title>Test: width:auto; height:auto; width="49%" height="70px"</title>
|
<title>Test: width:auto; height:auto; width="49%" height="70px"</title>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
This testcase checks that the <object> element uses the intrinsic width and
|
This testcase checks that the <object> element uses the intrinsic
|
||||||
height of the embedded SVG. Since the intrinsic width is 49% and the
|
height of the embedded SVG, but ignores the percentage width. Since
|
||||||
intrinsic height is 70px, you should see a blue rectangle 49% wide by 70px
|
the intrinsic height is 70px, you should see a blue rectangle 300px
|
||||||
high when viewing this file. You should not see any red.
|
(the magic default) wide by 70px high when viewing this file. You
|
||||||
|
should not see any red.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
|
@ -35,11 +35,11 @@ html, body {
|
|||||||
<!-- div to expand parent div to a computed height of 20px -->
|
<!-- div to expand parent div to a computed height of 20px -->
|
||||||
<div style="height:20px; background:red;"/>
|
<div style="height:20px; background:red;"/>
|
||||||
|
|
||||||
<!-- absolutely positioned SVG - the implicity 100% percentage height
|
<!-- absolutely positioned SVG - the explicit 100% percentage height
|
||||||
should compute as a percentage of the parent div's computed height,
|
should compute as a percentage of the parent div's computed height,
|
||||||
not as a percentage of the body's height! I.e. no red should show.
|
not as a percentage of the body's height! I.e. no red should show.
|
||||||
-->
|
-->
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" style="position:absolute; top:0;">
|
<svg xmlns="http://www.w3.org/2000/svg" style="position:absolute; top:0; width: 100%; height: 100%">
|
||||||
<rect width="100%" height="100%" fill="red"/>
|
<rect width="100%" height="100%" fill="red"/>
|
||||||
<rect width="100%" height="20px" fill="lime"/>
|
<rect width="100%" height="20px" fill="lime"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
@ -26,7 +26,7 @@ div {
|
|||||||
border: 1px solid blue;
|
border: 1px solid blue;
|
||||||
margin: 50px;
|
margin: 50px;
|
||||||
width: 0;
|
width: 0;
|
||||||
height: 49%;
|
height: 150px;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -10,10 +10,11 @@
|
|||||||
<title>Test: width:auto; height:auto; width="0" height="49%"</title>
|
<title>Test: width:auto; height:auto; width="0" height="49%"</title>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
This testcase checks that the <object> element uses the intrinsic width and
|
This testcase checks that the <object> element uses the intrinsic
|
||||||
height of the embedded SVG. Since the intrinsic width is zero and the
|
width of the embedded SVG but ignores the (percentage) height.
|
||||||
intrinsic height is 49%, you should see a 1px blue border around rectangle
|
Since the intrinsic width is zero, you should see a 1px blue border
|
||||||
0px wide by 49% high when viewing this file. You should not see any red.
|
around rectangle 0px wide by 150px high when viewing this file. You
|
||||||
|
should not see any red.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
|
@ -25,7 +25,7 @@ div {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
border: 1px solid blue;
|
border: 1px solid blue;
|
||||||
margin: 50px;
|
margin: 50px;
|
||||||
width: 49%;
|
width: 300px;
|
||||||
height: 0;
|
height: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,11 +10,11 @@
|
|||||||
<title>Test: width:auto; height:auto; width="49%" height="0"</title>
|
<title>Test: width:auto; height:auto; width="49%" height="0"</title>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
This testcase checks that the <object> element uses the intrinsic width and
|
This testcase checks that the <object> element uses the intrinsic
|
||||||
height of the embedded SVG. Since the intrinsic width is 49% and the
|
height of the embedded SVG, but ignores the percentage intrinsic
|
||||||
intrinsic height is zero, you should see a 1px blue border around a
|
width. Since the intrinsic height is zero, you should see a 1px blue
|
||||||
rectangle 49% wide by 0px high when viewing this file. You should not see
|
border around a rectangle 300px wide by 0px high when viewing this
|
||||||
any red.
|
file. You should not see any red.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
|
@ -303,8 +303,10 @@ random-if(Android) == object--auto-auto--px-px.html object--auto-auto--px
|
|||||||
|
|
||||||
== dynamic--inline-css-height.xhtml pass.svg
|
== dynamic--inline-css-height.xhtml pass.svg
|
||||||
== dynamic--inline-css-width.xhtml pass.svg
|
== dynamic--inline-css-width.xhtml pass.svg
|
||||||
== dynamic--inline-resize-cb-height.xhtml pass.svg
|
# These two don't have a whole lot of point anymore now that the meaning
|
||||||
== dynamic--inline-resize-cb-width.xhtml pass.svg
|
# of percentages has changed.
|
||||||
|
== dynamic--inline-resize-cb-height.xhtml standalone-sanity-height-150px.svg
|
||||||
|
== dynamic--inline-resize-cb-width.xhtml standalone-sanity-width-300px.svg
|
||||||
skip == dynamic--inline-resize-window-height.xhtml pass.svg # XXX breaks the reftest run as the window height somehow is not restored
|
skip == dynamic--inline-resize-window-height.xhtml pass.svg # XXX breaks the reftest run as the window height somehow is not restored
|
||||||
skip == dynamic--inline-resize-window-width.xhtml pass.svg # Fails way too much
|
skip == dynamic--inline-resize-window-width.xhtml pass.svg # Fails way too much
|
||||||
fails == dynamic--object-svg-unloaded.xhtml pass.svg
|
fails == dynamic--object-svg-unloaded.xhtml pass.svg
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<title>Test percentages dimensions for SVG inside a foreignObject</title>
|
<title>Test percentages dimensions for SVG inside a foreignObject</title>
|
||||||
|
|
||||||
<foreignObject width="50%" height="50%">
|
<foreignObject width="50%" height="50%">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="50%" height="50%">
|
<svg xmlns="http://www.w3.org/2000/svg" style="width: 50%; height: 50%">
|
||||||
<ellipse cx="50%" cy="50%" rx="50%" ry="50%" fill="blue"/>
|
<ellipse cx="50%" cy="50%" rx="50%" ry="50%" fill="blue"/>
|
||||||
</svg>
|
</svg>
|
||||||
</foreignObject>
|
</foreignObject>
|
||||||
|
Before Width: | Height: | Size: 911 B After Width: | Height: | Size: 918 B |
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<foreignObject width="50%" height="50%">
|
<foreignObject width="50%" height="50%">
|
||||||
<div xmlns="http://www.w3.org/1999/xhtml" style="width:100%;height:100%;">
|
<div xmlns="http://www.w3.org/1999/xhtml" style="width:100%;height:100%;">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="50%" height="50%">
|
<svg xmlns="http://www.w3.org/2000/svg" style="width: 50%; height: 50%">
|
||||||
<ellipse cx="50%" cy="50%" rx="50%" ry="50%" fill="blue"/>
|
<ellipse cx="50%" cy="50%" rx="50%" ry="50%" fill="blue"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
|
Before Width: | Height: | Size: 1009 B After Width: | Height: | Size: 1016 B |
@ -16,7 +16,7 @@
|
|||||||
<div style="height:200px; width:100px;"/>
|
<div style="height:200px; width:100px;"/>
|
||||||
<span class="unit" style="background:lime;"></span>
|
<span class="unit" style="background:lime;"></span>
|
||||||
</span>
|
</span>
|
||||||
<svg:svg height="0">
|
<svg:svg height="0" style="display: block">
|
||||||
<!-- use an empty g to force clipPath-html-06.xhtml to load before onload -->
|
<!-- use an empty g to force clipPath-html-06.xhtml to load before onload -->
|
||||||
<svg:use xlink:href="clipPath-html-06.xhtml#empty" />
|
<svg:use xlink:href="clipPath-html-06.xhtml#empty" />
|
||||||
</svg:svg>
|
</svg:svg>
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<span class="unit" style="background:lime;"></span>
|
<span class="unit" style="background:lime;"></span>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<svg:svg height="0">
|
<svg:svg height="0" style="display: block">
|
||||||
<!-- so that other documents can svg:use this one and force it to
|
<!-- so that other documents can svg:use this one and force it to
|
||||||
load before onload -->
|
load before onload -->
|
||||||
<svg:g id="empty" />
|
<svg:g id="empty" />
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Test that conditional processing attributes on outer 'svg' elements are honored</title>
|
<title>Test that conditional processing attributes on outer 'svg' elements are honored</title>
|
||||||
<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=615146 -->
|
<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=615146 -->
|
||||||
<style>svg { position: absolute; top: 0; left: 0 }</style>
|
<style>svg { position: absolute; top: 0; left: 0; height: 100%; width: 100% }</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Test that using elements from conditional-failing outer 'svg' elements works</title>
|
<title>Test that using elements from conditional-failing outer 'svg' elements works</title>
|
||||||
<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=615146 -->
|
<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=615146 -->
|
||||||
<style>svg { position: absolute; top: 0; left: 0 }</style>
|
<style>svg { position: absolute; top: 0; left: 0; height: 100%; width: 100% }</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Test that conditional processing attributes on outer 'svg' elements are honored</title>
|
<title>Test that conditional processing attributes on outer 'svg' elements are honored</title>
|
||||||
<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=615146 -->
|
<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=615146 -->
|
||||||
<style>svg { position: absolute; top: 0; left: 0 }</style>
|
<style>svg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }</style>
|
||||||
</head>
|
</head>
|
||||||
<body onload="document.getElementById('a').setAttribute('requiredExtensions', 'x')">
|
<body onload="document.getElementById('a').setAttribute('requiredExtensions', 'x')">
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Test that conditional processing attributes on outer 'svg' elements are honored</title>
|
<title>Test that conditional processing attributes on outer 'svg' elements are honored</title>
|
||||||
<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=615146 -->
|
<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=615146 -->
|
||||||
<style>svg { position: absolute; top: 0; left: 0 }</style>
|
<style>svg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }</style>
|
||||||
</head>
|
</head>
|
||||||
<body onload="document.getElementById('a').removeAttribute('requiredExtensions')">
|
<body onload="document.getElementById('a').removeAttribute('requiredExtensions')">
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Test that conditional processing attributes on outer 'svg' elements are honored</title>
|
<title>Test that conditional processing attributes on outer 'svg' elements are honored</title>
|
||||||
<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=615146 -->
|
<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=615146 -->
|
||||||
<style>svg { position: absolute; top: 0; left: 0 }</style>
|
<style>svg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }</style>
|
||||||
</head>
|
</head>
|
||||||
<body onload="document.getElementById('a').setAttribute('requiredFeatures', 'x')">
|
<body onload="document.getElementById('a').setAttribute('requiredFeatures', 'x')">
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Test that conditional processing attributes on outer 'svg' elements are honored</title>
|
<title>Test that conditional processing attributes on outer 'svg' elements are honored</title>
|
||||||
<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=615146 -->
|
<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=615146 -->
|
||||||
<style>svg { position: absolute; top: 0; left: 0 }</style>
|
<style>svg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }</style>
|
||||||
</head>
|
</head>
|
||||||
<body onload="document.getElementById('a').setAttribute('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Gradient')">
|
<body onload="document.getElementById('a').setAttribute('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Gradient')">
|
||||||
|
|
||||||
|
@ -248,21 +248,13 @@ nsSVGOuterSVGFrame::GetIntrinsicSize()
|
|||||||
nsSVGLength2 &width = content->mLengthAttributes[nsSVGSVGElement::WIDTH];
|
nsSVGLength2 &width = content->mLengthAttributes[nsSVGSVGElement::WIDTH];
|
||||||
nsSVGLength2 &height = content->mLengthAttributes[nsSVGSVGElement::HEIGHT];
|
nsSVGLength2 &height = content->mLengthAttributes[nsSVGSVGElement::HEIGHT];
|
||||||
|
|
||||||
if (width.IsPercentage()) {
|
if (!width.IsPercentage()) {
|
||||||
float val = width.GetAnimValInSpecifiedUnits() / 100.0f;
|
|
||||||
if (val < 0.0f) val = 0.0f;
|
|
||||||
intrinsicSize.width.SetPercentValue(val);
|
|
||||||
} else {
|
|
||||||
nscoord val = nsPresContext::CSSPixelsToAppUnits(width.GetAnimValue(content));
|
nscoord val = nsPresContext::CSSPixelsToAppUnits(width.GetAnimValue(content));
|
||||||
if (val < 0) val = 0;
|
if (val < 0) val = 0;
|
||||||
intrinsicSize.width.SetCoordValue(val);
|
intrinsicSize.width.SetCoordValue(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (height.IsPercentage()) {
|
if (!height.IsPercentage()) {
|
||||||
float val = height.GetAnimValInSpecifiedUnits() / 100.0f;
|
|
||||||
if (val < 0.0f) val = 0.0f;
|
|
||||||
intrinsicSize.height.SetPercentValue(val);
|
|
||||||
} else {
|
|
||||||
nscoord val = nsPresContext::CSSPixelsToAppUnits(height.GetAnimValue(content));
|
nscoord val = nsPresContext::CSSPixelsToAppUnits(height.GetAnimValue(content));
|
||||||
if (val < 0) val = 0;
|
if (val < 0) val = 0;
|
||||||
intrinsicSize.height.SetCoordValue(val);
|
intrinsicSize.height.SetCoordValue(val);
|
||||||
@ -318,16 +310,52 @@ nsSVGOuterSVGFrame::ComputeSize(nsRenderingContext *aRenderingContext,
|
|||||||
{
|
{
|
||||||
nsSVGSVGElement* content = static_cast<nsSVGSVGElement*>(mContent);
|
nsSVGSVGElement* content = static_cast<nsSVGSVGElement*>(mContent);
|
||||||
|
|
||||||
if ((content->HasValidViewbox() || content->ShouldSynthesizeViewBox()) &&
|
IntrinsicSize intrinsicSize = GetIntrinsicSize();
|
||||||
(IsRootOfImage() || IsRootOfReplacedElementSubDoc())) {
|
|
||||||
// The embedding element has done the replaced element sizing, using our
|
if (!mContent->GetParent()) {
|
||||||
// intrinsic dimensions as necessary. We just need to fill the viewport.
|
if (IsRootOfImage() || IsRootOfReplacedElementSubDoc()) {
|
||||||
return aCBSize;
|
// The embedding element has done the replaced element sizing,
|
||||||
|
// using our intrinsic dimensions as necessary. We just need to
|
||||||
|
// fill the viewport.
|
||||||
|
return aCBSize;
|
||||||
|
} else {
|
||||||
|
// We're the root of a browsing context, so we need to honor
|
||||||
|
// widths and heights in percentages. (GetIntrinsicSize() doesn't
|
||||||
|
// report these since there's no such thing as a percentage
|
||||||
|
// intrinsic size.)
|
||||||
|
nsSVGLength2 &width =
|
||||||
|
content->mLengthAttributes[nsSVGSVGElement::WIDTH];
|
||||||
|
if (width.IsPercentage()) {
|
||||||
|
NS_ABORT_IF_FALSE(intrinsicSize.width.GetUnit() == eStyleUnit_None,
|
||||||
|
"GetIntrinsicSize should have reported no "
|
||||||
|
"intrinsic width");
|
||||||
|
float val = width.GetAnimValInSpecifiedUnits() / 100.0f;
|
||||||
|
if (val < 0.0f) val = 0.0f;
|
||||||
|
intrinsicSize.width.SetCoordValue(val * aCBSize.width);
|
||||||
|
}
|
||||||
|
|
||||||
|
nsSVGLength2 &height =
|
||||||
|
content->mLengthAttributes[nsSVGSVGElement::HEIGHT];
|
||||||
|
NS_ABORT_IF_FALSE(aCBSize.height != NS_AUTOHEIGHT,
|
||||||
|
"root should not have auto-height containing block");
|
||||||
|
if (height.IsPercentage()) {
|
||||||
|
NS_ABORT_IF_FALSE(intrinsicSize.height.GetUnit() == eStyleUnit_None,
|
||||||
|
"GetIntrinsicSize should have reported no "
|
||||||
|
"intrinsic height");
|
||||||
|
float val = height.GetAnimValInSpecifiedUnits() / 100.0f;
|
||||||
|
if (val < 0.0f) val = 0.0f;
|
||||||
|
intrinsicSize.height.SetCoordValue(val * aCBSize.height);
|
||||||
|
}
|
||||||
|
NS_ABORT_IF_FALSE(intrinsicSize.height.GetUnit() == eStyleUnit_Coord &&
|
||||||
|
intrinsicSize.width.GetUnit() == eStyleUnit_Coord,
|
||||||
|
"We should have just handled the only situation where"
|
||||||
|
"we lack an intrinsic height or width.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nsLayoutUtils::ComputeSizeWithIntrinsicDimensions(
|
return nsLayoutUtils::ComputeSizeWithIntrinsicDimensions(
|
||||||
aRenderingContext, this,
|
aRenderingContext, this,
|
||||||
GetIntrinsicSize(), GetIntrinsicRatio(), aCBSize,
|
intrinsicSize, GetIntrinsicRatio(), aCBSize,
|
||||||
aMargin, aBorder, aPadding);
|
aMargin, aBorder, aPadding);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html style="width:100%;height:100%;margin:0;border:0;overflow:hidden">
|
<html style="width:100%;height:100%;margin:0;border:0;overflow:hidden">
|
||||||
<body style="width:100%;height:100%;margin:0;border:0;overflow:hidden">
|
<body style="width:100%;height:100%;margin:0;border:0;overflow:hidden">
|
||||||
<svg>
|
<svg style="width:100%;height:100%">
|
||||||
<rect height="100%" width="100%" fill="red"/>
|
<rect height="100%" width="100%" fill="red"/>
|
||||||
<foreignObject>
|
<foreignObject>
|
||||||
<html>
|
<html>
|
||||||
|
Loading…
Reference in New Issue
Block a user