Bug 1210877 - Make nsBidiPresUtils::RepositionFrame work also for box-decoration-break:clone. r=roc

This commit is contained in:
Mats Palmgren 2015-10-03 06:28:00 +02:00
parent 5808084085
commit c9a6c1cfaa
4 changed files with 155 additions and 13 deletions

View File

@ -1578,19 +1578,22 @@ nsBidiPresUtils::RepositionFrame(nsIFrame* aFrame,
// Since the visual order of frame could be different from the
// continuation order, we need to remove any border/padding first,
// so that we can get the correct isize of the current frame.
if (!aFrame->GetPrevContinuation()) {
frameISize -= borderPadding.IStart(frameWM);
}
if (!aFrame->GetNextContinuation()) {
frameISize -= borderPadding.IEnd(frameWM);
}
if (!isFirst) {
frameMargin.IStart(frameWM) = 0;
borderPadding.IStart(frameWM) = 0;
}
if (!isLast) {
frameMargin.IEnd(frameWM) = 0;
borderPadding.IEnd(frameWM) = 0;
if (aFrame->StyleBorder()->mBoxDecorationBreak ==
NS_STYLE_BOX_DECORATION_BREAK_SLICE) {
if (!aFrame->GetPrevContinuation()) {
frameISize -= borderPadding.IStart(frameWM);
}
if (!aFrame->GetNextContinuation()) {
frameISize -= borderPadding.IEnd(frameWM);
}
if (!isFirst) {
frameMargin.IStart(frameWM) = 0;
borderPadding.IStart(frameWM) = 0;
}
if (!isLast) {
frameMargin.IEnd(frameWM) = 0;
borderPadding.IEnd(frameWM) = 0;
}
}
frameISize += borderPadding.IStartEnd(frameWM);

View File

@ -0,0 +1,74 @@
<!DOCTYPE HTML>
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html><head>
<meta charset="utf-8">
<title>Testing box-decoration-break with bidi resolution</title>
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1210877">
<style type="text/css">
.test {
box-decoration-break: slice;
background: black;
}
.p {
padding:11px 3px 5px 7px;
}
.b {
border: 1px solid blue;
border-width:3px 5px 7px 11px;
}
.m {
margin:5px 7px 11px 3px;
}
.direction {
direction: rtl;
}
x {display:inline-block; width:20px; height:10px; background:lime; }
y {display:inline-block; width:30px; height:1px; background:lime; }
d {display:inline-block; border:10px solid red }
</style>
</head>
<body>
<div style="float:left; width: 100px;">
<span class="test p"><x></x></span><br>
<span class="test p"><y></y></span><br><br><br>
<span class="test b"><x></x></span><br>
<span class="test b"><y></y></span><br><br><br>
<span class="test p b"><x></x></span><br>
<span class="test p b"><y></y></span><br><br><br>
<span class="test m"><x></x></span><br>
<span class="test m"><y></y></span><br><br><br>
<span class="test p m"><x></x></span><br>
<span class="test p m"><y></y></span><br><br><br>
<span class="test b m"><x></x></span><br>
<span class="test b m"><y></y></span><br><br><br>
<span class="test p b m"><x></x></span><br>
<span class="test p b m"><y></y></span><br><br><br>
</div><div style="float:left; width: 100px; text-align:right">
<span class="test p"><y></y></span><br>
<span class="test p"><x></x></span><br><br><br>
<span class="test b"><y></y></span><br>
<span class="test b"><x></x></span><br><br><br>
<span class="test p b"><y></y></span><br>
<span class="test p b"><x></x></span><br><br><br>
<span class="test m"><y></y></span><br>
<span class="test m"><x></x></span><br><br><br>
<span class="test p m"><y></y></span><br>
<span class="test p m"><x></x></span><br><br><br>
<span class="test b m"><y></y></span><br>
<span class="test b m"><x></x></span><br><br><br>
<span class="test p b m"><y></y></span><br>
<span class="test p b m"><x></x></span><br><br><br>
</div>
</body>
</html>

View File

@ -0,0 +1,64 @@
<!DOCTYPE HTML>
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html><head>
<meta charset="utf-8">
<title>Testing box-decoration-break with bidi resolution</title>
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1210877">
<link rel="help" href="http://dev.w3.org/csswg/css-break/#break-decoration">
<link rel="match" href="box-decoration-break-with-bidi-ref.html">
<style type="text/css">
.test {
box-decoration-break: clone;
background: black;
}
.p {
padding:11px 3px 5px 7px;
}
.b {
border: 1px solid blue;
border-width:3px 5px 7px 11px;
}
.m {
margin:5px 7px 11px 3px;
}
.direction {
direction: rtl;
}
x {display:inline-block; width:20px; height:10px; background:lime; }
y {display:inline-block; width:30px; height:1px; background:lime; }
d {display:inline-block; border:10px solid red }
</style>
</head>
<body>
<div style="float:left; width: 100px;">
<span class="test p"><x></x><br><y></y></span><br><br><br>
<span class="test b"><x></x><br><y></y></span><br><br><br>
<span class="test p b"><x></x><br><y></y></span><br><br><br>
<span class="test m"><x></x><br><y></y></span><br><br><br>
<span class="test p m"><x></x><br><y></y></span><br><br><br>
<span class="test b m"><x></x><br><y></y></span><br><br><br>
<span class="test p b m"><x></x><br><y></y></span><br><br><br>
<div class="direction"></div> <!-- to trigger bidi resolution -->
</div><div style="float:left; width: 100px; text-align:right">
<span class="test p"><y></y><br><x></x></span><br><br><br>
<span class="test b"><y></y><br><x></x></span><br><br><br>
<span class="test p b"><y></y><br><x></x></span><br><br><br>
<span class="test m"><y></y><br><x></x></span><br><br><br>
<span class="test p m"><y></y><br><x></x></span><br><br><br>
<span class="test b m"><y></y><br><x></x></span><br><br><br>
<span class="test p b m"><y></y><br><x></x></span><br><br><br>
<div class="direction"></div> <!-- to trigger bidi resolution -->
</div>
</body>
</html>

View File

@ -7,3 +7,4 @@ random-if(!gtkWidget) HTTP(..) == box-decoration-break-border-image.html box-dec
== box-decoration-break-block-border-padding.html box-decoration-break-block-border-padding-ref.html
== box-decoration-break-block-margin.html box-decoration-break-block-margin-ref.html
fuzzy-if(!Android,1,5) fuzzy-if(Android,8,6627) == box-decoration-break-first-letter.html box-decoration-break-first-letter-ref.html
== box-decoration-break-with-bidi.html box-decoration-break-with-bidi-ref.html