Changeset 101202 in webkit
- Timestamp:
- Nov 27, 2011 10:32:37 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 137 added
- 74 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r101200 r101202 1 2011-11-27 Robert Hogan <robert@webkit.org> 2 3 CSS 2.1 failure: border-conflict-element-* 4 https://bugs.webkit.org/show_bug.cgi?id=71244 5 6 Add all the passing border-conflict-element* tests from the CSS 2.1 test suite. 7 8 Add a corrected version of the CSS suite test border-conflict-element-002.htm, which can sit here until 9 the corrected version is landed upstream. See http://lists.w3.org/Archives/Public/public-css-testsuite/2011Nov/0002.html 10 11 Rebaseline all t170602-bdr-conflct-w-* tests. The rendering of the collapsed borders in these 12 tests now obeys the order of precedence for the position of the cell and the precendece of the position 13 of the borders within the same cell. 14 15 Rebaseline tables/mozilla/collapsing_borders/bug41262-4.html: ditto 16 tables/mozilla/marvin/table_rules_all.html : ditto 17 tables/mozilla/marvin/table_rules_none.html : ditto 18 tables/mozilla_expected_failures/marvin/table_rules_cols.html : ditto 19 tables/mozilla_expected_failures/marvin/table_rules_rows.html : ditto 20 21 Rebaseline two border-conflict-style-* tests: ditto 22 23 Rebaseline fast/borders/border-antialiasing.html, the result is too small to confirm the difference but 24 presume it is one of the above. 25 26 Reviewed by Julien Chaffraix. 27 28 * css2.1/20110323/border-conflict-element-001.htm: Added. 29 * css2.1/20110323/border-conflict-element-001a.htm: Added. 30 * css2.1/20110323/border-conflict-element-001b.htm: Added. 31 * css2.1/20110323/border-conflict-element-001c.htm: Added. 32 * css2.1/20110323/border-conflict-element-001d.htm: Added. 33 * css2.1/20110323/border-conflict-element-003.htm: Added. 34 * css2.1/20110323/border-conflict-element-004.htm: Added. 35 * css2.1/20110323/border-conflict-element-005.htm: Added. 36 * css2.1/20110323/border-conflict-element-006.htm: Added. 37 * css2.1/20110323/border-conflict-element-007.htm: Added. 38 * css2.1/20110323/border-conflict-element-008.htm: Added. 39 * css2.1/20110323/border-conflict-element-009.htm: Added. 40 * css2.1/20110323/border-conflict-element-010.htm: Added. 41 * css2.1/20110323/border-conflict-element-011.htm: Added. 42 * css2.1/20110323/border-conflict-element-012.htm: Added. 43 * css2.1/20110323/border-conflict-element-013.htm: Added. 44 * css2.1/20110323/border-conflict-element-014.htm: Added. 45 * css2.1/20110323/border-conflict-element-015.htm: Added. 46 * css2.1/20110323/border-conflict-element-016.htm: Added. 47 * css2.1/20110323/border-conflict-element-017.htm: Added. 48 * css2.1/20110323/border-conflict-element-018.htm: Added. 49 * css2.1/20110323/border-conflict-element-019.htm: Added. 50 * css2.1/20110323/border-conflict-element-020.htm: Added. 51 * css2.1/20110323/border-conflict-element-021.htm: Added. 52 * css2.1/20110323/border-conflict-element-022.htm: Added. 53 * css2.1/20110323/border-conflict-element-023.htm: Added. 54 * css2.1/20110323/border-conflict-element-024.htm: Added. 55 * css2.1/20110323/border-conflict-element-025.htm: Added. 56 * css2.1/20110323/border-conflict-element-026.htm: Added. 57 * css2.1/20110323/border-conflict-element-027.htm: Added. 58 * css2.1/20110323/border-conflict-element-028.htm: Added. 59 * css2.1/20110323/border-conflict-element-029.htm: Added. 60 * css2.1/20110323/border-conflict-element-030.htm: Added. 61 * css2.1/20110323/border-conflict-element-031.htm: Added. 62 * css2.1/20110323/border-conflict-element-032.htm: Added. 63 * css2.1/20110323/border-conflict-element-033.htm: Added. 64 * css2.1/20110323/border-conflict-element-034.htm: Added. 65 * css2.1/20110323/border-conflict-element-035.htm: Added. 66 * css2.1/20110323/border-conflict-element-036.htm: Added. 67 * css2.1/20110323/border-conflict-element-037.htm: Added. 68 * css2.1/20110323/border-conflict-element-038.htm: Added. 69 * css2.1/20110323/border-conflict-element-039.htm: Added. 70 * css2.1/20110323/support/swatch-blue.png: Added. 71 * css2.1/20110323/support/swatch-green.png: Added. 72 * css2.1/20110323/support/swatch-lime.png: Added. 73 * css2.1/20110323/support/swatch-orange.png: Added. 74 * css2.1/20110323/support/swatch-red.png: Added. 75 * css2.1/20110323/support/swatch-teal.png: Added. 76 * css2.1/20110323/support/swatch-white.png: Added. 77 * css2.1/20110323/support/swatch-yellow.png: Added. 78 * fast/css/border-conflict-element-002.htm: Added. 79 * platform/chromium-linux/css2.1/20110323/border-conflict-style-079-expected.png: 80 * platform/chromium-linux/css2.1/20110323/border-conflict-style-088-expected.png: 81 * platform/chromium-linux/css2.1/20110323/floating-replaced-height-008-expected.png: Addition of support/swatch-white.png rebaselines result. 82 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-05-d-expected.png: 83 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-06-d-expected.png: 84 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-07-d-expected.png: 85 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-08-d-expected.png: 86 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-15-d-expected.png: 87 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-16-d-expected.png: 88 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-17-d-expected.png: 89 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-18-d-expected.png: 90 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-25-d-expected.png: 91 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-26-d-expected.png: 92 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-27-d-expected.png: 93 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-28-d-expected.png: 94 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-35-d-expected.png: 95 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-36-d-expected.png: 96 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-37-d-expected.png: 97 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-38-d-expected.png: 98 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-45-d-expected.png: 99 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-46-d-expected.png: 100 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-47-d-expected.png: 101 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-48-d-expected.png: 102 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-51-d-expected.png: 103 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-52-d-expected.png: 104 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-53-d-expected.png: 105 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-54-d-expected.png: 106 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-55-d-expected.png: 107 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-56-d-expected.png: 108 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-57-d-expected.png: 109 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-58-d-expected.png: 110 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-59-d-expected.png: 111 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-61-d-expected.png: 112 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-62-d-expected.png: 113 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-63-d-expected.png: 114 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-64-d-expected.png: 115 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-65-d-expected.png: 116 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-66-d-expected.png: 117 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-67-d-expected.png: 118 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-68-d-expected.png: 119 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-69-d-expected.png: 120 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-71-d-expected.png: 121 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-72-d-expected.png: 122 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-73-d-expected.png: 123 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-74-d-expected.png: 124 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-75-d-expected.png: 125 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-76-d-expected.png: 126 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-77-d-expected.png: 127 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-78-d-expected.png: 128 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-79-d-expected.png: 129 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-81-d-expected.png: 130 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-82-d-expected.png: 131 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-83-d-expected.png: 132 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-84-d-expected.png: 133 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-85-d-expected.png: 134 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-86-d-expected.png: 135 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-87-d-expected.png: 136 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-88-d-expected.png: 137 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-89-d-expected.png: 138 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-95-d-expected.png: 139 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-96-d-expected.png: 140 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-97-d-expected.png: 141 * platform/chromium-linux/css2.1/t170602-bdr-conflct-w-98-d-expected.png: 142 * platform/chromium-linux/fast/borders/border-antialiasing-expected.png: 143 * platform/chromium-linux/tables/mozilla/collapsing_borders/bug41262-4-expected.png: 144 * platform/chromium-linux/tables/mozilla/marvin/table_rules_all-expected.png: 145 * platform/chromium-linux/tables/mozilla/marvin/table_rules_none-expected.png: 146 * platform/chromium-linux/tables/mozilla_expected_failures/marvin/table_rules_cols-expected.png: 147 * platform/chromium-linux/tables/mozilla_expected_failures/marvin/table_rules_rows-expected.png: 148 * platform/chromium/css2.1/20110323/border-conflict-element-001-expected.png: Added. 149 * platform/chromium/css2.1/20110323/border-conflict-element-001-expected.txt: Added. 150 * platform/chromium/css2.1/20110323/border-conflict-element-001a-expected.png: Added. 151 * platform/chromium/css2.1/20110323/border-conflict-element-001a-expected.txt: Added. 152 * platform/chromium/css2.1/20110323/border-conflict-element-001b-expected.png: Added. 153 * platform/chromium/css2.1/20110323/border-conflict-element-001b-expected.txt: Added. 154 * platform/chromium/css2.1/20110323/border-conflict-element-001c-expected.png: Added. 155 * platform/chromium/css2.1/20110323/border-conflict-element-001c-expected.txt: Added. 156 * platform/chromium/css2.1/20110323/border-conflict-element-001d-expected.png: Added. 157 * platform/chromium/css2.1/20110323/border-conflict-element-001d-expected.txt: Added. 158 * platform/chromium/css2.1/20110323/border-conflict-element-003-expected.png: Added. 159 * platform/chromium/css2.1/20110323/border-conflict-element-003-expected.txt: Added. 160 * platform/chromium/css2.1/20110323/border-conflict-element-004-expected.png: Added. 161 * platform/chromium/css2.1/20110323/border-conflict-element-004-expected.txt: Added. 162 * platform/chromium/css2.1/20110323/border-conflict-element-005-expected.png: Added. 163 * platform/chromium/css2.1/20110323/border-conflict-element-005-expected.txt: Added. 164 * platform/chromium/css2.1/20110323/border-conflict-element-006-expected.png: Added. 165 * platform/chromium/css2.1/20110323/border-conflict-element-006-expected.txt: Added. 166 * platform/chromium/css2.1/20110323/border-conflict-element-007-expected.png: Added. 167 * platform/chromium/css2.1/20110323/border-conflict-element-007-expected.txt: Added. 168 * platform/chromium/css2.1/20110323/border-conflict-element-008-expected.png: Added. 169 * platform/chromium/css2.1/20110323/border-conflict-element-008-expected.txt: Added. 170 * platform/chromium/css2.1/20110323/border-conflict-element-009-expected.png: Added. 171 * platform/chromium/css2.1/20110323/border-conflict-element-009-expected.txt: Added. 172 * platform/chromium/css2.1/20110323/border-conflict-element-010-expected.png: Added. 173 * platform/chromium/css2.1/20110323/border-conflict-element-010-expected.txt: Added. 174 * platform/chromium/css2.1/20110323/border-conflict-element-011-expected.png: Added. 175 * platform/chromium/css2.1/20110323/border-conflict-element-011-expected.txt: Added. 176 * platform/chromium/css2.1/20110323/border-conflict-element-012-expected.png: Added. 177 * platform/chromium/css2.1/20110323/border-conflict-element-012-expected.txt: Added. 178 * platform/chromium/css2.1/20110323/border-conflict-element-013-expected.png: Added. 179 * platform/chromium/css2.1/20110323/border-conflict-element-013-expected.txt: Added. 180 * platform/chromium/css2.1/20110323/border-conflict-element-014-expected.png: Added. 181 * platform/chromium/css2.1/20110323/border-conflict-element-014-expected.txt: Added. 182 * platform/chromium/css2.1/20110323/border-conflict-element-015-expected.png: Added. 183 * platform/chromium/css2.1/20110323/border-conflict-element-015-expected.txt: Added. 184 * platform/chromium/css2.1/20110323/border-conflict-element-016-expected.png: Added. 185 * platform/chromium/css2.1/20110323/border-conflict-element-016-expected.txt: Added. 186 * platform/chromium/css2.1/20110323/border-conflict-element-017-expected.png: Added. 187 * platform/chromium/css2.1/20110323/border-conflict-element-017-expected.txt: Added. 188 * platform/chromium/css2.1/20110323/border-conflict-element-018-expected.png: Added. 189 * platform/chromium/css2.1/20110323/border-conflict-element-018-expected.txt: Added. 190 * platform/chromium/css2.1/20110323/border-conflict-element-019-expected.png: Added. 191 * platform/chromium/css2.1/20110323/border-conflict-element-019-expected.txt: Added. 192 * platform/chromium/css2.1/20110323/border-conflict-element-020-expected.png: Added. 193 * platform/chromium/css2.1/20110323/border-conflict-element-020-expected.txt: Added. 194 * platform/chromium/css2.1/20110323/border-conflict-element-021-expected.png: Added. 195 * platform/chromium/css2.1/20110323/border-conflict-element-021-expected.txt: Added. 196 * platform/chromium/css2.1/20110323/border-conflict-element-022-expected.png: Added. 197 * platform/chromium/css2.1/20110323/border-conflict-element-022-expected.txt: Added. 198 * platform/chromium/css2.1/20110323/border-conflict-element-023-expected.png: Added. 199 * platform/chromium/css2.1/20110323/border-conflict-element-023-expected.txt: Added. 200 * platform/chromium/css2.1/20110323/border-conflict-element-024-expected.png: Added. 201 * platform/chromium/css2.1/20110323/border-conflict-element-024-expected.txt: Added. 202 * platform/chromium/css2.1/20110323/border-conflict-element-025-expected.png: Added. 203 * platform/chromium/css2.1/20110323/border-conflict-element-025-expected.txt: Added. 204 * platform/chromium/css2.1/20110323/border-conflict-element-026-expected.png: Added. 205 * platform/chromium/css2.1/20110323/border-conflict-element-026-expected.txt: Added. 206 * platform/chromium/css2.1/20110323/border-conflict-element-027-expected.png: Added. 207 * platform/chromium/css2.1/20110323/border-conflict-element-027-expected.txt: Added. 208 * platform/chromium/css2.1/20110323/border-conflict-element-028-expected.png: Added. 209 * platform/chromium/css2.1/20110323/border-conflict-element-028-expected.txt: Added. 210 * platform/chromium/css2.1/20110323/border-conflict-element-029-expected.png: Added. 211 * platform/chromium/css2.1/20110323/border-conflict-element-029-expected.txt: Added. 212 * platform/chromium/css2.1/20110323/border-conflict-element-030-expected.png: Added. 213 * platform/chromium/css2.1/20110323/border-conflict-element-030-expected.txt: Added. 214 * platform/chromium/css2.1/20110323/border-conflict-element-031-expected.png: Added. 215 * platform/chromium/css2.1/20110323/border-conflict-element-031-expected.txt: Added. 216 * platform/chromium/css2.1/20110323/border-conflict-element-032-expected.png: Added. 217 * platform/chromium/css2.1/20110323/border-conflict-element-032-expected.txt: Added. 218 * platform/chromium/css2.1/20110323/border-conflict-element-033-expected.png: Added. 219 * platform/chromium/css2.1/20110323/border-conflict-element-033-expected.txt: Added. 220 * platform/chromium/css2.1/20110323/border-conflict-element-034-expected.png: Added. 221 * platform/chromium/css2.1/20110323/border-conflict-element-034-expected.txt: Added. 222 * platform/chromium/css2.1/20110323/border-conflict-element-035-expected.png: Added. 223 * platform/chromium/css2.1/20110323/border-conflict-element-035-expected.txt: Added. 224 * platform/chromium/css2.1/20110323/border-conflict-element-036-expected.png: Added. 225 * platform/chromium/css2.1/20110323/border-conflict-element-036-expected.txt: Added. 226 * platform/chromium/css2.1/20110323/border-conflict-element-037-expected.png: Added. 227 * platform/chromium/css2.1/20110323/border-conflict-element-037-expected.txt: Added. 228 * platform/chromium/css2.1/20110323/border-conflict-element-038-expected.png: Added. 229 * platform/chromium/css2.1/20110323/border-conflict-element-038-expected.txt: Added. 230 * platform/chromium/css2.1/20110323/border-conflict-element-039-expected.png: Added. 231 * platform/chromium/css2.1/20110323/border-conflict-element-039-expected.txt: Added. 232 * platform/chromium/fast/css/border-conflict-element-002-expected.png: Added. 233 * platform/chromium/fast/css/border-conflict-element-002-expected.txt: Added. 234 1 235 2011-11-27 Lauro Neto <lauro.neto@openbossa.org> 2 236 -
trunk/Source/WebCore/ChangeLog
r101201 r101202 1 2011-11-27 Robert Hogan <robert@webkit.org> 2 3 CSS 2.1 failure: border-conflict-element-* 4 https://bugs.webkit.org/show_bug.cgi?id=71244 5 6 Reviewed by Julien Chaffraix. 7 8 From http://www.w3.org/TR/CSS21/tables.html#border-conflict-resolution : 9 "When two adjacent cells have the same border-width and the same border-style in a 10 'border-collapse: collapse' table, then the color of the border from the leftmost cell wins 11 (if the table's 'direction' is 'ltr'; right, if it is 'rtl') and the color of the border 12 from the topmost cell wins." 13 14 So WebCore::compareBorders needs to account for the position of the cell when 15 deciding which border wins the comparison. This will ensure that the winning border is 16 sorted to the appropriate position in the sorted list of borders for painting. 17 18 When conflicting collapsed borders are in the same cell, the following order of 19 precedence is used (where 4 has highest precedence): 20 21 __3__ 22 | | 23 4 | | 1 24 |_____| 25 2 26 27 This fixes the following failing tests from the border-conflict-element-* set 28 in the CSS 2.1 test suite: 29 border-conflict-element-001d.htm 30 border-conflict-element-0037.htm 31 32 One test in the suite is known to be wrong, so a corrected version has been landed outside the 33 css2.1 folder: 34 border-conflict-element-002.htm 35 36 This change entails rebaselining quite a few tests, see the LayoutTests ChangeLog for a full 37 explanation of the rebaselines. 38 39 * rendering/RenderTableCell.cpp: 40 (WebCore::compareBorders): Compare the cells' position from the left (in 'ltr') and right (in 'rtl') 41 of the table and the cells' position from the top of the table when nothing 42 else in the style, width, or grouping of the borders determines precedence. 43 If the conflicting borders are in the same cell, apply the same logic to the position of the borders. 44 (WebCore::RenderTableCell::collapsedStartBorder): Pass the cell's position and its table's direction to CollapsedBorderValue 45 (WebCore::RenderTableCell::collapsedEndBorder): ditto 46 (WebCore::RenderTableCell::collapsedBeforeBorder): ditto 47 (WebCore::RenderTableCell::collapsedAfterBorder): ditto 48 * rendering/style/CollapsedBorderValue.h: 49 (WebCore::CollapsedBorderValue::CollapsedBorderValue): Learn the position of the border's cell and the direction of its table 50 (WebCore::CollapsedBorderValue::columnOffset): the cell's offset from the top of the table 51 (WebCore::CollapsedBorderValue::rowOffset): the cell's offset from the start of the table 52 (WebCore::CollapsedBorderValue::edge): which edge of the cell the border is on 53 (WebCore::CollapsedBorderValue::operator==): cells with the same position in the table are equal 54 1 55 2011-11-26 Pavel Feldman <pfeldman@google.com> 2 56 -
trunk/Source/WebCore/rendering/RenderTableCell.cpp
r100386 r101202 340 340 // in this order: 'double', 'solid', 'dashed', 'dotted', 'ridge', 'outset', 'groove', and the lowest: 'inset'. 341 341 // (4) If border styles differ only in color, then a style set on a cell wins over one on a row, 342 // which wins over a row group, column, column group and, lastly, table. It is undefined which color 343 // is used when two elements of the same type disagree. 342 // which wins over a row group, column, column group and, lastly, table. When two elements of the same type 343 // conflict, then the one further to the left (if the table's 'direction' is 'ltr'; right, if it is 'rtl') 344 // and further to the top wins. 344 345 static int compareBorders(const CollapsedBorderValue& border1, const CollapsedBorderValue& border2) 345 346 { … … 378 379 if (border1.style() != border2.style()) 379 380 return border1.style() < border2.style() ? -1 : 1; 380 381 // The border have the same width and style. Rely on precedence (cell over row over row group, etc.) 382 if (border1.precedence() == border2.precedence()) 381 382 // The borders have the same width and style. Sort by precedence (cell over row over row group, etc.) 383 if (border1.precedence() != border2.precedence()) 384 return border1.precedence() < border2.precedence() ? -1 : 1; 385 386 // The borders have the same precedence. Sort by position in the table 387 388 // The one further to the top wins. 389 if (border1.columnOffset() != border2.columnOffset()) 390 return border1.columnOffset() > border2.columnOffset() ? -1 : 1; 391 392 // The one further to the left if 'ltr' and right if 'rtl' and to the top wins. 393 // Note that rtl tables treat the rightmost column as '0' so the calculation is the same for both. 394 if (border1.rowOffset() != border2.rowOffset()) 395 return border1.rowOffset() > border2.rowOffset() ? -1 : 1; 396 397 // The borders are in the same cell. Prefer the border nearest to the top and left. 398 if (border1.edge() == border2.edge()) 383 399 return 0; 384 return border1. precedence() < border2.precedence() ? -1 : 1;400 return border1.edge() < border2.edge() ? -1 : 1; 385 401 } 386 402 … … 400 416 int start = CSSProperty::resolveDirectionAwareProperty(CSSPropertyWebkitBorderStartColor, table->style()->direction(), table->style()->writingMode()); 401 417 int end = CSSProperty::resolveDirectionAwareProperty(CSSPropertyWebkitBorderEndColor, table->style()->direction(), table->style()->writingMode()); 402 CollapsedBorderValue result(style()->borderStart(), style()->visitedDependentColor(start), BCELL );418 CollapsedBorderValue result(style()->borderStart(), style()->visitedDependentColor(start), BCELL, col(), row(), BSTARTEDGE); 403 419 404 420 // (2) The end border of the preceding cell. 405 if (RenderTableCell* prevCell = table->cellBefore(this)) { 406 CollapsedBorderValue prevCellBorder = CollapsedBorderValue(prevCell->style()->borderEnd(), prevCell->style()->visitedDependentColor(end), BCELL); 421 RenderTableCell* prevCell = table->cellBefore(this); 422 if (prevCell) { 423 CollapsedBorderValue prevCellBorder = CollapsedBorderValue(prevCell->style()->borderEnd(), prevCell->style()->visitedDependentColor(end), BCELL, prevCell->col(), prevCell->row(), BENDEDGE); 407 424 result = chooseBorder(prevCellBorder, result); 408 425 if (!result.exists()) … … 410 427 } else if (isStartColumn) { 411 428 // (3) Our row's start border. 412 result = chooseBorder(result, CollapsedBorderValue(parent()->style()->borderStart(), parent()->style()->visitedDependentColor(start), BROW ));413 if (!result.exists()) 414 return result; 415 429 result = chooseBorder(result, CollapsedBorderValue(parent()->style()->borderStart(), parent()->style()->visitedDependentColor(start), BROW, col(), row(), BSTARTEDGE)); 430 if (!result.exists()) 431 return result; 432 416 433 // (4) Our row group's start border. 417 result = chooseBorder(result, CollapsedBorderValue(section()->style()->borderStart(), section()->style()->visitedDependentColor(start), BROWGROUP ));434 result = chooseBorder(result, CollapsedBorderValue(section()->style()->borderStart(), section()->style()->visitedDependentColor(start), BROWGROUP, col(), row(), BSTARTEDGE)); 418 435 if (!result.exists()) 419 436 return result; … … 425 442 RenderTableCol* colElt = table->colElement(col(), &startColEdge, &endColEdge); 426 443 if (colElt && startColEdge) { 427 result = chooseBorder(result, CollapsedBorderValue(colElt->style()->borderStart(), colElt->style()->visitedDependentColor(start), BCOL ));444 result = chooseBorder(result, CollapsedBorderValue(colElt->style()->borderStart(), colElt->style()->visitedDependentColor(start), BCOL, col(), row(), BSTARTEDGE)); 428 445 if (!result.exists()) 429 446 return result; 430 447 if (colElt->parent()->isTableCol() && !colElt->previousSibling()) { 431 result = chooseBorder(result, CollapsedBorderValue(colElt->parent()->style()->borderStart(), colElt->parent()->style()->visitedDependentColor(start), BCOLGROUP ));448 result = chooseBorder(result, CollapsedBorderValue(colElt->parent()->style()->borderStart(), colElt->parent()->style()->visitedDependentColor(start), BCOLGROUP, col(), row(), BSTARTEDGE)); 432 449 if (!result.exists()) 433 450 return result; … … 437 454 // (6) The end border of the preceding column. 438 455 if (!isStartColumn) { 439 colElt = table->colElement(col() - 1, &startColEdge, &endColEdge);456 colElt = table->colElement(col() - 1, &startColEdge, &endColEdge); 440 457 if (colElt && endColEdge) { 441 CollapsedBorderValue endBorder = CollapsedBorderValue(colElt->style()->borderEnd(), colElt->style()->visitedDependentColor(end), BCOL );458 CollapsedBorderValue endBorder = CollapsedBorderValue(colElt->style()->borderEnd(), colElt->style()->visitedDependentColor(end), BCOL, col() - 1, row(), BENDEDGE); 442 459 result = chooseBorder(endBorder, result); 443 460 if (!result.exists()) … … 446 463 } else { 447 464 // (7) The table's start border. 448 result = chooseBorder(result, CollapsedBorderValue(table->style()->borderStart(), table->style()->visitedDependentColor(start), BTABLE)); 449 if (!result.exists()) 450 return result; 451 } 452 465 result = chooseBorder(result, CollapsedBorderValue(table->style()->borderStart(), table->style()->visitedDependentColor(start), BTABLE, col(), row(), BSTARTEDGE)); 466 if (!result.exists()) 467 return result; 468 } 453 469 return result; 454 470 } … … 463 479 int start = CSSProperty::resolveDirectionAwareProperty(CSSPropertyWebkitBorderStartColor, table->style()->direction(), table->style()->writingMode()); 464 480 int end = CSSProperty::resolveDirectionAwareProperty(CSSPropertyWebkitBorderEndColor, table->style()->direction(), table->style()->writingMode()); 465 CollapsedBorderValue result = CollapsedBorderValue(style()->borderEnd(), style()->visitedDependentColor(end), BCELL );481 CollapsedBorderValue result = CollapsedBorderValue(style()->borderEnd(), style()->visitedDependentColor(end), BCELL, col(), row(), BENDEDGE); 466 482 467 483 // (2) The start border of the following cell. … … 469 485 RenderTableCell* nextCell = table->cellAfter(this); 470 486 if (nextCell && nextCell->style()) { 471 CollapsedBorderValue startBorder = CollapsedBorderValue(nextCell->style()->borderStart(), nextCell->style()->visitedDependentColor(start), BCELL );487 CollapsedBorderValue startBorder = CollapsedBorderValue(nextCell->style()->borderStart(), nextCell->style()->visitedDependentColor(start), BCELL, nextCell->col(), nextCell->row(), BSTARTEDGE); 472 488 result = chooseBorder(result, startBorder); 473 489 if (!result.exists()) … … 476 492 } else { 477 493 // (3) Our row's end border. 478 result = chooseBorder(result, CollapsedBorderValue(parent()->style()->borderEnd(), parent()->style()->visitedDependentColor(end), BROW ));494 result = chooseBorder(result, CollapsedBorderValue(parent()->style()->borderEnd(), parent()->style()->visitedDependentColor(end), BROW, col(), row(), BENDEDGE)); 479 495 if (!result.exists()) 480 496 return result; 481 497 482 498 // (4) Our row group's end border. 483 result = chooseBorder(result, CollapsedBorderValue(section()->style()->borderEnd(), section()->style()->visitedDependentColor(end), BROWGROUP ));499 result = chooseBorder(result, CollapsedBorderValue(section()->style()->borderEnd(), section()->style()->visitedDependentColor(end), BROWGROUP, col(), row(), BENDEDGE)); 484 500 if (!result.exists()) 485 501 return result; … … 491 507 RenderTableCol* colElt = table->colElement(col() + colSpan() - 1, &startColEdge, &endColEdge); 492 508 if (colElt && endColEdge) { 493 result = chooseBorder(result, CollapsedBorderValue(colElt->style()->borderEnd(), colElt->style()->visitedDependentColor(end), BCOL ));509 result = chooseBorder(result, CollapsedBorderValue(colElt->style()->borderEnd(), colElt->style()->visitedDependentColor(end), BCOL, col(), row(), BENDEDGE)); 494 510 if (!result.exists()) 495 511 return result; 496 512 if (colElt->parent()->isTableCol() && !colElt->nextSibling()) { 497 result = chooseBorder(result, CollapsedBorderValue(colElt->parent()->style()->borderEnd(), colElt->parent()->style()->visitedDependentColor(end), BCOLGROUP ));513 result = chooseBorder(result, CollapsedBorderValue(colElt->parent()->style()->borderEnd(), colElt->parent()->style()->visitedDependentColor(end), BCOLGROUP, col(), row(), BENDEDGE)); 498 514 if (!result.exists()) 499 515 return result; … … 505 521 colElt = table->colElement(col() + colSpan(), &startColEdge, &endColEdge); 506 522 if (colElt && startColEdge) { 507 CollapsedBorderValue startBorder = CollapsedBorderValue(colElt->style()->borderStart(), colElt->style()->visitedDependentColor(start), BCOL );523 CollapsedBorderValue startBorder = CollapsedBorderValue(colElt->style()->borderStart(), colElt->style()->visitedDependentColor(start), BCOL, col() + colSpan(), row(), BSTARTEDGE); 508 524 result = chooseBorder(result, startBorder); 509 525 if (!result.exists()) … … 512 528 } else { 513 529 // (7) The table's end border. 514 result = chooseBorder(result, CollapsedBorderValue(table->style()->borderEnd(), table->style()->visitedDependentColor(end), BTABLE ));530 result = chooseBorder(result, CollapsedBorderValue(table->style()->borderEnd(), table->style()->visitedDependentColor(end), BTABLE, col(), row(), BENDEDGE)); 515 531 if (!result.exists()) 516 532 return result; … … 528 544 int before = CSSProperty::resolveDirectionAwareProperty(CSSPropertyWebkitBorderBeforeColor, table->style()->direction(), table->style()->writingMode()); 529 545 int after = CSSProperty::resolveDirectionAwareProperty(CSSPropertyWebkitBorderAfterColor, table->style()->direction(), table->style()->writingMode()); 530 CollapsedBorderValue result = CollapsedBorderValue(style()->borderBefore(), style()->visitedDependentColor(before), BCELL );546 CollapsedBorderValue result = CollapsedBorderValue(style()->borderBefore(), style()->visitedDependentColor(before), BCELL, col(), row(), BBEFOREEDGE); 531 547 532 548 RenderTableCell* prevCell = table->cellAbove(this); 533 549 if (prevCell) { 534 550 // (2) A before cell's after border. 535 result = chooseBorder(CollapsedBorderValue(prevCell->style()->borderAfter(), prevCell->style()->visitedDependentColor(after), BCELL), result); 536 if (!result.exists()) 537 return result; 538 } 551 CollapsedBorderValue prevCellBorder = CollapsedBorderValue(prevCell->style()->borderAfter(), prevCell->style()->visitedDependentColor(after), BCELL, prevCell->col(), prevCell->row(), BAFTEREDGE); 552 result = chooseBorder(prevCellBorder, result); 553 if (!result.exists()) 554 return result; 555 } 556 539 557 540 558 // (3) Our row's before border. 541 result = chooseBorder(result, CollapsedBorderValue(parent()->style()->borderBefore(), parent()->style()->visitedDependentColor(before), BROW ));559 result = chooseBorder(result, CollapsedBorderValue(parent()->style()->borderBefore(), parent()->style()->visitedDependentColor(before), BROW, col(), row(), BBEFOREEDGE)); 542 560 if (!result.exists()) 543 561 return result; … … 552 570 553 571 if (prevRow) { 554 result = chooseBorder( CollapsedBorderValue(prevRow->style()->borderAfter(), prevRow->style()->visitedDependentColor(after), BROW), result);572 result = chooseBorder(result, CollapsedBorderValue(prevRow->style()->borderAfter(), prevRow->style()->visitedDependentColor(after), BROW, prevCell->col(), prevCell->row(), BAFTEREDGE)); 555 573 if (!result.exists()) 556 574 return result; … … 562 580 if (!row()) { 563 581 // (5) Our row group's before border. 564 result = chooseBorder(result, CollapsedBorderValue(currSection->style()->borderBefore(), currSection->style()->visitedDependentColor(before), BROWGROUP ));582 result = chooseBorder(result, CollapsedBorderValue(currSection->style()->borderBefore(), currSection->style()->visitedDependentColor(before), BROWGROUP, col(), row() + rowSpan(), BBEFOREEDGE)); 565 583 if (!result.exists()) 566 584 return result; … … 568 586 // (6) Previous row group's after border. 569 587 currSection = table->sectionAbove(currSection); 570 if (currSection ) {571 result = chooseBorder(CollapsedBorderValue(currSection->style()->borderAfter(), currSection->style()->visitedDependentColor(after), BROWGROUP ), result);588 if (currSection && currSection->numRows()) { 589 result = chooseBorder(CollapsedBorderValue(currSection->style()->borderAfter(), currSection->style()->visitedDependentColor(after), BROWGROUP, col(), row(), BAFTEREDGE), result); 572 590 if (!result.exists()) 573 591 return result; … … 579 597 RenderTableCol* colElt = table->colElement(col()); 580 598 if (colElt) { 581 result = chooseBorder(result, CollapsedBorderValue(colElt->style()->borderBefore(), colElt->style()->visitedDependentColor(before), BCOL ));599 result = chooseBorder(result, CollapsedBorderValue(colElt->style()->borderBefore(), colElt->style()->visitedDependentColor(before), BCOL, col(), row(), BBEFOREEDGE)); 582 600 if (!result.exists()) 583 601 return result; 584 602 if (colElt->parent()->isTableCol()) { 585 result = chooseBorder(result, CollapsedBorderValue(colElt->parent()->style()->borderBefore(), colElt->parent()->style()->visitedDependentColor(before), BCOLGROUP ));603 result = chooseBorder(result, CollapsedBorderValue(colElt->parent()->style()->borderBefore(), colElt->parent()->style()->visitedDependentColor(before), BCOLGROUP, col(), row(), BBEFOREEDGE)); 586 604 if (!result.exists()) 587 605 return result; … … 590 608 591 609 // (9) The table's before border. 592 result = chooseBorder(result, CollapsedBorderValue(table->style()->borderBefore(), table->style()->visitedDependentColor(before), BTABLE ));610 result = chooseBorder(result, CollapsedBorderValue(table->style()->borderBefore(), table->style()->visitedDependentColor(before), BTABLE, col(), row(), BBEFOREEDGE)); 593 611 if (!result.exists()) 594 612 return result; … … 606 624 int before = CSSProperty::resolveDirectionAwareProperty(CSSPropertyWebkitBorderBeforeColor, table->style()->direction(), table->style()->writingMode()); 607 625 int after = CSSProperty::resolveDirectionAwareProperty(CSSPropertyWebkitBorderAfterColor, table->style()->direction(), table->style()->writingMode()); 608 CollapsedBorderValue result = CollapsedBorderValue(style()->borderAfter(), style()->visitedDependentColor(after), BCELL );626 CollapsedBorderValue result = CollapsedBorderValue(style()->borderAfter(), style()->visitedDependentColor(after), BCELL, col(), row(), BAFTEREDGE); 609 627 610 628 RenderTableCell* nextCell = table->cellBelow(this); 611 629 if (nextCell) { 612 630 // (2) An after cell's before border. 613 result = chooseBorder(result, CollapsedBorderValue(nextCell->style()->borderBefore(), nextCell->style()->visitedDependentColor(before), BCELL ));631 result = chooseBorder(result, CollapsedBorderValue(nextCell->style()->borderBefore(), nextCell->style()->visitedDependentColor(before), BCELL, nextCell->col(), nextCell->row(), BBEFOREEDGE)); 614 632 if (!result.exists()) 615 633 return result; … … 617 635 618 636 // (3) Our row's after border. (FIXME: Deal with rowspan!) 619 result = chooseBorder(result, CollapsedBorderValue(parent()->style()->borderAfter(), parent()->style()->visitedDependentColor(after), BROW ));637 result = chooseBorder(result, CollapsedBorderValue(parent()->style()->borderAfter(), parent()->style()->visitedDependentColor(after), BROW, col(), row(), BAFTEREDGE)); 620 638 if (!result.exists()) 621 639 return result; … … 623 641 // (4) The next row's before border. 624 642 if (nextCell) { 625 result = chooseBorder(result, CollapsedBorderValue(nextCell->parent()->style()->borderBefore(), nextCell->parent()->style()->visitedDependentColor(before), BROW ));643 result = chooseBorder(result, CollapsedBorderValue(nextCell->parent()->style()->borderBefore(), nextCell->parent()->style()->visitedDependentColor(before), BROW, nextCell->col(), nextCell->row(), BBEFOREEDGE)); 626 644 if (!result.exists()) 627 645 return result; … … 632 650 if (row() + rowSpan() >= currSection->numRows()) { 633 651 // (5) Our row group's after border. 634 result = chooseBorder(result, CollapsedBorderValue(currSection->style()->borderAfter(), currSection->style()->visitedDependentColor(after), BROWGROUP ));652 result = chooseBorder(result, CollapsedBorderValue(currSection->style()->borderAfter(), currSection->style()->visitedDependentColor(after), BROWGROUP, col(), row(), BAFTEREDGE)); 635 653 if (!result.exists()) 636 654 return result; … … 639 657 currSection = table->sectionBelow(currSection); 640 658 if (currSection) { 641 result = chooseBorder(result, CollapsedBorderValue(currSection->style()->borderBefore(), currSection->style()->visitedDependentColor(before), BROWGROUP ));659 result = chooseBorder(result, CollapsedBorderValue(currSection->style()->borderBefore(), currSection->style()->visitedDependentColor(before), BROWGROUP, col(), row() + rowSpan(), BBEFOREEDGE)); 642 660 if (!result.exists()) 643 661 return result; … … 649 667 RenderTableCol* colElt = table->colElement(col()); 650 668 if (colElt) { 651 result = chooseBorder(result, CollapsedBorderValue(colElt->style()->borderAfter(), colElt->style()->visitedDependentColor(after), BCOL ));669 result = chooseBorder(result, CollapsedBorderValue(colElt->style()->borderAfter(), colElt->style()->visitedDependentColor(after), BCOL, col(), row(), BAFTEREDGE)); 652 670 if (!result.exists()) return result; 653 671 if (colElt->parent()->isTableCol()) { 654 result = chooseBorder(result, CollapsedBorderValue(colElt->parent()->style()->borderAfter(), colElt->parent()->style()->visitedDependentColor(after), BCOLGROUP ));672 result = chooseBorder(result, CollapsedBorderValue(colElt->parent()->style()->borderAfter(), colElt->parent()->style()->visitedDependentColor(after), BCOLGROUP, col(), row(), BAFTEREDGE)); 655 673 if (!result.exists()) 656 674 return result; … … 659 677 660 678 // (9) The table's after border. 661 result = chooseBorder(result, CollapsedBorderValue(table->style()->borderAfter(), table->style()->visitedDependentColor(after), BTABLE ));662 if (!result.exists()) 663 return result; 664 } 665 679 result = chooseBorder(result, CollapsedBorderValue(table->style()->borderAfter(), table->style()->visitedDependentColor(after), BTABLE, col(), row(), BAFTEREDGE)); 680 if (!result.exists()) 681 return result; 682 } 683 666 684 return result; 667 685 } -
trunk/Source/WebCore/rendering/style/CollapsedBorderValue.h
r96822 r101202 37 37 } 38 38 39 CollapsedBorderValue(const BorderValue& b, Color c, EBorderPrecedence p, unsigned rowOffset, unsigned columnOffset, EEdgePrecedence edge) 40 : m_border(b) 41 , m_borderColor(c) 42 , m_precedence(p) 43 , m_rowOffset(rowOffset) 44 , m_columnOffset(columnOffset) 45 , m_edge(edge) 46 { 47 } 48 39 49 CollapsedBorderValue(const BorderValue& b, Color c, EBorderPrecedence p) 40 50 : m_border(b) 41 51 , m_borderColor(c) 42 52 , m_precedence(p) 53 , m_rowOffset(0) 54 , m_columnOffset(0) 55 , m_edge(BAFTEREDGE) 43 56 { 44 57 } … … 50 63 bool isTransparent() const { return m_border.isTransparent(); } 51 64 EBorderPrecedence precedence() const { return m_precedence; } 65 unsigned columnOffset() const { return m_columnOffset; } 66 unsigned rowOffset() const { return m_rowOffset; } 67 EEdgePrecedence edge() const { return m_edge; } 52 68 53 69 bool operator==(const CollapsedBorderValue& o) const 54 70 { 55 return m_border == o.m_border && m_borderColor == o.m_borderColor && m_precedence == o.m_precedence ;71 return m_border == o.m_border && m_borderColor == o.m_borderColor && m_precedence == o.m_precedence && m_rowOffset == o.m_rowOffset && m_columnOffset == o.m_columnOffset && m_edge == o.m_edge; 56 72 } 57 73 … … 60 76 Color m_borderColor; 61 77 EBorderPrecedence m_precedence; 78 unsigned m_rowOffset; 79 unsigned m_columnOffset; 80 EEdgePrecedence m_edge; 62 81 }; 63 82 -
trunk/Source/WebCore/rendering/style/RenderStyleConstants.h
r100570 r101202 98 98 99 99 enum EBorderPrecedence { BOFF, BTABLE, BCOLGROUP, BCOL, BROWGROUP, BROW, BCELL }; 100 101 enum EEdgePrecedence { BAFTEREDGE, BENDEDGE, BBEFOREEDGE, BSTARTEDGE }; 100 102 101 103 enum OutlineIsAuto { AUTO_OFF = 0, AUTO_ON };
Note: See TracChangeset
for help on using the changeset viewer.