Fix a few more issues with eSyleUnit_Chars in computed style. Bug 391221,

r+sr+a=dbaron
This commit is contained in:
bzbarsky%mit.edu 2007-08-14 18:44:39 +00:00
Родитель 8b7b9ca2cb
Коммит ba756c27b9
3 изменённых файлов: 61 добавлений и 1 удалений

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

@ -3010,7 +3010,7 @@ nsComputedDOMStyle::SetValueToCoord(nsROCSSPrimitiveValue* aValue,
if (cx) {
nscoord val =
nsLayoutUtils::CharsToCoord(aCoord, cx, mStyleContextHolder);
aValue->SetAppUnits(PR_MAX(aMinAppUnits, val));
aValue->SetAppUnits(PR_MAX(aMinAppUnits, PR_MIN(val, aMaxAppUnits)));
} else {
// Oh, well. Give up.
aValue->SetAppUnits(0);
@ -3037,6 +3037,21 @@ nsComputedDOMStyle::StyleCoordToNSCoord(const nsStyleCoord& aCoord,
switch (aCoord.GetUnit()) {
case eStyleUnit_Coord:
return aCoord.GetCoordValue();
case eStyleUnit_Chars:
{
// Get a rendering context
nsCOMPtr<nsIRenderingContext> cx;
nsIFrame* frame = mPresShell->FrameManager()->GetRootFrame();
if (frame) {
mPresShell->CreateRenderingContext(frame, getter_AddRefs(cx));
}
if (!cx) {
// Return the default value, I guess
break;
}
return nsLayoutUtils::CharsToCoord(aCoord, cx, mStyleContextHolder);
}
case eStyleUnit_Percent:
{
nscoord percentageBase;

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

@ -80,6 +80,7 @@ _TEST_FILES = test_bug74880.html \
test_bug383075.html \
test_bug387615.html \
test_bug389464.html \
test_bug391221.html \
test_compute_data_with_start_struct.html \
test_dont_use_document_colors.html \
test_inherit_storage.html \

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

@ -0,0 +1,44 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=391221
-->
<head>
<title>Test for Bug 391221</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=391221">Mozilla Bug 391221</a>
<p id="display">
<div id="width-ref" style="width: 2ch"></div>
</p>
<div id="content" style="display: none">
<div id="one" style="width: 1000px; max-width: 2ch"></div>
<div id="two" style="width: 0px; min-width: 2ch"></div>
<div id="three" style="width: 1000ch; max-width: 2px"></div>
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
/** Test for Bug 391221 **/
function getComp(id) {
return document.defaultView.getComputedStyle($(id), "");
}
is(getComp("one").width, getComp("width-ref").width,
"max-width in ch units not working?");
is(getComp("two").width, getComp("width-ref").width,
"min-width in ch units not working?");
is(getComp("three").width, "2px", "max-width not applied to width in chars?");
</script>
</pre>
</body>
</html>