| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) | 2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) |
| 3 * (C) 1997 Torben Weis (weis@kde.org) | 3 * (C) 1997 Torben Weis (weis@kde.org) |
| 4 * (C) 1998 Waldo Bastian (bastian@kde.org) | 4 * (C) 1998 Waldo Bastian (bastian@kde.org) |
| 5 * (C) 1999 Lars Knoll (knoll@kde.org) | 5 * (C) 1999 Lars Knoll (knoll@kde.org) |
| 6 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 6 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. | 7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 } | 493 } |
| 494 | 494 |
| 495 CollapsedBorderValue RenderTableCell::computeCollapsedStartBorder(IncludeBorderC
olorOrNot includeColor) const | 495 CollapsedBorderValue RenderTableCell::computeCollapsedStartBorder(IncludeBorderC
olorOrNot includeColor) const |
| 496 { | 496 { |
| 497 RenderTable* table = this->table(); | 497 RenderTable* table = this->table(); |
| 498 | 498 |
| 499 // For the start border, we need to check, in order of precedence: | 499 // For the start border, we need to check, in order of precedence: |
| 500 // (1) Our start border. | 500 // (1) Our start border. |
| 501 int startColorProperty = includeColor ? CSSProperty::resolveDirectionAwarePr
operty(CSSPropertyWebkitBorderStartColor, styleForCellFlow()->direction(), style
ForCellFlow()->writingMode()) : 0; | 501 int startColorProperty = includeColor ? CSSProperty::resolveDirectionAwarePr
operty(CSSPropertyWebkitBorderStartColor, styleForCellFlow()->direction(), style
ForCellFlow()->writingMode()) : 0; |
| 502 int endColorProperty = includeColor ? CSSProperty::resolveDirectionAwareProp
erty(CSSPropertyWebkitBorderEndColor, styleForCellFlow()->direction(), styleForC
ellFlow()->writingMode()) : 0; | 502 int endColorProperty = includeColor ? CSSProperty::resolveDirectionAwareProp
erty(CSSPropertyWebkitBorderEndColor, styleForCellFlow()->direction(), styleForC
ellFlow()->writingMode()) : 0; |
| 503 CollapsedBorderValue result(style()->borderStart(), includeColor ? style()->
visitedDependentColor(startColorProperty) : Color(), BCELL); | 503 CollapsedBorderValue result(style()->borderStart(), includeColor ? resolveCo
lor(startColorProperty) : Color(), BCELL); |
| 504 | 504 |
| 505 // (2) The end border of the preceding cell. | 505 // (2) The end border of the preceding cell. |
| 506 RenderTableCell* cellBefore = table->cellBefore(this); | 506 RenderTableCell* cellBefore = table->cellBefore(this); |
| 507 if (cellBefore) { | 507 if (cellBefore) { |
| 508 CollapsedBorderValue cellBeforeAdjoiningBorder = CollapsedBorderValue(ce
llBefore->borderAdjoiningCellAfter(this), includeColor ? cellBefore->style()->vi
sitedDependentColor(endColorProperty) : Color(), BCELL); | 508 CollapsedBorderValue cellBeforeAdjoiningBorder = CollapsedBorderValue(ce
llBefore->borderAdjoiningCellAfter(this), includeColor ? cellBefore->resolveColo
r(endColorProperty) : Color(), BCELL); |
| 509 // |result| should be the 2nd argument as |cellBefore| should win in cas
e of equality per CSS 2.1 (Border conflict resolution, point 4). | 509 // |result| should be the 2nd argument as |cellBefore| should win in cas
e of equality per CSS 2.1 (Border conflict resolution, point 4). |
| 510 result = chooseBorder(cellBeforeAdjoiningBorder, result); | 510 result = chooseBorder(cellBeforeAdjoiningBorder, result); |
| 511 if (!result.exists()) | 511 if (!result.exists()) |
| 512 return result; | 512 return result; |
| 513 } | 513 } |
| 514 | 514 |
| 515 bool startBorderAdjoinsTable = hasStartBorderAdjoiningTable(); | 515 bool startBorderAdjoinsTable = hasStartBorderAdjoiningTable(); |
| 516 if (startBorderAdjoinsTable) { | 516 if (startBorderAdjoinsTable) { |
| 517 // (3) Our row's start border. | 517 // (3) Our row's start border. |
| 518 result = chooseBorder(result, CollapsedBorderValue(row()->borderAdjoinin
gStartCell(this), includeColor ? parent()->style()->visitedDependentColor(startC
olorProperty) : Color(), BROW)); | 518 result = chooseBorder(result, CollapsedBorderValue(row()->borderAdjoinin
gStartCell(this), includeColor ? parent()->resolveColor(startColorProperty) : Co
lor(), BROW)); |
| 519 if (!result.exists()) | 519 if (!result.exists()) |
| 520 return result; | 520 return result; |
| 521 | 521 |
| 522 // (4) Our row group's start border. | 522 // (4) Our row group's start border. |
| 523 result = chooseBorder(result, CollapsedBorderValue(section()->borderAdjo
iningStartCell(this), includeColor ? section()->style()->visitedDependentColor(s
tartColorProperty) : Color(), BROWGROUP)); | 523 result = chooseBorder(result, CollapsedBorderValue(section()->borderAdjo
iningStartCell(this), includeColor ? section()->resolveColor(startColorProperty)
: Color(), BROWGROUP)); |
| 524 if (!result.exists()) | 524 if (!result.exists()) |
| 525 return result; | 525 return result; |
| 526 } | 526 } |
| 527 | 527 |
| 528 // (5) Our column and column group's start borders. | 528 // (5) Our column and column group's start borders. |
| 529 bool startColEdge; | 529 bool startColEdge; |
| 530 bool endColEdge; | 530 bool endColEdge; |
| 531 if (RenderTableCol* colElt = table->colElement(col(), &startColEdge, &endCol
Edge)) { | 531 if (RenderTableCol* colElt = table->colElement(col(), &startColEdge, &endCol
Edge)) { |
| 532 if (colElt->isTableColumnGroup() && startColEdge) { | 532 if (colElt->isTableColumnGroup() && startColEdge) { |
| 533 // The |colElt| is a column group and is also the first colgroup (in
case of spanned colgroups). | 533 // The |colElt| is a column group and is also the first colgroup (in
case of spanned colgroups). |
| 534 result = chooseBorder(result, CollapsedBorderValue(colElt->borderAdj
oiningCellStartBorder(this), includeColor ? colElt->style()->visitedDependentCol
or(startColorProperty) : Color(), BCOLGROUP)); | 534 result = chooseBorder(result, CollapsedBorderValue(colElt->borderAdj
oiningCellStartBorder(this), includeColor ? colElt->resolveColor(startColorPrope
rty) : Color(), BCOLGROUP)); |
| 535 if (!result.exists()) | 535 if (!result.exists()) |
| 536 return result; | 536 return result; |
| 537 } else if (!colElt->isTableColumnGroup()) { | 537 } else if (!colElt->isTableColumnGroup()) { |
| 538 // We first consider the |colElt| and irrespective of whether it is
a spanned col or not, we apply | 538 // We first consider the |colElt| and irrespective of whether it is
a spanned col or not, we apply |
| 539 // its start border. This is as per HTML5 which states that: "For th
e purposes of the CSS table model, | 539 // its start border. This is as per HTML5 which states that: "For th
e purposes of the CSS table model, |
| 540 // the col element is expected to be treated as if it was present as
many times as its span attribute specifies". | 540 // the col element is expected to be treated as if it was present as
many times as its span attribute specifies". |
| 541 result = chooseBorder(result, CollapsedBorderValue(colElt->borderAdj
oiningCellStartBorder(this), includeColor ? colElt->style()->visitedDependentCol
or(startColorProperty) : Color(), BCOL)); | 541 result = chooseBorder(result, CollapsedBorderValue(colElt->borderAdj
oiningCellStartBorder(this), includeColor ? colElt->resolveColor(startColorPrope
rty) : Color(), BCOL)); |
| 542 if (!result.exists()) | 542 if (!result.exists()) |
| 543 return result; | 543 return result; |
| 544 // Next, apply the start border of the enclosing colgroup but only i
f it is adjacent to the cell's edge. | 544 // Next, apply the start border of the enclosing colgroup but only i
f it is adjacent to the cell's edge. |
| 545 if (RenderTableCol* enclosingColumnGroup = colElt->enclosingColumnGr
oupIfAdjacentBefore()) { | 545 if (RenderTableCol* enclosingColumnGroup = colElt->enclosingColumnGr
oupIfAdjacentBefore()) { |
| 546 result = chooseBorder(result, CollapsedBorderValue(enclosingColu
mnGroup->borderAdjoiningCellStartBorder(this), includeColor ? enclosingColumnGro
up->style()->visitedDependentColor(startColorProperty) : Color(), BCOLGROUP)); | 546 result = chooseBorder(result, CollapsedBorderValue(enclosingColu
mnGroup->borderAdjoiningCellStartBorder(this), includeColor ? enclosingColumnGro
up->resolveColor(startColorProperty) : Color(), BCOLGROUP)); |
| 547 if (!result.exists()) | 547 if (!result.exists()) |
| 548 return result; | 548 return result; |
| 549 } | 549 } |
| 550 } | 550 } |
| 551 } | 551 } |
| 552 | 552 |
| 553 // (6) The end border of the preceding column. | 553 // (6) The end border of the preceding column. |
| 554 if (cellBefore) { | 554 if (cellBefore) { |
| 555 if (RenderTableCol* colElt = table->colElement(col() - 1, &startColEdge,
&endColEdge)) { | 555 if (RenderTableCol* colElt = table->colElement(col() - 1, &startColEdge,
&endColEdge)) { |
| 556 if (colElt->isTableColumnGroup() && endColEdge) { | 556 if (colElt->isTableColumnGroup() && endColEdge) { |
| 557 // The element is a colgroup and is also the last colgroup (in c
ase of spanned colgroups). | 557 // The element is a colgroup and is also the last colgroup (in c
ase of spanned colgroups). |
| 558 result = chooseBorder(CollapsedBorderValue(colElt->borderAdjoini
ngCellAfter(this), includeColor ? colElt->style()->visitedDependentColor(endColo
rProperty) : Color(), BCOLGROUP), result); | 558 result = chooseBorder(CollapsedBorderValue(colElt->borderAdjoini
ngCellAfter(this), includeColor ? colElt->resolveColor(endColorProperty) : Color
(), BCOLGROUP), result); |
| 559 if (!result.exists()) | 559 if (!result.exists()) |
| 560 return result; | 560 return result; |
| 561 } else if (colElt->isTableColumn()) { | 561 } else if (colElt->isTableColumn()) { |
| 562 // Resolve the collapsing border against the col's border ignori
ng any 'span' as per HTML5. | 562 // Resolve the collapsing border against the col's border ignori
ng any 'span' as per HTML5. |
| 563 result = chooseBorder(CollapsedBorderValue(colElt->borderAdjoini
ngCellAfter(this), includeColor ? colElt->style()->visitedDependentColor(endColo
rProperty) : Color(), BCOL), result); | 563 result = chooseBorder(CollapsedBorderValue(colElt->borderAdjoini
ngCellAfter(this), includeColor ? colElt->resolveColor(endColorProperty) : Color
(), BCOL), result); |
| 564 if (!result.exists()) | 564 if (!result.exists()) |
| 565 return result; | 565 return result; |
| 566 // Next, if the previous col has a parent colgroup then its end
border should be applied | 566 // Next, if the previous col has a parent colgroup then its end
border should be applied |
| 567 // but only if it is adjacent to the cell's edge. | 567 // but only if it is adjacent to the cell's edge. |
| 568 if (RenderTableCol* enclosingColumnGroup = colElt->enclosingColu
mnGroupIfAdjacentAfter()) { | 568 if (RenderTableCol* enclosingColumnGroup = colElt->enclosingColu
mnGroupIfAdjacentAfter()) { |
| 569 result = chooseBorder(CollapsedBorderValue(enclosingColumnGr
oup->borderAdjoiningCellEndBorder(this), includeColor ? enclosingColumnGroup->st
yle()->visitedDependentColor(endColorProperty) : Color(), BCOLGROUP), result); | 569 result = chooseBorder(CollapsedBorderValue(enclosingColumnGr
oup->borderAdjoiningCellEndBorder(this), includeColor ? enclosingColumnGroup->re
solveColor(endColorProperty) : Color(), BCOLGROUP), result); |
| 570 if (!result.exists()) | 570 if (!result.exists()) |
| 571 return result; | 571 return result; |
| 572 } | 572 } |
| 573 } | 573 } |
| 574 } | 574 } |
| 575 } | 575 } |
| 576 | 576 |
| 577 if (startBorderAdjoinsTable) { | 577 if (startBorderAdjoinsTable) { |
| 578 // (7) The table's start border. | 578 // (7) The table's start border. |
| 579 result = chooseBorder(result, CollapsedBorderValue(table->tableStartBord
erAdjoiningCell(this), includeColor ? table->style()->visitedDependentColor(star
tColorProperty) : Color(), BTABLE)); | 579 result = chooseBorder(result, CollapsedBorderValue(table->tableStartBord
erAdjoiningCell(this), includeColor ? table->resolveColor(startColorProperty) :
Color(), BTABLE)); |
| 580 if (!result.exists()) | 580 if (!result.exists()) |
| 581 return result; | 581 return result; |
| 582 } | 582 } |
| 583 | 583 |
| 584 return result; | 584 return result; |
| 585 } | 585 } |
| 586 | 586 |
| 587 CollapsedBorderValue RenderTableCell::collapsedEndBorder(IncludeBorderColorOrNot
includeColor) const | 587 CollapsedBorderValue RenderTableCell::collapsedEndBorder(IncludeBorderColorOrNot
includeColor) const |
| 588 { | 588 { |
| 589 CollapsedBorderValue result = computeCollapsedEndBorder(includeColor); | 589 CollapsedBorderValue result = computeCollapsedEndBorder(includeColor); |
| 590 if (includeColor) | 590 if (includeColor) |
| 591 section()->setCachedCollapsedBorder(this, CBSEnd, result); | 591 section()->setCachedCollapsedBorder(this, CBSEnd, result); |
| 592 return result; | 592 return result; |
| 593 } | 593 } |
| 594 | 594 |
| 595 CollapsedBorderValue RenderTableCell::computeCollapsedEndBorder(IncludeBorderCol
orOrNot includeColor) const | 595 CollapsedBorderValue RenderTableCell::computeCollapsedEndBorder(IncludeBorderCol
orOrNot includeColor) const |
| 596 { | 596 { |
| 597 RenderTable* table = this->table(); | 597 RenderTable* table = this->table(); |
| 598 // Note: We have to use the effective column information instead of whether
we have a cell after as a table doesn't | 598 // Note: We have to use the effective column information instead of whether
we have a cell after as a table doesn't |
| 599 // have to be regular (any row can have less cells than the total cell count
). | 599 // have to be regular (any row can have less cells than the total cell count
). |
| 600 bool isEndColumn = table->colToEffCol(col() + colSpan() - 1) == table->numEf
fCols() - 1; | 600 bool isEndColumn = table->colToEffCol(col() + colSpan() - 1) == table->numEf
fCols() - 1; |
| 601 | 601 |
| 602 // For end border, we need to check, in order of precedence: | 602 // For end border, we need to check, in order of precedence: |
| 603 // (1) Our end border. | 603 // (1) Our end border. |
| 604 int startColorProperty = includeColor ? CSSProperty::resolveDirectionAwarePr
operty(CSSPropertyWebkitBorderStartColor, styleForCellFlow()->direction(), style
ForCellFlow()->writingMode()) : 0; | 604 int startColorProperty = includeColor ? CSSProperty::resolveDirectionAwarePr
operty(CSSPropertyWebkitBorderStartColor, styleForCellFlow()->direction(), style
ForCellFlow()->writingMode()) : 0; |
| 605 int endColorProperty = includeColor ? CSSProperty::resolveDirectionAwareProp
erty(CSSPropertyWebkitBorderEndColor, styleForCellFlow()->direction(), styleForC
ellFlow()->writingMode()) : 0; | 605 int endColorProperty = includeColor ? CSSProperty::resolveDirectionAwareProp
erty(CSSPropertyWebkitBorderEndColor, styleForCellFlow()->direction(), styleForC
ellFlow()->writingMode()) : 0; |
| 606 CollapsedBorderValue result = CollapsedBorderValue(style()->borderEnd(), inc
ludeColor ? style()->visitedDependentColor(endColorProperty) : Color(), BCELL); | 606 CollapsedBorderValue result = CollapsedBorderValue(style()->borderEnd(), inc
ludeColor ? resolveColor(endColorProperty) : Color(), BCELL); |
| 607 | 607 |
| 608 // (2) The start border of the following cell. | 608 // (2) The start border of the following cell. |
| 609 if (!isEndColumn) { | 609 if (!isEndColumn) { |
| 610 if (RenderTableCell* cellAfter = table->cellAfter(this)) { | 610 if (RenderTableCell* cellAfter = table->cellAfter(this)) { |
| 611 CollapsedBorderValue cellAfterAdjoiningBorder = CollapsedBorderValue
(cellAfter->borderAdjoiningCellBefore(this), includeColor ? cellAfter->style()->
visitedDependentColor(startColorProperty) : Color(), BCELL); | 611 CollapsedBorderValue cellAfterAdjoiningBorder = CollapsedBorderValue
(cellAfter->borderAdjoiningCellBefore(this), includeColor ? cellAfter->resolveCo
lor(startColorProperty) : Color(), BCELL); |
| 612 result = chooseBorder(result, cellAfterAdjoiningBorder); | 612 result = chooseBorder(result, cellAfterAdjoiningBorder); |
| 613 if (!result.exists()) | 613 if (!result.exists()) |
| 614 return result; | 614 return result; |
| 615 } | 615 } |
| 616 } | 616 } |
| 617 | 617 |
| 618 bool endBorderAdjoinsTable = hasEndBorderAdjoiningTable(); | 618 bool endBorderAdjoinsTable = hasEndBorderAdjoiningTable(); |
| 619 if (endBorderAdjoinsTable) { | 619 if (endBorderAdjoinsTable) { |
| 620 // (3) Our row's end border. | 620 // (3) Our row's end border. |
| 621 result = chooseBorder(result, CollapsedBorderValue(row()->borderAdjoinin
gEndCell(this), includeColor ? parent()->style()->visitedDependentColor(endColor
Property) : Color(), BROW)); | 621 result = chooseBorder(result, CollapsedBorderValue(row()->borderAdjoinin
gEndCell(this), includeColor ? parent()->resolveColor(endColorProperty) : Color(
), BROW)); |
| 622 if (!result.exists()) | 622 if (!result.exists()) |
| 623 return result; | 623 return result; |
| 624 | 624 |
| 625 // (4) Our row group's end border. | 625 // (4) Our row group's end border. |
| 626 result = chooseBorder(result, CollapsedBorderValue(section()->borderAdjo
iningEndCell(this), includeColor ? section()->style()->visitedDependentColor(end
ColorProperty) : Color(), BROWGROUP)); | 626 result = chooseBorder(result, CollapsedBorderValue(section()->borderAdjo
iningEndCell(this), includeColor ? section()->resolveColor(endColorProperty) : C
olor(), BROWGROUP)); |
| 627 if (!result.exists()) | 627 if (!result.exists()) |
| 628 return result; | 628 return result; |
| 629 } | 629 } |
| 630 | 630 |
| 631 // (5) Our column and column group's end borders. | 631 // (5) Our column and column group's end borders. |
| 632 bool startColEdge; | 632 bool startColEdge; |
| 633 bool endColEdge; | 633 bool endColEdge; |
| 634 if (RenderTableCol* colElt = table->colElement(col() + colSpan() - 1, &start
ColEdge, &endColEdge)) { | 634 if (RenderTableCol* colElt = table->colElement(col() + colSpan() - 1, &start
ColEdge, &endColEdge)) { |
| 635 if (colElt->isTableColumnGroup() && endColEdge) { | 635 if (colElt->isTableColumnGroup() && endColEdge) { |
| 636 // The element is a colgroup and is also the last colgroup (in case
of spanned colgroups). | 636 // The element is a colgroup and is also the last colgroup (in case
of spanned colgroups). |
| 637 result = chooseBorder(result, CollapsedBorderValue(colElt->borderAdj
oiningCellEndBorder(this), includeColor ? colElt->style()->visitedDependentColor
(endColorProperty) : Color(), BCOLGROUP)); | 637 result = chooseBorder(result, CollapsedBorderValue(colElt->borderAdj
oiningCellEndBorder(this), includeColor ? colElt->resolveColor(endColorProperty)
: Color(), BCOLGROUP)); |
| 638 if (!result.exists()) | 638 if (!result.exists()) |
| 639 return result; | 639 return result; |
| 640 } else if (!colElt->isTableColumnGroup()) { | 640 } else if (!colElt->isTableColumnGroup()) { |
| 641 // First apply the end border of the column irrespective of whether
it is spanned or not. This is as per | 641 // First apply the end border of the column irrespective of whether
it is spanned or not. This is as per |
| 642 // HTML5 which states that: "For the purposes of the CSS table model
, the col element is expected to be | 642 // HTML5 which states that: "For the purposes of the CSS table model
, the col element is expected to be |
| 643 // treated as if it was present as many times as its span attribute
specifies". | 643 // treated as if it was present as many times as its span attribute
specifies". |
| 644 result = chooseBorder(result, CollapsedBorderValue(colElt->borderAdj
oiningCellEndBorder(this), includeColor ? colElt->style()->visitedDependentColor
(endColorProperty) : Color(), BCOL)); | 644 result = chooseBorder(result, CollapsedBorderValue(colElt->borderAdj
oiningCellEndBorder(this), includeColor ? colElt->resolveColor(endColorProperty)
: Color(), BCOL)); |
| 645 if (!result.exists()) | 645 if (!result.exists()) |
| 646 return result; | 646 return result; |
| 647 // Next, if it has a parent colgroup then we apply its end border bu
t only if it is adjacent to the cell. | 647 // Next, if it has a parent colgroup then we apply its end border bu
t only if it is adjacent to the cell. |
| 648 if (RenderTableCol* enclosingColumnGroup = colElt->enclosingColumnGr
oupIfAdjacentAfter()) { | 648 if (RenderTableCol* enclosingColumnGroup = colElt->enclosingColumnGr
oupIfAdjacentAfter()) { |
| 649 result = chooseBorder(result, CollapsedBorderValue(enclosingColu
mnGroup->borderAdjoiningCellEndBorder(this), includeColor ? enclosingColumnGroup
->style()->visitedDependentColor(endColorProperty) : Color(), BCOLGROUP)); | 649 result = chooseBorder(result, CollapsedBorderValue(enclosingColu
mnGroup->borderAdjoiningCellEndBorder(this), includeColor ? enclosingColumnGroup
->resolveColor(endColorProperty) : Color(), BCOLGROUP)); |
| 650 if (!result.exists()) | 650 if (!result.exists()) |
| 651 return result; | 651 return result; |
| 652 } | 652 } |
| 653 } | 653 } |
| 654 } | 654 } |
| 655 | 655 |
| 656 // (6) The start border of the next column. | 656 // (6) The start border of the next column. |
| 657 if (!isEndColumn) { | 657 if (!isEndColumn) { |
| 658 if (RenderTableCol* colElt = table->colElement(col() + colSpan(), &start
ColEdge, &endColEdge)) { | 658 if (RenderTableCol* colElt = table->colElement(col() + colSpan(), &start
ColEdge, &endColEdge)) { |
| 659 if (colElt->isTableColumnGroup() && startColEdge) { | 659 if (colElt->isTableColumnGroup() && startColEdge) { |
| 660 // This case is a colgroup without any col, we only compute it i
f it is adjacent to the cell's edge. | 660 // This case is a colgroup without any col, we only compute it i
f it is adjacent to the cell's edge. |
| 661 result = chooseBorder(result, CollapsedBorderValue(colElt->borde
rAdjoiningCellBefore(this), includeColor ? colElt->style()->visitedDependentColo
r(startColorProperty) : Color(), BCOLGROUP)); | 661 result = chooseBorder(result, CollapsedBorderValue(colElt->borde
rAdjoiningCellBefore(this), includeColor ? colElt->resolveColor(startColorProper
ty) : Color(), BCOLGROUP)); |
| 662 if (!result.exists()) | 662 if (!result.exists()) |
| 663 return result; | 663 return result; |
| 664 } else if (colElt->isTableColumn()) { | 664 } else if (colElt->isTableColumn()) { |
| 665 // Resolve the collapsing border against the col's border ignori
ng any 'span' as per HTML5. | 665 // Resolve the collapsing border against the col's border ignori
ng any 'span' as per HTML5. |
| 666 result = chooseBorder(result, CollapsedBorderValue(colElt->borde
rAdjoiningCellBefore(this), includeColor ? colElt->style()->visitedDependentColo
r(startColorProperty) : Color(), BCOL)); | 666 result = chooseBorder(result, CollapsedBorderValue(colElt->borde
rAdjoiningCellBefore(this), includeColor ? colElt->resolveColor(startColorProper
ty) : Color(), BCOL)); |
| 667 if (!result.exists()) | 667 if (!result.exists()) |
| 668 return result; | 668 return result; |
| 669 // If we have a parent colgroup, resolve the border only if it i
s adjacent to the cell. | 669 // If we have a parent colgroup, resolve the border only if it i
s adjacent to the cell. |
| 670 if (RenderTableCol* enclosingColumnGroup = colElt->enclosingColu
mnGroupIfAdjacentBefore()) { | 670 if (RenderTableCol* enclosingColumnGroup = colElt->enclosingColu
mnGroupIfAdjacentBefore()) { |
| 671 result = chooseBorder(result, CollapsedBorderValue(enclosing
ColumnGroup->borderAdjoiningCellStartBorder(this), includeColor ? enclosingColum
nGroup->style()->visitedDependentColor(startColorProperty) : Color(), BCOLGROUP)
); | 671 result = chooseBorder(result, CollapsedBorderValue(enclosing
ColumnGroup->borderAdjoiningCellStartBorder(this), includeColor ? enclosingColum
nGroup->resolveColor(startColorProperty) : Color(), BCOLGROUP)); |
| 672 if (!result.exists()) | 672 if (!result.exists()) |
| 673 return result; | 673 return result; |
| 674 } | 674 } |
| 675 } | 675 } |
| 676 } | 676 } |
| 677 } | 677 } |
| 678 | 678 |
| 679 if (endBorderAdjoinsTable) { | 679 if (endBorderAdjoinsTable) { |
| 680 // (7) The table's end border. | 680 // (7) The table's end border. |
| 681 result = chooseBorder(result, CollapsedBorderValue(table->tableEndBorder
AdjoiningCell(this), includeColor ? table->style()->visitedDependentColor(endCol
orProperty) : Color(), BTABLE)); | 681 result = chooseBorder(result, CollapsedBorderValue(table->tableEndBorder
AdjoiningCell(this), includeColor ? table->resolveColor(endColorProperty) : Colo
r(), BTABLE)); |
| 682 if (!result.exists()) | 682 if (!result.exists()) |
| 683 return result; | 683 return result; |
| 684 } | 684 } |
| 685 | 685 |
| 686 return result; | 686 return result; |
| 687 } | 687 } |
| 688 | 688 |
| 689 CollapsedBorderValue RenderTableCell::collapsedBeforeBorder(IncludeBorderColorOr
Not includeColor) const | 689 CollapsedBorderValue RenderTableCell::collapsedBeforeBorder(IncludeBorderColorOr
Not includeColor) const |
| 690 { | 690 { |
| 691 CollapsedBorderValue result = computeCollapsedBeforeBorder(includeColor); | 691 CollapsedBorderValue result = computeCollapsedBeforeBorder(includeColor); |
| 692 if (includeColor) | 692 if (includeColor) |
| 693 section()->setCachedCollapsedBorder(this, CBSBefore, result); | 693 section()->setCachedCollapsedBorder(this, CBSBefore, result); |
| 694 return result; | 694 return result; |
| 695 } | 695 } |
| 696 | 696 |
| 697 CollapsedBorderValue RenderTableCell::computeCollapsedBeforeBorder(IncludeBorder
ColorOrNot includeColor) const | 697 CollapsedBorderValue RenderTableCell::computeCollapsedBeforeBorder(IncludeBorder
ColorOrNot includeColor) const |
| 698 { | 698 { |
| 699 RenderTable* table = this->table(); | 699 RenderTable* table = this->table(); |
| 700 | 700 |
| 701 // For before border, we need to check, in order of precedence: | 701 // For before border, we need to check, in order of precedence: |
| 702 // (1) Our before border. | 702 // (1) Our before border. |
| 703 int beforeColorProperty = includeColor ? CSSProperty::resolveDirectionAwareP
roperty(CSSPropertyWebkitBorderBeforeColor, styleForCellFlow()->direction(), sty
leForCellFlow()->writingMode()) : 0; | 703 int beforeColorProperty = includeColor ? CSSProperty::resolveDirectionAwareP
roperty(CSSPropertyWebkitBorderBeforeColor, styleForCellFlow()->direction(), sty
leForCellFlow()->writingMode()) : 0; |
| 704 int afterColorProperty = includeColor ? CSSProperty::resolveDirectionAwarePr
operty(CSSPropertyWebkitBorderAfterColor, styleForCellFlow()->direction(), style
ForCellFlow()->writingMode()) : 0; | 704 int afterColorProperty = includeColor ? CSSProperty::resolveDirectionAwarePr
operty(CSSPropertyWebkitBorderAfterColor, styleForCellFlow()->direction(), style
ForCellFlow()->writingMode()) : 0; |
| 705 CollapsedBorderValue result = CollapsedBorderValue(style()->borderBefore(),
includeColor ? style()->visitedDependentColor(beforeColorProperty) : Color(), BC
ELL); | 705 CollapsedBorderValue result = CollapsedBorderValue(style()->borderBefore(),
includeColor ? resolveColor(beforeColorProperty) : Color(), BCELL); |
| 706 | 706 |
| 707 RenderTableCell* prevCell = table->cellAbove(this); | 707 RenderTableCell* prevCell = table->cellAbove(this); |
| 708 if (prevCell) { | 708 if (prevCell) { |
| 709 // (2) A before cell's after border. | 709 // (2) A before cell's after border. |
| 710 result = chooseBorder(CollapsedBorderValue(prevCell->style()->borderAfte
r(), includeColor ? prevCell->style()->visitedDependentColor(afterColorProperty)
: Color(), BCELL), result); | 710 result = chooseBorder(CollapsedBorderValue(prevCell->style()->borderAfte
r(), includeColor ? prevCell->resolveColor(afterColorProperty) : Color(), BCELL)
, result); |
| 711 if (!result.exists()) | 711 if (!result.exists()) |
| 712 return result; | 712 return result; |
| 713 } | 713 } |
| 714 | 714 |
| 715 // (3) Our row's before border. | 715 // (3) Our row's before border. |
| 716 result = chooseBorder(result, CollapsedBorderValue(parent()->style()->border
Before(), includeColor ? parent()->style()->visitedDependentColor(beforeColorPro
perty) : Color(), BROW)); | 716 result = chooseBorder(result, CollapsedBorderValue(parent()->style()->border
Before(), includeColor ? parent()->resolveColor(beforeColorProperty) : Color(),
BROW)); |
| 717 if (!result.exists()) | 717 if (!result.exists()) |
| 718 return result; | 718 return result; |
| 719 | 719 |
| 720 // (4) The previous row's after border. | 720 // (4) The previous row's after border. |
| 721 if (prevCell) { | 721 if (prevCell) { |
| 722 RenderObject* prevRow = 0; | 722 RenderObject* prevRow = 0; |
| 723 if (prevCell->section() == section()) | 723 if (prevCell->section() == section()) |
| 724 prevRow = parent()->previousSibling(); | 724 prevRow = parent()->previousSibling(); |
| 725 else | 725 else |
| 726 prevRow = prevCell->section()->lastChild(); | 726 prevRow = prevCell->section()->lastChild(); |
| 727 | 727 |
| 728 if (prevRow) { | 728 if (prevRow) { |
| 729 result = chooseBorder(CollapsedBorderValue(prevRow->style()->borderA
fter(), includeColor ? prevRow->style()->visitedDependentColor(afterColorPropert
y) : Color(), BROW), result); | 729 result = chooseBorder(CollapsedBorderValue(prevRow->style()->borderA
fter(), includeColor ? prevRow->resolveColor(afterColorProperty) : Color(), BROW
), result); |
| 730 if (!result.exists()) | 730 if (!result.exists()) |
| 731 return result; | 731 return result; |
| 732 } | 732 } |
| 733 } | 733 } |
| 734 | 734 |
| 735 // Now check row groups. | 735 // Now check row groups. |
| 736 RenderTableSection* currSection = section(); | 736 RenderTableSection* currSection = section(); |
| 737 if (!rowIndex()) { | 737 if (!rowIndex()) { |
| 738 // (5) Our row group's before border. | 738 // (5) Our row group's before border. |
| 739 result = chooseBorder(result, CollapsedBorderValue(currSection->style()-
>borderBefore(), includeColor ? currSection->style()->visitedDependentColor(befo
reColorProperty) : Color(), BROWGROUP)); | 739 result = chooseBorder(result, CollapsedBorderValue(currSection->style()-
>borderBefore(), includeColor ? currSection->resolveColor(beforeColorProperty) :
Color(), BROWGROUP)); |
| 740 if (!result.exists()) | 740 if (!result.exists()) |
| 741 return result; | 741 return result; |
| 742 | 742 |
| 743 // (6) Previous row group's after border. | 743 // (6) Previous row group's after border. |
| 744 currSection = table->sectionAbove(currSection, SkipEmptySections); | 744 currSection = table->sectionAbove(currSection, SkipEmptySections); |
| 745 if (currSection) { | 745 if (currSection) { |
| 746 result = chooseBorder(CollapsedBorderValue(currSection->style()->bor
derAfter(), includeColor ? currSection->style()->visitedDependentColor(afterColo
rProperty) : Color(), BROWGROUP), result); | 746 result = chooseBorder(CollapsedBorderValue(currSection->style()->bor
derAfter(), includeColor ? currSection->resolveColor(afterColorProperty) : Color
(), BROWGROUP), result); |
| 747 if (!result.exists()) | 747 if (!result.exists()) |
| 748 return result; | 748 return result; |
| 749 } | 749 } |
| 750 } | 750 } |
| 751 | 751 |
| 752 if (!currSection) { | 752 if (!currSection) { |
| 753 // (8) Our column and column group's before borders. | 753 // (8) Our column and column group's before borders. |
| 754 RenderTableCol* colElt = table->colElement(col()); | 754 RenderTableCol* colElt = table->colElement(col()); |
| 755 if (colElt) { | 755 if (colElt) { |
| 756 result = chooseBorder(result, CollapsedBorderValue(colElt->style()->
borderBefore(), includeColor ? colElt->style()->visitedDependentColor(beforeColo
rProperty) : Color(), BCOL)); | 756 result = chooseBorder(result, CollapsedBorderValue(colElt->style()->
borderBefore(), includeColor ? colElt->resolveColor(beforeColorProperty) : Color
(), BCOL)); |
| 757 if (!result.exists()) | 757 if (!result.exists()) |
| 758 return result; | 758 return result; |
| 759 if (RenderTableCol* enclosingColumnGroup = colElt->enclosingColumnGr
oup()) { | 759 if (RenderTableCol* enclosingColumnGroup = colElt->enclosingColumnGr
oup()) { |
| 760 result = chooseBorder(result, CollapsedBorderValue(enclosingColu
mnGroup->style()->borderBefore(), includeColor ? enclosingColumnGroup->style()->
visitedDependentColor(beforeColorProperty) : Color(), BCOLGROUP)); | 760 result = chooseBorder(result, CollapsedBorderValue(enclosingColu
mnGroup->style()->borderBefore(), includeColor ? enclosingColumnGroup->resolveCo
lor(beforeColorProperty) : Color(), BCOLGROUP)); |
| 761 if (!result.exists()) | 761 if (!result.exists()) |
| 762 return result; | 762 return result; |
| 763 } | 763 } |
| 764 } | 764 } |
| 765 | 765 |
| 766 // (9) The table's before border. | 766 // (9) The table's before border. |
| 767 result = chooseBorder(result, CollapsedBorderValue(table->style()->borde
rBefore(), includeColor ? table->style()->visitedDependentColor(beforeColorPrope
rty) : Color(), BTABLE)); | 767 result = chooseBorder(result, CollapsedBorderValue(table->style()->borde
rBefore(), includeColor ? table->resolveColor(beforeColorProperty) : Color(), BT
ABLE)); |
| 768 if (!result.exists()) | 768 if (!result.exists()) |
| 769 return result; | 769 return result; |
| 770 } | 770 } |
| 771 | 771 |
| 772 return result; | 772 return result; |
| 773 } | 773 } |
| 774 | 774 |
| 775 CollapsedBorderValue RenderTableCell::collapsedAfterBorder(IncludeBorderColorOrN
ot includeColor) const | 775 CollapsedBorderValue RenderTableCell::collapsedAfterBorder(IncludeBorderColorOrN
ot includeColor) const |
| 776 { | 776 { |
| 777 CollapsedBorderValue result = computeCollapsedAfterBorder(includeColor); | 777 CollapsedBorderValue result = computeCollapsedAfterBorder(includeColor); |
| 778 if (includeColor) | 778 if (includeColor) |
| 779 section()->setCachedCollapsedBorder(this, CBSAfter, result); | 779 section()->setCachedCollapsedBorder(this, CBSAfter, result); |
| 780 return result; | 780 return result; |
| 781 } | 781 } |
| 782 | 782 |
| 783 CollapsedBorderValue RenderTableCell::computeCollapsedAfterBorder(IncludeBorderC
olorOrNot includeColor) const | 783 CollapsedBorderValue RenderTableCell::computeCollapsedAfterBorder(IncludeBorderC
olorOrNot includeColor) const |
| 784 { | 784 { |
| 785 RenderTable* table = this->table(); | 785 RenderTable* table = this->table(); |
| 786 | 786 |
| 787 // For after border, we need to check, in order of precedence: | 787 // For after border, we need to check, in order of precedence: |
| 788 // (1) Our after border. | 788 // (1) Our after border. |
| 789 int beforeColorProperty = includeColor ? CSSProperty::resolveDirectionAwareP
roperty(CSSPropertyWebkitBorderBeforeColor, styleForCellFlow()->direction(), sty
leForCellFlow()->writingMode()) : 0; | 789 int beforeColorProperty = includeColor ? CSSProperty::resolveDirectionAwareP
roperty(CSSPropertyWebkitBorderBeforeColor, styleForCellFlow()->direction(), sty
leForCellFlow()->writingMode()) : 0; |
| 790 int afterColorProperty = includeColor ? CSSProperty::resolveDirectionAwarePr
operty(CSSPropertyWebkitBorderAfterColor, styleForCellFlow()->direction(), style
ForCellFlow()->writingMode()) : 0; | 790 int afterColorProperty = includeColor ? CSSProperty::resolveDirectionAwarePr
operty(CSSPropertyWebkitBorderAfterColor, styleForCellFlow()->direction(), style
ForCellFlow()->writingMode()) : 0; |
| 791 CollapsedBorderValue result = CollapsedBorderValue(style()->borderAfter(), i
ncludeColor ? style()->visitedDependentColor(afterColorProperty) : Color(), BCEL
L); | 791 CollapsedBorderValue result = CollapsedBorderValue(style()->borderAfter(), i
ncludeColor ? resolveColor(afterColorProperty) : Color(), BCELL); |
| 792 | 792 |
| 793 RenderTableCell* nextCell = table->cellBelow(this); | 793 RenderTableCell* nextCell = table->cellBelow(this); |
| 794 if (nextCell) { | 794 if (nextCell) { |
| 795 // (2) An after cell's before border. | 795 // (2) An after cell's before border. |
| 796 result = chooseBorder(result, CollapsedBorderValue(nextCell->style()->bo
rderBefore(), includeColor ? nextCell->style()->visitedDependentColor(beforeColo
rProperty) : Color(), BCELL)); | 796 result = chooseBorder(result, CollapsedBorderValue(nextCell->style()->bo
rderBefore(), includeColor ? nextCell->resolveColor(beforeColorProperty) : Color
(), BCELL)); |
| 797 if (!result.exists()) | 797 if (!result.exists()) |
| 798 return result; | 798 return result; |
| 799 } | 799 } |
| 800 | 800 |
| 801 // (3) Our row's after border. (FIXME: Deal with rowspan!) | 801 // (3) Our row's after border. (FIXME: Deal with rowspan!) |
| 802 result = chooseBorder(result, CollapsedBorderValue(parent()->style()->border
After(), includeColor ? parent()->style()->visitedDependentColor(afterColorPrope
rty) : Color(), BROW)); | 802 result = chooseBorder(result, CollapsedBorderValue(parent()->style()->border
After(), includeColor ? parent()->resolveColor(afterColorProperty) : Color(), BR
OW)); |
| 803 if (!result.exists()) | 803 if (!result.exists()) |
| 804 return result; | 804 return result; |
| 805 | 805 |
| 806 // (4) The next row's before border. | 806 // (4) The next row's before border. |
| 807 if (nextCell) { | 807 if (nextCell) { |
| 808 result = chooseBorder(result, CollapsedBorderValue(nextCell->parent()->s
tyle()->borderBefore(), includeColor ? nextCell->parent()->style()->visitedDepen
dentColor(beforeColorProperty) : Color(), BROW)); | 808 result = chooseBorder(result, CollapsedBorderValue(nextCell->parent()->s
tyle()->borderBefore(), includeColor ? nextCell->parent()->resolveColor(beforeCo
lorProperty) : Color(), BROW)); |
| 809 if (!result.exists()) | 809 if (!result.exists()) |
| 810 return result; | 810 return result; |
| 811 } | 811 } |
| 812 | 812 |
| 813 // Now check row groups. | 813 // Now check row groups. |
| 814 RenderTableSection* currSection = section(); | 814 RenderTableSection* currSection = section(); |
| 815 if (rowIndex() + rowSpan() >= currSection->numRows()) { | 815 if (rowIndex() + rowSpan() >= currSection->numRows()) { |
| 816 // (5) Our row group's after border. | 816 // (5) Our row group's after border. |
| 817 result = chooseBorder(result, CollapsedBorderValue(currSection->style()-
>borderAfter(), includeColor ? currSection->style()->visitedDependentColor(after
ColorProperty) : Color(), BROWGROUP)); | 817 result = chooseBorder(result, CollapsedBorderValue(currSection->style()-
>borderAfter(), includeColor ? currSection->resolveColor(afterColorProperty) : C
olor(), BROWGROUP)); |
| 818 if (!result.exists()) | 818 if (!result.exists()) |
| 819 return result; | 819 return result; |
| 820 | 820 |
| 821 // (6) Following row group's before border. | 821 // (6) Following row group's before border. |
| 822 currSection = table->sectionBelow(currSection, SkipEmptySections); | 822 currSection = table->sectionBelow(currSection, SkipEmptySections); |
| 823 if (currSection) { | 823 if (currSection) { |
| 824 result = chooseBorder(result, CollapsedBorderValue(currSection->styl
e()->borderBefore(), includeColor ? currSection->style()->visitedDependentColor(
beforeColorProperty) : Color(), BROWGROUP)); | 824 result = chooseBorder(result, CollapsedBorderValue(currSection->styl
e()->borderBefore(), includeColor ? currSection->resolveColor(beforeColorPropert
y) : Color(), BROWGROUP)); |
| 825 if (!result.exists()) | 825 if (!result.exists()) |
| 826 return result; | 826 return result; |
| 827 } | 827 } |
| 828 } | 828 } |
| 829 | 829 |
| 830 if (!currSection) { | 830 if (!currSection) { |
| 831 // (8) Our column and column group's after borders. | 831 // (8) Our column and column group's after borders. |
| 832 RenderTableCol* colElt = table->colElement(col()); | 832 RenderTableCol* colElt = table->colElement(col()); |
| 833 if (colElt) { | 833 if (colElt) { |
| 834 result = chooseBorder(result, CollapsedBorderValue(colElt->style()->
borderAfter(), includeColor ? colElt->style()->visitedDependentColor(afterColorP
roperty) : Color(), BCOL)); | 834 result = chooseBorder(result, CollapsedBorderValue(colElt->style()->
borderAfter(), includeColor ? colElt->resolveColor(afterColorProperty) : Color()
, BCOL)); |
| 835 if (!result.exists()) return result; | 835 if (!result.exists()) return result; |
| 836 if (RenderTableCol* enclosingColumnGroup = colElt->enclosingColumnGr
oup()) { | 836 if (RenderTableCol* enclosingColumnGroup = colElt->enclosingColumnGr
oup()) { |
| 837 result = chooseBorder(result, CollapsedBorderValue(enclosingColu
mnGroup->style()->borderAfter(), includeColor ? enclosingColumnGroup->style()->v
isitedDependentColor(afterColorProperty) : Color(), BCOLGROUP)); | 837 result = chooseBorder(result, CollapsedBorderValue(enclosingColu
mnGroup->style()->borderAfter(), includeColor ? enclosingColumnGroup->resolveCol
or(afterColorProperty) : Color(), BCOLGROUP)); |
| 838 if (!result.exists()) | 838 if (!result.exists()) |
| 839 return result; | 839 return result; |
| 840 } | 840 } |
| 841 } | 841 } |
| 842 | 842 |
| 843 // (9) The table's after border. | 843 // (9) The table's after border. |
| 844 result = chooseBorder(result, CollapsedBorderValue(table->style()->borde
rAfter(), includeColor ? table->style()->visitedDependentColor(afterColorPropert
y) : Color(), BTABLE)); | 844 result = chooseBorder(result, CollapsedBorderValue(table->style()->borde
rAfter(), includeColor ? table->resolveColor(afterColorProperty) : Color(), BTAB
LE)); |
| 845 if (!result.exists()) | 845 if (!result.exists()) |
| 846 return result; | 846 return result; |
| 847 } | 847 } |
| 848 | 848 |
| 849 return result; | 849 return result; |
| 850 } | 850 } |
| 851 | 851 |
| 852 inline CollapsedBorderValue RenderTableCell::cachedCollapsedLeftBorder(const Ren
derStyle* styleForCellFlow) const | 852 inline CollapsedBorderValue RenderTableCell::cachedCollapsedLeftBorder(const Ren
derStyle* styleForCellFlow) const |
| 853 { | 853 { |
| 854 if (styleForCellFlow->isHorizontalWritingMode()) | 854 if (styleForCellFlow->isHorizontalWritingMode()) |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1135 // precedence paint on top of borders with lower precedence. | 1135 // precedence paint on top of borders with lower precedence. |
| 1136 CollapsedBorders borders; | 1136 CollapsedBorders borders; |
| 1137 borders.addBorder(topVal, BSTop, renderTop, borderRect.x(), borderRect.y(),
borderRect.maxX(), borderRect.y() + topWidth, topStyle); | 1137 borders.addBorder(topVal, BSTop, renderTop, borderRect.x(), borderRect.y(),
borderRect.maxX(), borderRect.y() + topWidth, topStyle); |
| 1138 borders.addBorder(bottomVal, BSBottom, renderBottom, borderRect.x(), borderR
ect.maxY() - bottomWidth, borderRect.maxX(), borderRect.maxY(), bottomStyle); | 1138 borders.addBorder(bottomVal, BSBottom, renderBottom, borderRect.x(), borderR
ect.maxY() - bottomWidth, borderRect.maxX(), borderRect.maxY(), bottomStyle); |
| 1139 borders.addBorder(leftVal, BSLeft, renderLeft, borderRect.x(), borderRect.y(
), borderRect.x() + leftWidth, borderRect.maxY(), leftStyle); | 1139 borders.addBorder(leftVal, BSLeft, renderLeft, borderRect.x(), borderRect.y(
), borderRect.x() + leftWidth, borderRect.maxY(), leftStyle); |
| 1140 borders.addBorder(rightVal, BSRight, renderRight, borderRect.maxX() - rightW
idth, borderRect.y(), borderRect.maxX(), borderRect.maxY(), rightStyle); | 1140 borders.addBorder(rightVal, BSRight, renderRight, borderRect.maxX() - rightW
idth, borderRect.y(), borderRect.maxX(), borderRect.maxY(), rightStyle); |
| 1141 | 1141 |
| 1142 bool antialias = shouldAntialiasLines(graphicsContext); | 1142 bool antialias = shouldAntialiasLines(graphicsContext); |
| 1143 | 1143 |
| 1144 for (CollapsedBorder* border = borders.nextBorder(); border; border = border
s.nextBorder()) { | 1144 for (CollapsedBorder* border = borders.nextBorder(); border; border = border
s.nextBorder()) { |
| 1145 if (border->borderValue.isSameIgnoringColor(*table()->currentBorderValue
())) | 1145 if (border->borderValue.isSameIgnoringColor(*table()->currentBorderValue
())) { |
| 1146 drawLineForBoxSide(graphicsContext, border->x1, border->y1, border->
x2, border->y2, border->side, | 1146 drawLineForBoxSide(graphicsContext, border->x1, border->y1, border->
x2, border->y2, border->side, |
| 1147 border->borderValue.color(), border->style, 0, 0,
antialias); | 1147 resolveColor(border->borderValue.color()), border->style, 0, 0,
antialias); |
| 1148 } |
| 1148 } | 1149 } |
| 1149 } | 1150 } |
| 1150 | 1151 |
| 1151 void RenderTableCell::paintBackgroundsBehindCell(PaintInfo& paintInfo, const Lay
outPoint& paintOffset, RenderObject* backgroundObject) | 1152 void RenderTableCell::paintBackgroundsBehindCell(PaintInfo& paintInfo, const Lay
outPoint& paintOffset, RenderObject* backgroundObject) |
| 1152 { | 1153 { |
| 1153 if (!paintInfo.shouldPaintWithinRoot(this)) | 1154 if (!paintInfo.shouldPaintWithinRoot(this)) |
| 1154 return; | 1155 return; |
| 1155 | 1156 |
| 1156 if (!backgroundObject) | 1157 if (!backgroundObject) |
| 1157 return; | 1158 return; |
| 1158 | 1159 |
| 1159 if (style()->visibility() != VISIBLE) | 1160 if (style()->visibility() != VISIBLE) |
| 1160 return; | 1161 return; |
| 1161 | 1162 |
| 1162 RenderTable* tableElt = table(); | 1163 RenderTable* tableElt = table(); |
| 1163 if (!tableElt->collapseBorders() && style()->emptyCells() == HIDE && !firstC
hild()) | 1164 if (!tableElt->collapseBorders() && style()->emptyCells() == HIDE && !firstC
hild()) |
| 1164 return; | 1165 return; |
| 1165 | 1166 |
| 1166 LayoutPoint adjustedPaintOffset = paintOffset; | 1167 LayoutPoint adjustedPaintOffset = paintOffset; |
| 1167 if (backgroundObject != this) | 1168 if (backgroundObject != this) |
| 1168 adjustedPaintOffset.moveBy(location()); | 1169 adjustedPaintOffset.moveBy(location()); |
| 1169 | 1170 |
| 1170 Color c = backgroundObject->style()->visitedDependentColor(CSSPropertyBackgr
oundColor); | 1171 Color c = backgroundObject->resolveColor(CSSPropertyBackgroundColor); |
| 1171 const FillLayer* bgLayer = backgroundObject->style()->backgroundLayers(); | 1172 const FillLayer* bgLayer = backgroundObject->style()->backgroundLayers(); |
| 1172 | 1173 |
| 1173 if (bgLayer->hasImage() || c.isValid()) { | 1174 if (bgLayer->hasImage() || c.isValid()) { |
| 1174 // We have to clip here because the background would paint | 1175 // We have to clip here because the background would paint |
| 1175 // on top of the borders otherwise. This only matters for cells and row
s. | 1176 // on top of the borders otherwise. This only matters for cells and row
s. |
| 1176 bool shouldClip = backgroundObject->hasLayer() && (backgroundObject == t
his || backgroundObject == parent()) && tableElt->collapseBorders(); | 1177 bool shouldClip = backgroundObject->hasLayer() && (backgroundObject == t
his || backgroundObject == parent()) && tableElt->collapseBorders(); |
| 1177 GraphicsContextStateSaver stateSaver(*paintInfo.context, shouldClip); | 1178 GraphicsContextStateSaver stateSaver(*paintInfo.context, shouldClip); |
| 1178 if (shouldClip) { | 1179 if (shouldClip) { |
| 1179 LayoutRect clipRect(adjustedPaintOffset.x() + borderLeft(), adjusted
PaintOffset.y() + borderTop(), | 1180 LayoutRect clipRect(adjustedPaintOffset.x() + borderLeft(), adjusted
PaintOffset.y() + borderTop(), |
| 1180 width() - borderLeft() - borderRight(), height() - borderTop() -
borderBottom()); | 1181 width() - borderLeft() - borderRight(), height() - borderTop() -
borderBottom()); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1257 | 1258 |
| 1258 RenderTableCell* RenderTableCell::createAnonymousWithParentRenderer(const Render
Object* parent) | 1259 RenderTableCell* RenderTableCell::createAnonymousWithParentRenderer(const Render
Object* parent) |
| 1259 { | 1260 { |
| 1260 RenderTableCell* newCell = RenderTableCell::createAnonymous(parent->document
()); | 1261 RenderTableCell* newCell = RenderTableCell::createAnonymous(parent->document
()); |
| 1261 RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(
parent->style(), TABLE_CELL); | 1262 RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(
parent->style(), TABLE_CELL); |
| 1262 newCell->setStyle(newStyle.release()); | 1263 newCell->setStyle(newStyle.release()); |
| 1263 return newCell; | 1264 return newCell; |
| 1264 } | 1265 } |
| 1265 | 1266 |
| 1266 } // namespace WebCore | 1267 } // namespace WebCore |
| OLD | NEW |