| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
| 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) | 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) |
| 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
| 7 * Copyright (C) 2010 Google Inc. All rights reserved. | 7 * Copyright (C) 2010 Google 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 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 | 525 |
| 526 void LayoutBoxModelObject::updateFromStyle() | 526 void LayoutBoxModelObject::updateFromStyle() |
| 527 { | 527 { |
| 528 const ComputedStyle& styleToUse = styleRef(); | 528 const ComputedStyle& styleToUse = styleRef(); |
| 529 setHasBoxDecorationBackground(calculateHasBoxDecorations()); | 529 setHasBoxDecorationBackground(calculateHasBoxDecorations()); |
| 530 setInline(styleToUse.isDisplayInlineType()); | 530 setInline(styleToUse.isDisplayInlineType()); |
| 531 setPositionState(styleToUse.position()); | 531 setPositionState(styleToUse.position()); |
| 532 setHorizontalWritingMode(styleToUse.isHorizontalWritingMode()); | 532 setHorizontalWritingMode(styleToUse.isHorizontalWritingMode()); |
| 533 } | 533 } |
| 534 | 534 |
| 535 static LayoutSize accumulateInFlowPositionOffsets(const LayoutObject* child) | |
| 536 { | |
| 537 if (!child->isAnonymousBlock() || !child->isInFlowPositioned()) | |
| 538 return LayoutSize(); | |
| 539 LayoutSize offset; | |
| 540 LayoutObject* p = toLayoutBlock(child)->inlineElementContinuation(); | |
| 541 while (p && p->isLayoutInline()) { | |
| 542 if (p->isInFlowPositioned()) { | |
| 543 LayoutInline* layoutInline = toLayoutInline(p); | |
| 544 offset += layoutInline->offsetForInFlowPosition(); | |
| 545 } | |
| 546 p = p->parent(); | |
| 547 } | |
| 548 return offset; | |
| 549 } | |
| 550 | |
| 551 LayoutBlock* LayoutBoxModelObject::containingBlockForAutoHeightDetection(Length
logicalHeight) const | 535 LayoutBlock* LayoutBoxModelObject::containingBlockForAutoHeightDetection(Length
logicalHeight) const |
| 552 { | 536 { |
| 553 // For percentage heights: The percentage is calculated with respect to the
height of the generated box's | 537 // For percentage heights: The percentage is calculated with respect to the
height of the generated box's |
| 554 // containing block. If the height of the containing block is not specified
explicitly (i.e., it depends | 538 // containing block. If the height of the containing block is not specified
explicitly (i.e., it depends |
| 555 // on content height), and this element is not absolutely positioned, the u
sed height is calculated | 539 // on content height), and this element is not absolutely positioned, the u
sed height is calculated |
| 556 // as if 'auto' was specified. | 540 // as if 'auto' was specified. |
| 557 if (!logicalHeight.hasPercent() || isOutOfFlowPositioned()) | 541 if (!logicalHeight.hasPercent() || isOutOfFlowPositioned()) |
| 558 return nullptr; | 542 return nullptr; |
| 559 | 543 |
| 560 // Anonymous block boxes are ignored when resolving percentage values that w
ould refer to it: | 544 // Anonymous block boxes are ignored when resolving percentage values that w
ould refer to it: |
| (...skipping 30 matching lines...) Expand all Loading... |
| 591 return false; | 575 return false; |
| 592 | 576 |
| 593 // If the height of the containing block computes to 'auto', then it hasn't
been 'specified explicitly'. | 577 // If the height of the containing block computes to 'auto', then it hasn't
been 'specified explicitly'. |
| 594 if (LayoutBlock* cb = containingBlockForAutoHeightDetection(logicalHeightLen
gth)) | 578 if (LayoutBlock* cb = containingBlockForAutoHeightDetection(logicalHeightLen
gth)) |
| 595 return cb->hasAutoHeightOrContainingBlockWithAutoHeight(); | 579 return cb->hasAutoHeightOrContainingBlockWithAutoHeight(); |
| 596 return false; | 580 return false; |
| 597 } | 581 } |
| 598 | 582 |
| 599 LayoutSize LayoutBoxModelObject::relativePositionOffset() const | 583 LayoutSize LayoutBoxModelObject::relativePositionOffset() const |
| 600 { | 584 { |
| 601 LayoutSize offset = accumulateInFlowPositionOffsets(this); | 585 LayoutSize offset = accumulateInFlowPositionOffsets(); |
| 602 | 586 |
| 603 LayoutBlock* containingBlock = this->containingBlock(); | 587 LayoutBlock* containingBlock = this->containingBlock(); |
| 604 | 588 |
| 605 // Objects that shrink to avoid floats normally use available line width whe
n computing containing block width. However | 589 // Objects that shrink to avoid floats normally use available line width whe
n computing containing block width. However |
| 606 // in the case of relative positioning using percentages, we can't do this.
The offset should always be resolved using the | 590 // in the case of relative positioning using percentages, we can't do this.
The offset should always be resolved using the |
| 607 // available width of the containing block. Therefore we don't use containi
ngBlockLogicalWidthForContent() here, but instead explicitly | 591 // available width of the containing block. Therefore we don't use containi
ngBlockLogicalWidthForContent() here, but instead explicitly |
| 608 // call availableWidth on our containing block. | 592 // call availableWidth on our containing block. |
| 609 if (!style()->left().isAuto()) { | 593 if (!style()->left().isAuto()) { |
| 610 if (!style()->right().isAuto() && !containingBlock->style()->isLeftToRig
htDirection()) | 594 if (!style()->right().isAuto() && !containingBlock->style()->isLeftToRig
htDirection()) |
| 611 offset.setWidth(-valueForLength(style()->right(), containingBlock->a
vailableWidth())); | 595 offset.setWidth(-valueForLength(style()->right(), containingBlock->a
vailableWidth())); |
| (...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1132 if (rootElementStyle->hasBackground()) | 1116 if (rootElementStyle->hasBackground()) |
| 1133 return false; | 1117 return false; |
| 1134 | 1118 |
| 1135 if (node() != document().firstBodyElement()) | 1119 if (node() != document().firstBodyElement()) |
| 1136 return false; | 1120 return false; |
| 1137 | 1121 |
| 1138 return true; | 1122 return true; |
| 1139 } | 1123 } |
| 1140 | 1124 |
| 1141 } // namespace blink | 1125 } // namespace blink |
| OLD | NEW |