summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwin7-7 <win7-7@users.noreply.github.com>2020-05-12 19:23:47 +0300
committerwin7-7 <win7-7@users.noreply.github.com>2020-05-12 19:23:47 +0300
commit5b4ba954385d93c7200b8155033c73ab2f0c4f71 (patch)
tree84871edad991a7dd607ec8f185f6bbb022b6edeb
parent39c7fd37d5851edd2f706760a5a067ce12bb96c0 (diff)
downloadUXP-5b4ba954385d93c7200b8155033c73ab2f0c4f71.tar
UXP-5b4ba954385d93c7200b8155033c73ab2f0c4f71.tar.gz
UXP-5b4ba954385d93c7200b8155033c73ab2f0c4f71.tar.lz
UXP-5b4ba954385d93c7200b8155033c73ab2f0c4f71.tar.xz
UXP-5b4ba954385d93c7200b8155033c73ab2f0c4f71.zip
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.cpp11
-rw-r--r--layout/reftests/table-bordercollapse/bug1375518-2.html22
-rw-r--r--layout/reftests/table-bordercollapse/bug1375518-3.html22
-rw-r--r--layout/reftests/table-bordercollapse/bug1375518-4-ref.html44
-rw-r--r--layout/reftests/table-bordercollapse/bug1375518-4.html44
-rw-r--r--layout/reftests/table-bordercollapse/bug1375518-5-ref.html44
-rw-r--r--layout/reftests/table-bordercollapse/bug1375518-5.html44
-rw-r--r--layout/reftests/table-bordercollapse/bug1375518-ref.html17
-rw-r--r--layout/reftests/table-bordercollapse/bug1375518.html24
-rw-r--r--layout/reftests/table-bordercollapse/reftest.list5
-rw-r--r--layout/tables/nsTableCellFrame.cpp12
-rw-r--r--layout/tables/nsTableCellFrame.h4
12 files changed, 275 insertions, 18 deletions
diff --git a/layout/base/nsCSSRendering.cpp b/layout/base/nsCSSRendering.cpp
index 119c6c8a2..9a827546f 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 000000000..c36737622
--- /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 000000000..1d188e19f
--- /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 000000000..f9a8f07d7
--- /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 000000000..97aebd456
--- /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 000000000..eaf1710bc
--- /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 000000000..7f123cd42
--- /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 000000000..5d58d6839
--- /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 000000000..101d92548
--- /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 5ca6f305a..aac4934d6 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 9c715d999..ee05565a9 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 a822e309d..2acd59667 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;