diff options
author | win7-7 <win7-7@users.noreply.github.com> | 2020-05-12 19:23:47 +0300 |
---|---|---|
committer | win7-7 <win7-7@users.noreply.github.com> | 2020-05-12 19:23:47 +0300 |
commit | 5b4ba954385d93c7200b8155033c73ab2f0c4f71 (patch) | |
tree | 84871edad991a7dd607ec8f185f6bbb022b6edeb | |
parent | 39c7fd37d5851edd2f706760a5a067ce12bb96c0 (diff) | |
download | uxp-5b4ba954385d93c7200b8155033c73ab2f0c4f71.tar.gz |
Issue #1545 - Fix border-radius on table row groups, rows, column groups, or columns
Before issue #146, border-radius on row groups, rows, column groups, or columns don't apply to the background of each cell, yet the border-radius on the cell itself does.
After issue #146, the behaviors changed. In this patch, I tried to revert the behaviors of border-radius on table row groups, rows, column groups, or columns back to what happened before issue #146.
Also: Don't override GetBorderRadii in nsBCTableCellFrame.
-rw-r--r-- | layout/base/nsCSSRendering.cpp | 11 | ||||
-rw-r--r-- | layout/reftests/table-bordercollapse/bug1375518-2.html | 22 | ||||
-rw-r--r-- | layout/reftests/table-bordercollapse/bug1375518-3.html | 22 | ||||
-rw-r--r-- | layout/reftests/table-bordercollapse/bug1375518-4-ref.html | 44 | ||||
-rw-r--r-- | layout/reftests/table-bordercollapse/bug1375518-4.html | 44 | ||||
-rw-r--r-- | layout/reftests/table-bordercollapse/bug1375518-5-ref.html | 44 | ||||
-rw-r--r-- | layout/reftests/table-bordercollapse/bug1375518-5.html | 44 | ||||
-rw-r--r-- | layout/reftests/table-bordercollapse/bug1375518-ref.html | 17 | ||||
-rw-r--r-- | layout/reftests/table-bordercollapse/bug1375518.html | 24 | ||||
-rw-r--r-- | layout/reftests/table-bordercollapse/reftest.list | 5 | ||||
-rw-r--r-- | layout/tables/nsTableCellFrame.cpp | 12 | ||||
-rw-r--r-- | layout/tables/nsTableCellFrame.h | 4 |
12 files changed, 275 insertions, 18 deletions
diff --git a/layout/base/nsCSSRendering.cpp b/layout/base/nsCSSRendering.cpp index 119c6c8a2d..9a827546fb 100644 --- a/layout/base/nsCSSRendering.cpp +++ b/layout/base/nsCSSRendering.cpp @@ -1903,8 +1903,15 @@ nsCSSRendering::GetImageLayerClip(const nsStyleImageLayers::Layer& aLayer, nsRect clipBorderArea = ::BoxDecorationRectForBorder(aForFrame, aBorderArea, skipSides, &aBorder); - bool haveRoundedCorners = GetRadii(aForFrame, aBorder, aBorderArea, - clipBorderArea, aClipState->mRadii); + bool haveRoundedCorners = false; + nsIAtom* fType = aForFrame->GetType(); + if (fType != nsGkAtoms::tableColGroupFrame && + fType != nsGkAtoms::tableColFrame && + fType != nsGkAtoms::tableRowFrame && + fType != nsGkAtoms::tableRowGroupFrame) { + haveRoundedCorners = GetRadii(aForFrame, aBorder, aBorderArea, + clipBorderArea, aClipState->mRadii); + } bool isSolidBorder = aWillPaintBorder && IsOpaqueBorder(aBorder); diff --git a/layout/reftests/table-bordercollapse/bug1375518-2.html b/layout/reftests/table-bordercollapse/bug1375518-2.html new file mode 100644 index 0000000000..c367376226 --- /dev/null +++ b/layout/reftests/table-bordercollapse/bug1375518-2.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<title>Table border collapse</title> +<style> + div > span { + display: table-cell; + background-color: black; + height: 100px; + width: 100px; + border-radius: 50px; + } + div { + display: table; + border-collapse: collapse; + } +</style> +</head> +<body> + <div><span></span></div> +</body> +</html>
\ No newline at end of file diff --git a/layout/reftests/table-bordercollapse/bug1375518-3.html b/layout/reftests/table-bordercollapse/bug1375518-3.html new file mode 100644 index 0000000000..1d188e19fa --- /dev/null +++ b/layout/reftests/table-bordercollapse/bug1375518-3.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<title>Separated border model table</title> +<style> + div > span { + display: table-cell; + background-color: black; + height: 100px; + width: 100px; + border-radius: 50px; + } + div { + display: table; + border-collapse: separate; + } +</style> +</head> +<body> + <div><span></span></div> +</body> +</html>
\ No newline at end of file diff --git a/layout/reftests/table-bordercollapse/bug1375518-4-ref.html b/layout/reftests/table-bordercollapse/bug1375518-4-ref.html new file mode 100644 index 0000000000..f9a8f07d7f --- /dev/null +++ b/layout/reftests/table-bordercollapse/bug1375518-4-ref.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<title>border-radius and separated border model tables</title> +<style> + +body { background: white; color: black } + +table { border-collapse: separate; margin: 1em 2px; } +table, td { border: 1px solid black; } + +.radius { border: 3px solid teal; background: aqua; color: black; } + +</style> + +<h1>border-radius and separated border model tables</h1> + +<table> + <tbody> + <tr><td>xx</td><td>xx</td><td>xx + </td></tr></tbody> + <tbody class="radius"> + <tr><td>xx</td><td>xx</td><td>xx + </td></tr><tr><td>xx</td><td>xx</td><td>xx + </td></tr></tbody> + <tbody> + <tr><td>xx</td><td>xx</td><td>xx + </td></tr></tbody> +</table> + +<table> + <tbody><tr class="radius"><td>xx</td><td>xx</td><td>xx + </td></tr><tr><td>xx</td><td>xx</td><td>xx +</td></tr></tbody></table> + +<table> + <colgroup class="radius"><col><col></colgroup><colgroup><col> + </colgroup><tbody><tr><td>xx</td><td>xx</td><td>xx + </td></tr><tr><td>xx</td><td>xx</td><td>xx +</td></tr></tbody></table> + +<table> + <colgroup><col><col class="radius"><col> + </colgroup><tbody><tr><td>xx</td><td>xx</td><td>xx + </td></tr><tr><td>xx</td><td>xx</td><td>xx +</td></tr></tbody></table>
\ No newline at end of file diff --git a/layout/reftests/table-bordercollapse/bug1375518-4.html b/layout/reftests/table-bordercollapse/bug1375518-4.html new file mode 100644 index 0000000000..97aebd456c --- /dev/null +++ b/layout/reftests/table-bordercollapse/bug1375518-4.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<title>border-radius and separated border model tables</title> +<style> + +body { background: white; color: black } + +table { border-collapse: separate; margin: 1em 2px; } +table, td { border: 1px solid black; } + +.radius { border: 3px solid teal; background: aqua; color: black; border-radius: 12px } + +</style> + +<h1>border-radius and separated border model tables</h1> + +<table> + <tbody> + <tr><td>xx</td><td>xx</td><td>xx + </td></tr></tbody> + <tbody class="radius"> + <tr><td>xx</td><td>xx</td><td>xx + </td></tr><tr><td>xx</td><td>xx</td><td>xx + </td></tr></tbody> + <tbody> + <tr><td>xx</td><td>xx</td><td>xx + </td></tr></tbody> +</table> + +<table> + <tbody><tr class="radius"><td>xx</td><td>xx</td><td>xx + </td></tr><tr><td>xx</td><td>xx</td><td>xx +</td></tr></tbody></table> + +<table> + <colgroup class="radius"><col><col></colgroup><colgroup><col> + </colgroup><tbody><tr><td>xx</td><td>xx</td><td>xx + </td></tr><tr><td>xx</td><td>xx</td><td>xx +</td></tr></tbody></table> + +<table> + <colgroup><col><col class="radius"><col> + </colgroup><tbody><tr><td>xx</td><td>xx</td><td>xx + </td></tr><tr><td>xx</td><td>xx</td><td>xx +</td></tr></tbody></table>
\ No newline at end of file diff --git a/layout/reftests/table-bordercollapse/bug1375518-5-ref.html b/layout/reftests/table-bordercollapse/bug1375518-5-ref.html new file mode 100644 index 0000000000..eaf1710bce --- /dev/null +++ b/layout/reftests/table-bordercollapse/bug1375518-5-ref.html @@ -0,0 +1,44 @@ +<!DOCTYPE HTML> +<title>border-radius and border-collapse tables</title> +<style> + +body { background: white; color: black } + +table { border-collapse: collapse; margin: 1em 2px; } +td { border: 1px solid black; } + +.radius { border: 3px solid teal; background: aqua; color: black; } + +</style> + +<h1>border-radius and border-collapse tables</h1> + +<table> + <tbody> + <tr><td>xx<td>xx<td>xx + </tbody> + <tbody class="radius"> + <tr><td>xx<td>xx<td>xx + <tr><td>xx<td>xx<td>xx + </tbody> + <tbody> + <tr><td>xx<td>xx<td>xx + </tbody> +</table> + +<table> + <tr class="radius"><td>xx<td>xx<td>xx + <tr><td>xx<td>xx<td>xx +</table> + +<table> + <colgroup class="radius"><col><col><colgroup><col> + <tr><td>xx<td>xx<td>xx + <tr><td>xx<td>xx<td>xx +</table> + +<table> + <col><col class="radius"><col> + <tr><td>xx<td>xx<td>xx + <tr><td>xx<td>xx<td>xx +</table> diff --git a/layout/reftests/table-bordercollapse/bug1375518-5.html b/layout/reftests/table-bordercollapse/bug1375518-5.html new file mode 100644 index 0000000000..7f123cd42a --- /dev/null +++ b/layout/reftests/table-bordercollapse/bug1375518-5.html @@ -0,0 +1,44 @@ +<!DOCTYPE HTML> +<title>border-radius and border-collapse tables</title> +<style> + +body { background: white; color: black } + +table { border-collapse: collapse; margin: 1em 2px; } +td { border: 1px solid black; } + +.radius { border: 3px solid teal; background: aqua; color: black; border-radius: 12px } + +</style> + +<h1>border-radius and border-collapse tables</h1> + +<table> + <tbody> + <tr><td>xx<td>xx<td>xx + </tbody> + <tbody class="radius"> + <tr><td>xx<td>xx<td>xx + <tr><td>xx<td>xx<td>xx + </tbody> + <tbody> + <tr><td>xx<td>xx<td>xx + </tbody> +</table> + +<table> + <tr class="radius"><td>xx<td>xx<td>xx + <tr><td>xx<td>xx<td>xx +</table> + +<table> + <colgroup class="radius"><col><col><colgroup><col> + <tr><td>xx<td>xx<td>xx + <tr><td>xx<td>xx<td>xx +</table> + +<table> + <col><col class="radius"><col> + <tr><td>xx<td>xx<td>xx + <tr><td>xx<td>xx<td>xx +</table> diff --git a/layout/reftests/table-bordercollapse/bug1375518-ref.html b/layout/reftests/table-bordercollapse/bug1375518-ref.html new file mode 100644 index 0000000000..5d58d68392 --- /dev/null +++ b/layout/reftests/table-bordercollapse/bug1375518-ref.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> +<head> +<title>Table border collapse</title> +<style> + div { + background-color: black; + height: 100px; + width: 100px; + border-radius: 50px; + } +</style> +</head> +<body> + <div></div> +</body> +</html>
\ No newline at end of file diff --git a/layout/reftests/table-bordercollapse/bug1375518.html b/layout/reftests/table-bordercollapse/bug1375518.html new file mode 100644 index 0000000000..101d925486 --- /dev/null +++ b/layout/reftests/table-bordercollapse/bug1375518.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<head> +<title>Table border collapse</title> +<style> + table { + border-collapse: collapse; + height: 100px; + width: 100px; + } + td { + background-color: black; + border-radius: 50px; + } +</style> +</head> +<body> + <table> + <tr> + <td></td> + </tr> + </table> +</body> +</html>
\ No newline at end of file diff --git a/layout/reftests/table-bordercollapse/reftest.list b/layout/reftests/table-bordercollapse/reftest.list index 5ca6f305ab..aac4934d69 100644 --- a/layout/reftests/table-bordercollapse/reftest.list +++ b/layout/reftests/table-bordercollapse/reftest.list @@ -1,3 +1,8 @@ +== bug1375518.html bug1375518-ref.html +== bug1375518-2.html bug1375518-ref.html +== bug1375518-3.html bug1375518-ref.html +== bug1375518-4.html bug1375518-4-ref.html +== bug1375518-5.html bug1375518-5-ref.html == bc_dyn_cell1.html bc_dyn_cell1_ref.html == bc_dyn_cell2.html bc_dyn_cell2_ref.html == bc_dyn_cell3.html bc_dyn_cell3_ref.html diff --git a/layout/tables/nsTableCellFrame.cpp b/layout/tables/nsTableCellFrame.cpp index 9c715d999b..ee05565a9c 100644 --- a/layout/tables/nsTableCellFrame.cpp +++ b/layout/tables/nsTableCellFrame.cpp @@ -1108,18 +1108,6 @@ nsBCTableCellFrame::GetUsedBorder() const return GetBorderWidth(wm).GetPhysicalMargin(wm); } -/* virtual */ bool -nsBCTableCellFrame::GetBorderRadii(const nsSize& aFrameSize, - const nsSize& aBorderArea, - Sides aSkipSides, - nscoord aRadii[8]) const -{ - NS_FOR_CSS_HALF_CORNERS(corner) { - aRadii[corner] = 0; - } - return false; -} - #ifdef DEBUG_FRAME_DUMP nsresult nsBCTableCellFrame::GetFrameName(nsAString& aResult) const diff --git a/layout/tables/nsTableCellFrame.h b/layout/tables/nsTableCellFrame.h index a822e309da..2acd59667b 100644 --- a/layout/tables/nsTableCellFrame.h +++ b/layout/tables/nsTableCellFrame.h @@ -340,10 +340,6 @@ public: virtual nsIAtom* GetType() const override; virtual nsMargin GetUsedBorder() const override; - virtual bool GetBorderRadii(const nsSize& aFrameSize, - const nsSize& aBorderArea, - Sides aSkipSides, - nscoord aRadii[8]) const override; // Get the *inner half of the border only*, in twips. virtual LogicalMargin GetBorderWidth(WritingMode aWM) const override; |