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 3943 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3954 { | 3954 { |
3955 RenderObject::incrementallyInvalidatePaint(paintInvalidationContainer, oldBo
unds, newBounds, positionFromPaintInvalidationBacking); | 3955 RenderObject::incrementallyInvalidatePaint(paintInvalidationContainer, oldBo
unds, newBounds, positionFromPaintInvalidationBacking); |
3956 | 3956 |
3957 bool hasBoxDecorations = style()->hasBoxDecorations(); | 3957 bool hasBoxDecorations = style()->hasBoxDecorations(); |
3958 if (!style()->hasBackground() && !hasBoxDecorations) | 3958 if (!style()->hasBackground() && !hasBoxDecorations) |
3959 return; | 3959 return; |
3960 | 3960 |
3961 LayoutSize oldBorderBoxSize = computePreviousBorderBoxSize(oldBounds.size())
; | 3961 LayoutSize oldBorderBoxSize = computePreviousBorderBoxSize(oldBounds.size())
; |
3962 LayoutSize newBorderBoxSize = size(); | 3962 LayoutSize newBorderBoxSize = size(); |
3963 | 3963 |
3964 // If border box size didn't change, RenderObject's incrementallyInvalidateP
aint() is good. | 3964 // If border box size didn't change, RenderBox's incrementallyInvalidatePain
t() is good. |
3965 if (oldBorderBoxSize == newBorderBoxSize) | 3965 if (oldBorderBoxSize == newBorderBoxSize) |
3966 return; | 3966 return; |
3967 | 3967 |
3968 // If size of the paint invalidation rect equals to size of border box, Rend
erObject::incrementallyInvalidatePaint() | 3968 // If size of the paint invalidation rect equals to size of border box, Rend
erObject::incrementallyInvalidatePaint() |
3969 // is good for boxes having background without box decorations. | 3969 // is good for boxes having background without box decorations. |
3970 ASSERT(oldBounds.location() == newBounds.location()); // Otherwise we won't
do incremental invalidation. | 3970 ASSERT(oldBounds.location() == newBounds.location()); // Otherwise we won't
do incremental invalidation. |
3971 if (!hasBoxDecorations | 3971 if (!hasBoxDecorations |
3972 && positionFromPaintInvalidationBacking == newBounds.location() | 3972 && positionFromPaintInvalidationBacking == newBounds.location() |
3973 && oldBorderBoxSize == oldBounds.size() | 3973 && oldBorderBoxSize == oldBounds.size() |
3974 && newBorderBoxSize == newBounds.size()) | 3974 && newBorderBoxSize == newBounds.size()) |
3975 return; | 3975 return; |
3976 | 3976 |
3977 // Invalidate the right delta part and the right border of the old or new bo
x which has smaller width. | 3977 // Invalidate the right delta part and the right border of the old or new bo
x which has smaller width. |
3978 LayoutUnit deltaWidth = absoluteValue(oldBorderBoxSize.width() - newBorderBo
xSize.width()); | 3978 LayoutUnit deltaWidth = absoluteValue(oldBorderBoxSize.width() - newBorderBo
xSize.width()); |
3979 if (deltaWidth) { | 3979 if (deltaWidth) { |
3980 LayoutUnit smallerWidth = std::min(oldBorderBoxSize.width(), newBorderBo
xSize.width()); | 3980 LayoutUnit smallerWidth = std::min(oldBorderBoxSize.width(), newBorderBo
xSize.width()); |
3981 LayoutUnit borderTopRightRadiusWidth = valueForLength(style()->borderTop
RightRadius().width(), smallerWidth); | 3981 LayoutUnit borderTopRightRadiusWidth = valueForLength(style()->borderTop
RightRadius().width(), smallerWidth); |
3982 LayoutUnit borderBottomRightRadiusWidth = valueForLength(style()->border
BottomRightRadius().width(), smallerWidth); | 3982 LayoutUnit borderBottomRightRadiusWidth = valueForLength(style()->border
BottomRightRadius().width(), smallerWidth); |
3983 LayoutUnit borderWidth = std::max<LayoutUnit>(borderRight(), std::max(bo
rderTopRightRadiusWidth, borderBottomRightRadiusWidth)); | 3983 LayoutUnit borderWidth = std::max<LayoutUnit>(borderRight(), std::max(bo
rderTopRightRadiusWidth, borderBottomRightRadiusWidth)); |
3984 LayoutRect rightDeltaRect(positionFromPaintInvalidationBacking.x() + sma
llerWidth - borderWidth, | 3984 LayoutRect rightDeltaRect(positionFromPaintInvalidationBacking.x() + sma
llerWidth - borderWidth, |
3985 positionFromPaintInvalidationBacking.y(), | 3985 positionFromPaintInvalidationBacking.y(), |
3986 deltaWidth + borderWidth, | 3986 deltaWidth + borderWidth, |
3987 std::max(oldBorderBoxSize.height(), newBorderBoxSize.height())); | 3987 std::max(oldBorderBoxSize.height(), newBorderBoxSize.height())); |
3988 invalidatePaintRectClippedByOldAndNewBounds(paintInvalidationContainer,
rightDeltaRect, oldBounds, newBounds); | 3988 invalidatePaintUsingContainer(&paintInvalidationContainer, rightDeltaRec
t, PaintInvalidationIncremental); |
3989 } | 3989 } |
3990 | 3990 |
3991 // Invalidate the bottom delta part and the bottom border of the old or new
box which has smaller height. | 3991 // Invalidate the bottom delta part and the bottom border of the old or new
box which has smaller height. |
3992 LayoutUnit deltaHeight = absoluteValue(oldBorderBoxSize.height() - newBorder
BoxSize.height()); | 3992 LayoutUnit deltaHeight = absoluteValue(oldBorderBoxSize.height() - newBorder
BoxSize.height()); |
3993 if (deltaHeight) { | 3993 if (deltaHeight) { |
3994 LayoutUnit smallerHeight = std::min(oldBorderBoxSize.height(), newBorder
BoxSize.height()); | 3994 LayoutUnit smallerHeight = std::min(oldBorderBoxSize.height(), newBorder
BoxSize.height()); |
3995 LayoutUnit borderBottomLeftRadiusHeight = valueForLength(style()->border
BottomLeftRadius().height(), smallerHeight); | 3995 LayoutUnit borderBottomLeftRadiusHeight = valueForLength(style()->border
BottomLeftRadius().height(), smallerHeight); |
3996 LayoutUnit borderBottomRightRadiusHeight = valueForLength(style()->borde
rBottomRightRadius().height(), smallerHeight); | 3996 LayoutUnit borderBottomRightRadiusHeight = valueForLength(style()->borde
rBottomRightRadius().height(), smallerHeight); |
3997 LayoutUnit borderHeight = std::max<LayoutUnit>(borderBottom(), std::max(
borderBottomLeftRadiusHeight, borderBottomRightRadiusHeight)); | 3997 LayoutUnit borderHeight = std::max<LayoutUnit>(borderBottom(), std::max(
borderBottomLeftRadiusHeight, borderBottomRightRadiusHeight)); |
3998 LayoutRect bottomDeltaRect(positionFromPaintInvalidationBacking.x(), | 3998 LayoutRect bottomDeltaRect(positionFromPaintInvalidationBacking.x(), |
3999 positionFromPaintInvalidationBacking.y() + smallerHeight - borderHei
ght, | 3999 positionFromPaintInvalidationBacking.y() + smallerHeight - borderHei
ght, |
4000 std::max(oldBorderBoxSize.width(), newBorderBoxSize.width()), | 4000 std::max(oldBorderBoxSize.width(), newBorderBoxSize.width()), |
4001 deltaHeight + borderHeight); | 4001 deltaHeight + borderHeight); |
4002 invalidatePaintRectClippedByOldAndNewBounds(paintInvalidationContainer,
bottomDeltaRect, oldBounds, newBounds); | 4002 invalidatePaintUsingContainer(&paintInvalidationContainer, bottomDeltaRe
ct, PaintInvalidationIncremental); |
4003 } | 4003 } |
4004 } | 4004 } |
4005 | 4005 |
4006 void RenderBox::invalidatePaintRectClippedByOldAndNewBounds(const LayoutLayerMod
elObject& paintInvalidationContainer, const LayoutRect& rect, const LayoutRect&
oldBounds, const LayoutRect& newBounds) | |
4007 { | |
4008 if (rect.isEmpty()) | |
4009 return; | |
4010 LayoutRect rectClippedByOldBounds = intersection(rect, oldBounds); | |
4011 LayoutRect rectClippedByNewBounds = intersection(rect, newBounds); | |
4012 // Invalidate only once if the clipped rects equal. | |
4013 if (rectClippedByOldBounds == rectClippedByNewBounds) { | |
4014 invalidatePaintUsingContainer(&paintInvalidationContainer, rectClippedBy
OldBounds, PaintInvalidationIncremental); | |
4015 return; | |
4016 } | |
4017 // Invalidate the bigger one if one contains another. Otherwise invalidate b
oth. | |
4018 if (!rectClippedByNewBounds.contains(rectClippedByOldBounds)) | |
4019 invalidatePaintUsingContainer(&paintInvalidationContainer, rectClippedBy
OldBounds, PaintInvalidationIncremental); | |
4020 if (!rectClippedByOldBounds.contains(rectClippedByNewBounds)) | |
4021 invalidatePaintUsingContainer(&paintInvalidationContainer, rectClippedBy
NewBounds, PaintInvalidationIncremental); | |
4022 } | |
4023 | |
4024 void RenderBox::markForPaginationRelayoutIfNeeded(SubtreeLayoutScope& layoutScop
e) | 4006 void RenderBox::markForPaginationRelayoutIfNeeded(SubtreeLayoutScope& layoutScop
e) |
4025 { | 4007 { |
4026 ASSERT(!needsLayout()); | 4008 ASSERT(!needsLayout()); |
4027 // If fragmentation height has changed, we need to lay out. No need to enter
the renderer if it | 4009 // If fragmentation height has changed, we need to lay out. No need to enter
the renderer if it |
4028 // is childless, though. | 4010 // is childless, though. |
4029 if (view()->layoutState()->pageLogicalHeightChanged() && slowFirstChild()) | 4011 if (view()->layoutState()->pageLogicalHeightChanged() && slowFirstChild()) |
4030 layoutScope.setChildNeedsLayout(this); | 4012 layoutScope.setChildNeedsLayout(this); |
4031 } | 4013 } |
4032 | 4014 |
4033 void RenderBox::addVisualEffectOverflow() | 4015 void RenderBox::addVisualEffectOverflow() |
(...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4577 } | 4559 } |
4578 | 4560 |
4579 void RenderBox::invalidateDisplayItemClients(DisplayItemList* displayItemList) c
onst | 4561 void RenderBox::invalidateDisplayItemClients(DisplayItemList* displayItemList) c
onst |
4580 { | 4562 { |
4581 RenderBoxModelObject::invalidateDisplayItemClients(displayItemList); | 4563 RenderBoxModelObject::invalidateDisplayItemClients(displayItemList); |
4582 if (LayerScrollableArea* area = scrollableArea()) | 4564 if (LayerScrollableArea* area = scrollableArea()) |
4583 displayItemList->invalidate(area->displayItemClient()); | 4565 displayItemList->invalidate(area->displayItemClient()); |
4584 } | 4566 } |
4585 | 4567 |
4586 } // namespace blink | 4568 } // namespace blink |
OLD | NEW |