Changeset 101202 in webkit


Ignore:
Timestamp:
Nov 27, 2011 10:32:37 AM (12 years ago)
Author:
robert@webkit.org
Message:

CSS 2.1 failure: border-conflict-element-*
https://bugs.webkit.org/show_bug.cgi?id=71244

Source/WebCore:

Reviewed by Julien Chaffraix.

From http://www.w3.org/TR/CSS21/tables.html#border-conflict-resolution :

"When two adjacent cells have the same border-width and the same border-style in a
'border-collapse: collapse' table, then the color of the border from the leftmost cell wins
(if the table's 'direction' is 'ltr'; right, if it is 'rtl') and the color of the border
from the topmost cell wins."

So WebCore::compareBorders needs to account for the position of the cell when
deciding which border wins the comparison. This will ensure that the winning border is
sorted to the appropriate position in the sorted list of borders for painting.

When conflicting collapsed borders are in the same cell, the following order of
precedence is used (where 4 has highest precedence):

3

| |

4 | | 1

|_|

2

This fixes the following failing tests from the border-conflict-element-* set
in the CSS 2.1 test suite:

border-conflict-element-001d.htm
border-conflict-element-0037.htm

One test in the suite is known to be wrong, so a corrected version has been landed outside the
css2.1 folder:

border-conflict-element-002.htm

This change entails rebaselining quite a few tests, see the LayoutTests ChangeLog for a full
explanation of the rebaselines.

  • rendering/RenderTableCell.cpp:

(WebCore::compareBorders): Compare the cells' position from the left (in 'ltr') and right (in 'rtl')

of the table and the cells' position from the top of the table when nothing
else in the style, width, or grouping of the borders determines precedence.
If the conflicting borders are in the same cell, apply the same logic to the position of the borders.

(WebCore::RenderTableCell::collapsedStartBorder): Pass the cell's position and its table's direction to CollapsedBorderValue
(WebCore::RenderTableCell::collapsedEndBorder): ditto
(WebCore::RenderTableCell::collapsedBeforeBorder): ditto
(WebCore::RenderTableCell::collapsedAfterBorder): ditto

  • rendering/style/CollapsedBorderValue.h:

(WebCore::CollapsedBorderValue::CollapsedBorderValue): Learn the position of the border's cell and the direction of its table
(WebCore::CollapsedBorderValue::columnOffset): the cell's offset from the top of the table
(WebCore::CollapsedBorderValue::rowOffset): the cell's offset from the start of the table
(WebCore::CollapsedBorderValue::edge): which edge of the cell the border is on
(WebCore::CollapsedBorderValue::operator==): cells with the same position in the table are equal

LayoutTests:

Add all the passing border-conflict-element* tests from the CSS 2.1 test suite.

Add a corrected version of the CSS suite test border-conflict-element-002.htm, which can sit here until

the corrected version is landed upstream. See http://lists.w3.org/Archives/Public/public-css-testsuite/2011Nov/0002.html

Rebaseline all t170602-bdr-conflct-w-* tests. The rendering of the collapsed borders in these

tests now obeys the order of precedence for the position of the cell and the precendece of the position
of the borders within the same cell.

Rebaseline tables/mozilla/collapsing_borders/bug41262-4.html: ditto

tables/mozilla/marvin/table_rules_all.html : ditto
tables/mozilla/marvin/table_rules_none.html : ditto
tables/mozilla_expected_failures/marvin/table_rules_cols.html : ditto
tables/mozilla_expected_failures/marvin/table_rules_rows.html : ditto

Rebaseline two border-conflict-style-* tests: ditto

Rebaseline fast/borders/border-antialiasing.html, the result is too small to confirm the difference but

presume it is one of the above.

Reviewed by Julien Chaffraix.

  • css2.1/20110323/border-conflict-element-001.htm: Added.
  • css2.1/20110323/border-conflict-element-001a.htm: Added.
  • css2.1/20110323/border-conflict-element-001b.htm: Added.
  • css2.1/20110323/border-conflict-element-001c.htm: Added.
  • css2.1/20110323/border-conflict-element-001d.htm: Added.
  • css2.1/20110323/border-conflict-element-003.htm: Added.
  • css2.1/20110323/border-conflict-element-004.htm: Added.
  • css2.1/20110323/border-conflict-element-005.htm: Added.
  • css2.1/20110323/border-conflict-element-006.htm: Added.
  • css2.1/20110323/border-conflict-element-007.htm: Added.
  • css2.1/20110323/border-conflict-element-008.htm: Added.
  • css2.1/20110323/border-conflict-element-009.htm: Added.
  • css2.1/20110323/border-conflict-element-010.htm: Added.
  • css2.1/20110323/border-conflict-element-011.htm: Added.
  • css2.1/20110323/border-conflict-element-012.htm: Added.
  • css2.1/20110323/border-conflict-element-013.htm: Added.
  • css2.1/20110323/border-conflict-element-014.htm: Added.
  • css2.1/20110323/border-conflict-element-015.htm: Added.
  • css2.1/20110323/border-conflict-element-016.htm: Added.
  • css2.1/20110323/border-conflict-element-017.htm: Added.
  • css2.1/20110323/border-conflict-element-018.htm: Added.
  • css2.1/20110323/border-conflict-element-019.htm: Added.
  • css2.1/20110323/border-conflict-element-020.htm: Added.
  • css2.1/20110323/border-conflict-element-021.htm: Added.
  • css2.1/20110323/border-conflict-element-022.htm: Added.
  • css2.1/20110323/border-conflict-element-023.htm: Added.
  • css2.1/20110323/border-conflict-element-024.htm: Added.
  • css2.1/20110323/border-conflict-element-025.htm: Added.
  • css2.1/20110323/border-conflict-element-026.htm: Added.
  • css2.1/20110323/border-conflict-element-027.htm: Added.
  • css2.1/20110323/border-conflict-element-028.htm: Added.
  • css2.1/20110323/border-conflict-element-029.htm: Added.
  • css2.1/20110323/border-conflict-element-030.htm: Added.
  • css2.1/20110323/border-conflict-element-031.htm: Added.
  • css2.1/20110323/border-conflict-element-032.htm: Added.
  • css2.1/20110323/border-conflict-element-033.htm: Added.
  • css2.1/20110323/border-conflict-element-034.htm: Added.
  • css2.1/20110323/border-conflict-element-035.htm: Added.
  • css2.1/20110323/border-conflict-element-036.htm: Added.
  • css2.1/20110323/border-conflict-element-037.htm: Added.
  • css2.1/20110323/border-conflict-element-038.htm: Added.
  • css2.1/20110323/border-conflict-element-039.htm: Added.
  • css2.1/20110323/support/swatch-blue.png: Added.
  • css2.1/20110323/support/swatch-green.png: Added.
  • css2.1/20110323/support/swatch-lime.png: Added.
  • css2.1/20110323/support/swatch-orange.png: Added.
  • css2.1/20110323/support/swatch-red.png: Added.
  • css2.1/20110323/support/swatch-teal.png: Added.
  • css2.1/20110323/support/swatch-white.png: Added.
  • css2.1/20110323/support/swatch-yellow.png: Added.
  • fast/css/border-conflict-element-002.htm: Added.
  • platform/chromium-linux/css2.1/20110323/border-conflict-style-079-expected.png:
  • platform/chromium-linux/css2.1/20110323/border-conflict-style-088-expected.png:
  • platform/chromium-linux/css2.1/20110323/floating-replaced-height-008-expected.png: Addition of support/swatch-white.png rebaselines result.
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-05-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-06-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-07-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-08-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-15-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-16-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-17-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-18-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-25-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-26-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-27-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-28-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-35-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-36-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-37-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-38-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-45-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-46-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-47-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-48-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-51-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-52-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-53-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-54-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-55-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-56-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-57-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-58-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-59-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-61-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-62-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-63-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-64-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-65-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-66-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-67-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-68-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-69-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-71-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-72-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-73-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-74-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-75-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-76-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-77-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-78-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-79-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-81-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-82-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-83-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-84-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-85-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-86-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-87-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-88-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-89-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-95-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-96-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-97-d-expected.png:
  • platform/chromium-linux/css2.1/t170602-bdr-conflct-w-98-d-expected.png:
  • platform/chromium-linux/fast/borders/border-antialiasing-expected.png:
  • platform/chromium-linux/tables/mozilla/collapsing_borders/bug41262-4-expected.png:
  • platform/chromium-linux/tables/mozilla/marvin/table_rules_all-expected.png:
  • platform/chromium-linux/tables/mozilla/marvin/table_rules_none-expected.png:
  • platform/chromium-linux/tables/mozilla_expected_failures/marvin/table_rules_cols-expected.png:
  • platform/chromium-linux/tables/mozilla_expected_failures/marvin/table_rules_rows-expected.png:
  • platform/chromium/css2.1/20110323/border-conflict-element-001-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-001-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-001a-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-001a-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-001b-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-001b-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-001c-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-001c-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-001d-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-001d-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-003-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-003-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-004-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-004-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-005-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-005-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-006-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-006-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-007-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-007-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-008-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-008-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-009-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-009-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-010-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-010-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-011-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-011-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-012-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-012-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-013-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-013-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-014-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-014-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-015-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-015-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-016-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-016-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-017-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-017-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-018-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-018-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-019-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-019-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-020-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-020-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-021-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-021-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-022-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-022-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-023-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-023-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-024-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-024-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-025-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-025-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-026-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-026-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-027-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-027-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-028-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-028-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-029-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-029-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-030-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-030-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-031-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-031-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-032-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-032-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-033-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-033-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-034-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-034-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-035-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-035-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-036-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-036-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-037-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-037-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-038-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-038-expected.txt: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-039-expected.png: Added.
  • platform/chromium/css2.1/20110323/border-conflict-element-039-expected.txt: Added.
  • platform/chromium/fast/css/border-conflict-element-002-expected.png: Added.
  • platform/chromium/fast/css/border-conflict-element-002-expected.txt: Added.
Location:
trunk
Files:
137 added
74 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r101200 r101202  
     12011-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
    12352011-11-27  Lauro Neto  <lauro.neto@openbossa.org>
    2236
  • trunk/Source/WebCore/ChangeLog

    r101201 r101202  
     12011-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
    1552011-11-26  Pavel Feldman  <pfeldman@google.com>
    256
  • trunk/Source/WebCore/rendering/RenderTableCell.cpp

    r100386 r101202  
    340340// in this order: 'double', 'solid', 'dashed', 'dotted', 'ridge', 'outset', 'groove', and the lowest: 'inset'.
    341341// (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.
    344345static int compareBorders(const CollapsedBorderValue& border1, const CollapsedBorderValue& border2)
    345346{
     
    378379    if (border1.style() != border2.style())
    379380        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())
    383399        return 0;
    384     return border1.precedence() < border2.precedence() ? -1 : 1;
     400    return border1.edge() < border2.edge() ? -1 : 1;
    385401}
    386402
     
    400416    int start = CSSProperty::resolveDirectionAwareProperty(CSSPropertyWebkitBorderStartColor, table->style()->direction(), table->style()->writingMode());
    401417    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);
    403419
    404420    // (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);
    407424        result = chooseBorder(prevCellBorder, result);
    408425        if (!result.exists())
     
    410427    } else if (isStartColumn) {
    411428        // (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
    416433        // (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));
    418435        if (!result.exists())
    419436            return result;
     
    425442    RenderTableCol* colElt = table->colElement(col(), &startColEdge, &endColEdge);
    426443    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));
    428445        if (!result.exists())
    429446            return result;
    430447        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));
    432449            if (!result.exists())
    433450                return result;
     
    437454    // (6) The end border of the preceding column.
    438455    if (!isStartColumn) {
    439         colElt = table->colElement(col() -1, &startColEdge, &endColEdge);
     456        colElt = table->colElement(col() - 1, &startColEdge, &endColEdge);
    440457        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);
    442459            result = chooseBorder(endBorder, result);
    443460            if (!result.exists())
     
    446463    } else {
    447464        // (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    }
    453469    return result;
    454470}
     
    463479    int start = CSSProperty::resolveDirectionAwareProperty(CSSPropertyWebkitBorderStartColor, table->style()->direction(), table->style()->writingMode());
    464480    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);
    466482   
    467483    // (2) The start border of the following cell.
     
    469485        RenderTableCell* nextCell = table->cellAfter(this);
    470486        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);
    472488            result = chooseBorder(result, startBorder);
    473489            if (!result.exists())
     
    476492    } else {
    477493        // (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));
    479495        if (!result.exists())
    480496            return result;
    481497       
    482498        // (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));
    484500        if (!result.exists())
    485501            return result;
     
    491507    RenderTableCol* colElt = table->colElement(col() + colSpan() - 1, &startColEdge, &endColEdge);
    492508    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));
    494510        if (!result.exists())
    495511            return result;
    496512        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));
    498514            if (!result.exists())
    499515                return result;
     
    505521        colElt = table->colElement(col() + colSpan(), &startColEdge, &endColEdge);
    506522        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);
    508524            result = chooseBorder(result, startBorder);
    509525            if (!result.exists())
     
    512528    } else {
    513529        // (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));
    515531        if (!result.exists())
    516532            return result;
     
    528544    int before = CSSProperty::resolveDirectionAwareProperty(CSSPropertyWebkitBorderBeforeColor, table->style()->direction(), table->style()->writingMode());
    529545    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);
    531547   
    532548    RenderTableCell* prevCell = table->cellAbove(this);
    533549    if (prevCell) {
    534550        // (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
    539557   
    540558    // (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));
    542560    if (!result.exists())
    543561        return result;
     
    552570   
    553571        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));
    555573            if (!result.exists())
    556574                return result;
     
    562580    if (!row()) {
    563581        // (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));
    565583        if (!result.exists())
    566584            return result;
     
    568586        // (6) Previous row group's after border.
    569587        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);
    572590            if (!result.exists())
    573591                return result;
     
    579597        RenderTableCol* colElt = table->colElement(col());
    580598        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));
    582600            if (!result.exists())
    583601                return result;
    584602            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));
    586604                if (!result.exists())
    587605                    return result;
     
    590608       
    591609        // (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));
    593611        if (!result.exists())
    594612            return result;
     
    606624    int before = CSSProperty::resolveDirectionAwareProperty(CSSPropertyWebkitBorderBeforeColor, table->style()->direction(), table->style()->writingMode());
    607625    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);
    609627   
    610628    RenderTableCell* nextCell = table->cellBelow(this);
    611629    if (nextCell) {
    612630        // (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));
    614632        if (!result.exists())
    615633            return result;
     
    617635   
    618636    // (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));
    620638    if (!result.exists())
    621639        return result;
     
    623641    // (4) The next row's before border.
    624642    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));
    626644        if (!result.exists())
    627645            return result;
     
    632650    if (row() + rowSpan() >= currSection->numRows()) {
    633651        // (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));
    635653        if (!result.exists())
    636654            return result;
     
    639657        currSection = table->sectionBelow(currSection);
    640658        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));
    642660            if (!result.exists())
    643661                return result;
     
    649667        RenderTableCol* colElt = table->colElement(col());
    650668        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));
    652670            if (!result.exists()) return result;
    653671            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));
    655673                if (!result.exists())
    656674                    return result;
     
    659677       
    660678        // (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   
    666684    return result;   
    667685}
  • trunk/Source/WebCore/rendering/style/CollapsedBorderValue.h

    r96822 r101202  
    3737    }
    3838
     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
    3949    CollapsedBorderValue(const BorderValue& b, Color c, EBorderPrecedence p)
    4050        : m_border(b)
    4151        , m_borderColor(c)
    4252        , m_precedence(p)
     53        , m_rowOffset(0)
     54        , m_columnOffset(0)
     55        , m_edge(BAFTEREDGE)
    4356    {
    4457    }
     
    5063    bool isTransparent() const { return m_border.isTransparent(); }
    5164    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; }
    5268
    5369    bool operator==(const CollapsedBorderValue& o) const
    5470    {
    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;
    5672    }
    5773
     
    6076    Color m_borderColor;
    6177    EBorderPrecedence m_precedence;
     78    unsigned m_rowOffset;
     79    unsigned m_columnOffset;
     80    EEdgePrecedence m_edge;
    6281};
    6382
  • trunk/Source/WebCore/rendering/style/RenderStyleConstants.h

    r100570 r101202  
    9898
    9999enum EBorderPrecedence { BOFF, BTABLE, BCOLGROUP, BCOL, BROWGROUP, BROW, BCELL };
     100
     101enum EEdgePrecedence { BAFTEREDGE, BENDEDGE, BBEFOREEDGE, BSTARTEDGE };
    100102
    101103enum OutlineIsAuto { AUTO_OFF = 0, AUTO_ON };
Note: See TracChangeset for help on using the changeset viewer.