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, 2010 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. |
7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. | 7 * Copyright (C) 2013 Adobe Systems Incorporated. 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 3742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3753 } | 3753 } |
3754 | 3754 |
3755 static bool isReplacedElement(Node* node) | 3755 static bool isReplacedElement(Node* node) |
3756 { | 3756 { |
3757 // Checkboxes and radioboxes are not isReplaced() nor do they have their own
renderer in which to override avoidFloats(). | 3757 // Checkboxes and radioboxes are not isReplaced() nor do they have their own
renderer in which to override avoidFloats(). |
3758 return node && node->isElementNode() && (toElement(node)->isFormControlEleme
nt() || isHTMLImageElement(toElement(node))); | 3758 return node && node->isElementNode() && (toElement(node)->isFormControlEleme
nt() || isHTMLImageElement(toElement(node))); |
3759 } | 3759 } |
3760 | 3760 |
3761 bool RenderBox::avoidsFloats() const | 3761 bool RenderBox::avoidsFloats() const |
3762 { | 3762 { |
3763 return isReplaced() || isReplacedElement(node()) || hasOverflowClip() || isH
R() || isLegend() || isWritingModeRoot() || isFlexItemIncludingDeprecated(); | 3763 // CSS2.1: "The border box of a table, a block-level replaced element, or an
element in the normal flow that establishes a new block formatting |
| 3764 // context .. must not overlap the margin box of any floats in the same bloc
k formatting context." |
| 3765 // FIXME: The inclusion of horizontal rule and legend elements here isn't co
vered by any spec. |
| 3766 return isReplaced() || isReplacedElement(node()) || isHR() || isLegend() ||
isTable() || (!isFloatingOrOutOfFlowPositioned() && createsBlockFormattingContex
t()); |
3764 } | 3767 } |
3765 | 3768 |
3766 PaintInvalidationReason RenderBox::paintInvalidationReason(const RenderLayerMode
lObject& paintInvalidationContainer, | 3769 PaintInvalidationReason RenderBox::paintInvalidationReason(const RenderLayerMode
lObject& paintInvalidationContainer, |
3767 const LayoutRect& oldBounds, const LayoutPoint& oldLocation, const LayoutRec
t& newBounds, const LayoutPoint& newLocation) const | 3770 const LayoutRect& oldBounds, const LayoutPoint& oldLocation, const LayoutRec
t& newBounds, const LayoutPoint& newLocation) const |
3768 { | 3771 { |
3769 PaintInvalidationReason invalidationReason = RenderBoxModelObject::paintInva
lidationReason(paintInvalidationContainer, oldBounds, oldLocation, newBounds, ne
wLocation); | 3772 PaintInvalidationReason invalidationReason = RenderBoxModelObject::paintInva
lidationReason(paintInvalidationContainer, oldBounds, oldLocation, newBounds, ne
wLocation); |
3770 if (isFullPaintInvalidationReason(invalidationReason)) | 3773 if (isFullPaintInvalidationReason(invalidationReason)) |
3771 return invalidationReason; | 3774 return invalidationReason; |
3772 | 3775 |
3773 // If the transform is not identity or translation, incremental invalidation
is not applicable | 3776 // If the transform is not identity or translation, incremental invalidation
is not applicable |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3872 invalidatePaintUsingContainer(&paintInvalidationContainer, rectClippedBy
OldBounds, PaintInvalidationIncremental); | 3875 invalidatePaintUsingContainer(&paintInvalidationContainer, rectClippedBy
OldBounds, PaintInvalidationIncremental); |
3873 return; | 3876 return; |
3874 } | 3877 } |
3875 // Invalidate the bigger one if one contains another. Otherwise invalidate b
oth. | 3878 // Invalidate the bigger one if one contains another. Otherwise invalidate b
oth. |
3876 if (!rectClippedByNewBounds.contains(rectClippedByOldBounds)) | 3879 if (!rectClippedByNewBounds.contains(rectClippedByOldBounds)) |
3877 invalidatePaintUsingContainer(&paintInvalidationContainer, rectClippedBy
OldBounds, PaintInvalidationIncremental); | 3880 invalidatePaintUsingContainer(&paintInvalidationContainer, rectClippedBy
OldBounds, PaintInvalidationIncremental); |
3878 if (!rectClippedByOldBounds.contains(rectClippedByNewBounds)) | 3881 if (!rectClippedByOldBounds.contains(rectClippedByNewBounds)) |
3879 invalidatePaintUsingContainer(&paintInvalidationContainer, rectClippedBy
NewBounds, PaintInvalidationIncremental); | 3882 invalidatePaintUsingContainer(&paintInvalidationContainer, rectClippedBy
NewBounds, PaintInvalidationIncremental); |
3880 } | 3883 } |
3881 | 3884 |
| 3885 bool RenderBox::createsBlockFormattingContext() const |
| 3886 { |
| 3887 return isInlineBlockOrInlineTable() || isFloatingOrOutOfFlowPositioned() ||
hasOverflowClip() || isFlexItemIncludingDeprecated() |
| 3888 || style()->specifiesColumns() || isRenderFlowThread() || isTableCell()
|| isTableCaption() || isFieldset() || isWritingModeRoot() || isDocumentElement(
) || style()->columnSpan(); |
| 3889 } |
| 3890 |
3882 void RenderBox::markForPaginationRelayoutIfNeeded(SubtreeLayoutScope& layoutScop
e) | 3891 void RenderBox::markForPaginationRelayoutIfNeeded(SubtreeLayoutScope& layoutScop
e) |
3883 { | 3892 { |
3884 ASSERT(!needsLayout()); | 3893 ASSERT(!needsLayout()); |
3885 // If fragmentation height has changed, we need to lay out. No need to enter
the renderer if it | 3894 // If fragmentation height has changed, we need to lay out. No need to enter
the renderer if it |
3886 // is childless, though. | 3895 // is childless, though. |
3887 if (view()->layoutState()->pageLogicalHeightChanged() && slowFirstChild()) | 3896 if (view()->layoutState()->pageLogicalHeightChanged() && slowFirstChild()) |
3888 layoutScope.setChildNeedsLayout(this); | 3897 layoutScope.setChildNeedsLayout(this); |
3889 } | 3898 } |
3890 | 3899 |
3891 void RenderBox::addVisualEffectOverflow() | 3900 void RenderBox::addVisualEffectOverflow() |
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4438 | 4447 |
4439 setLogicalTop(oldLogicalTop); | 4448 setLogicalTop(oldLogicalTop); |
4440 setLogicalWidth(oldLogicalWidth); | 4449 setLogicalWidth(oldLogicalWidth); |
4441 setMarginLeft(oldMarginLeft); | 4450 setMarginLeft(oldMarginLeft); |
4442 setMarginRight(oldMarginRight); | 4451 setMarginRight(oldMarginRight); |
4443 | 4452 |
4444 return borderBox; | 4453 return borderBox; |
4445 } | 4454 } |
4446 | 4455 |
4447 } // namespace blink | 4456 } // namespace blink |
OLD | NEW |