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 1289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1300 return false; | 1300 return false; |
1301 } | 1301 } |
1302 | 1302 |
1303 PaintInvalidationReason RenderBox::invalidatePaintIfNeeded(const PaintInvalidati
onState& paintInvalidationState, const RenderLayerModelObject& newPaintInvalidat
ionContainer) | 1303 PaintInvalidationReason RenderBox::invalidatePaintIfNeeded(const PaintInvalidati
onState& paintInvalidationState, const RenderLayerModelObject& newPaintInvalidat
ionContainer) |
1304 { | 1304 { |
1305 PaintInvalidationReason reason = RenderBoxModelObject::invalidatePaintIfNeed
ed(paintInvalidationState, newPaintInvalidationContainer); | 1305 PaintInvalidationReason reason = RenderBoxModelObject::invalidatePaintIfNeed
ed(paintInvalidationState, newPaintInvalidationContainer); |
1306 | 1306 |
1307 // If we are set to do a full paint invalidation that means the RenderView w
ill be | 1307 // If we are set to do a full paint invalidation that means the RenderView w
ill be |
1308 // issue paint invalidations. We can then skip issuing of paint invalidation
s for the child | 1308 // issue paint invalidations. We can then skip issuing of paint invalidation
s for the child |
1309 // renderers as they'll be covered by the RenderView. | 1309 // renderers as they'll be covered by the RenderView. |
1310 if (!view()->doingFullPaintInvalidation()) { | 1310 if (!view()->doingFullPaintInvalidation() && !isFullPaintInvalidationReason(
reason)) { |
1311 if (!isFullPaintInvalidationReason(reason)) | 1311 invalidatePaintForOverflowIfNeeded(); |
1312 invalidatePaintForOverflowIfNeeded(); | |
1313 | 1312 |
1314 // Issue paint invalidations for any scrollbars if there is a scrollable
area for this renderer. | 1313 // Issue paint invalidations for any scrollbars if there is a scrollable
area for this renderer. |
1315 if (ScrollableArea* area = scrollableArea()) { | 1314 if (ScrollableArea* area = scrollableArea()) { |
1316 if (area->hasVerticalBarDamage()) | 1315 if (area->hasVerticalBarDamage()) |
1317 invalidatePaintRectangle(area->verticalBarDamage()); | 1316 invalidatePaintRectangle(area->verticalBarDamage()); |
1318 if (area->hasHorizontalBarDamage()) | 1317 if (area->hasHorizontalBarDamage()) |
1319 invalidatePaintRectangle(area->horizontalBarDamage()); | 1318 invalidatePaintRectangle(area->horizontalBarDamage()); |
1320 } | 1319 } |
1321 } | 1320 } |
1322 | 1321 |
(...skipping 2434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3757 { | 3756 { |
3758 // 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(). |
3759 return node && node->isElementNode() && toElement(node)->isFormControlElemen
t(); | 3758 return node && node->isElementNode() && toElement(node)->isFormControlElemen
t(); |
3760 } | 3759 } |
3761 | 3760 |
3762 bool RenderBox::avoidsFloats() const | 3761 bool RenderBox::avoidsFloats() const |
3763 { | 3762 { |
3764 return isReplaced() || isReplacedElement(node()) || hasOverflowClip() || isH
R() || isLegend() || isWritingModeRoot() || isFlexItemIncludingDeprecated(); | 3763 return isReplaced() || isReplacedElement(node()) || hasOverflowClip() || isH
R() || isLegend() || isWritingModeRoot() || isFlexItemIncludingDeprecated(); |
3765 } | 3764 } |
3766 | 3765 |
| 3766 bool RenderBox::hasNonCompositedScrollbars() const |
| 3767 { |
| 3768 if (RenderLayer* layer = this->layer()) { |
| 3769 if (RenderLayerScrollableArea* scrollableArea = layer->scrollableArea())
{ |
| 3770 if (scrollableArea->hasHorizontalScrollbar() && !scrollableArea->lay
erForHorizontalScrollbar()) |
| 3771 return true; |
| 3772 if (scrollableArea->hasVerticalScrollbar() && !scrollableArea->layer
ForVerticalScrollbar()) |
| 3773 return true; |
| 3774 } |
| 3775 } |
| 3776 return false; |
| 3777 } |
| 3778 |
3767 PaintInvalidationReason RenderBox::paintInvalidationReason(const RenderLayerMode
lObject& paintInvalidationContainer, | 3779 PaintInvalidationReason RenderBox::paintInvalidationReason(const RenderLayerMode
lObject& paintInvalidationContainer, |
3768 const LayoutRect& oldBounds, const LayoutPoint& oldLocation, const LayoutRec
t& newBounds, const LayoutPoint& newLocation) const | 3780 const LayoutRect& oldBounds, const LayoutPoint& oldLocation, const LayoutRec
t& newBounds, const LayoutPoint& newLocation) const |
3769 { | 3781 { |
3770 PaintInvalidationReason invalidationReason = RenderBoxModelObject::paintInva
lidationReason(paintInvalidationContainer, oldBounds, oldLocation, newBounds, ne
wLocation); | 3782 PaintInvalidationReason invalidationReason = RenderBoxModelObject::paintInva
lidationReason(paintInvalidationContainer, oldBounds, oldLocation, newBounds, ne
wLocation); |
3771 if (isFullPaintInvalidationReason(invalidationReason)) | 3783 if (isFullPaintInvalidationReason(invalidationReason)) |
3772 return invalidationReason; | 3784 return invalidationReason; |
3773 | 3785 |
3774 // If the transform is not identity or translation, incremental invalidation
is not applicable | 3786 // If the transform is not identity or translation, incremental invalidation
is not applicable |
3775 // because the difference between oldBounds and newBounds doesn't cover all
area needing invalidation. | 3787 // because the difference between oldBounds and newBounds doesn't cover all
area needing invalidation. |
3776 // FIXME: Should also consider ancestor transforms since paintInvalidationCo
ntainer. crbug.com/426111. | 3788 // FIXME: Should also consider ancestor transforms since paintInvalidationCo
ntainer. crbug.com/426111. |
3777 if (invalidationReason == PaintInvalidationIncremental | 3789 if (invalidationReason == PaintInvalidationIncremental |
3778 && paintInvalidationContainer != this | 3790 && paintInvalidationContainer != this |
3779 && hasLayer() && layer()->transform() && !layer()->transform()->isIdenti
tyOrTranslation()) | 3791 && hasLayer() && layer()->transform() && !layer()->transform()->isIdenti
tyOrTranslation()) |
3780 return PaintInvalidationBoundsChange; | 3792 return PaintInvalidationBoundsChange; |
3781 | 3793 |
3782 if (!style()->hasBackground() && !style()->hasBoxDecorations()) | 3794 if (!style()->hasBackground() && !style()->hasBoxDecorations()) { |
| 3795 // We could let incremental invalidation cover non-composited scrollbars
, but just |
| 3796 // do a full invalidation because incremental invalidation will go away
with slimming paint. |
| 3797 if (invalidationReason == PaintInvalidationIncremental && hasNonComposit
edScrollbars()) |
| 3798 return PaintInvalidationBorderBoxChange; |
3783 return invalidationReason; | 3799 return invalidationReason; |
| 3800 } |
3784 | 3801 |
3785 LayoutSize oldBorderBoxSize = computePreviousBorderBoxSize(oldBounds.size())
; | 3802 LayoutSize oldBorderBoxSize = computePreviousBorderBoxSize(oldBounds.size())
; |
3786 LayoutSize newBorderBoxSize = size(); | 3803 LayoutSize newBorderBoxSize = size(); |
3787 | 3804 |
3788 if (oldBorderBoxSize == newBorderBoxSize) | 3805 if (oldBorderBoxSize == newBorderBoxSize) |
3789 return invalidationReason; | 3806 return invalidationReason; |
3790 | 3807 |
| 3808 // See another hasNonCompositedScrollbars() callsite above. |
| 3809 if (hasNonCompositedScrollbars()) |
| 3810 return PaintInvalidationBorderBoxChange; |
| 3811 |
3791 // FIXME: Implement correct incremental invalidation for visual overflowing
effects. | 3812 // FIXME: Implement correct incremental invalidation for visual overflowing
effects. |
3792 if (style()->hasVisualOverflowingEffect() || style()->hasAppearance() || sty
le()->hasFilter()) | 3813 if (style()->hasVisualOverflowingEffect() || style()->hasAppearance() || sty
le()->hasFilter()) |
3793 return PaintInvalidationBorderBoxChange; | 3814 return PaintInvalidationBorderBoxChange; |
3794 | 3815 |
3795 if (style()->hasBorderRadius()) { | 3816 if (style()->hasBorderRadius()) { |
3796 // If a border-radius exists and width/height is smaller than radius wid
th/height, | 3817 // If a border-radius exists and width/height is smaller than radius wid
th/height, |
3797 // we need to fully invalidate to cover the changed radius. | 3818 // we need to fully invalidate to cover the changed radius. |
3798 RoundedRect oldRoundedRect = style()->getRoundedBorderFor(LayoutRect(Lay
outPoint(0, 0), oldBorderBoxSize)); | 3819 RoundedRect oldRoundedRect = style()->getRoundedBorderFor(LayoutRect(Lay
outPoint(0, 0), oldBorderBoxSize)); |
3799 RoundedRect newRoundedRect = style()->getRoundedBorderFor(LayoutRect(Lay
outPoint(0, 0), newBorderBoxSize)); | 3820 RoundedRect newRoundedRect = style()->getRoundedBorderFor(LayoutRect(Lay
outPoint(0, 0), newBorderBoxSize)); |
3800 if (oldRoundedRect.radii() != newRoundedRect.radii()) | 3821 if (oldRoundedRect.radii() != newRoundedRect.radii()) |
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4439 | 4460 |
4440 setLogicalTop(oldLogicalTop); | 4461 setLogicalTop(oldLogicalTop); |
4441 setLogicalWidth(oldLogicalWidth); | 4462 setLogicalWidth(oldLogicalWidth); |
4442 setMarginLeft(oldMarginLeft); | 4463 setMarginLeft(oldMarginLeft); |
4443 setMarginRight(oldMarginRight); | 4464 setMarginRight(oldMarginRight); |
4444 | 4465 |
4445 return borderBox; | 4466 return borderBox; |
4446 } | 4467 } |
4447 | 4468 |
4448 } // namespace blink | 4469 } // namespace blink |
OLD | NEW |