Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(380)

Side by Side Diff: Source/core/rendering/RenderBox.cpp

Issue 898783003: Move rendering/RenderLayer* to layout/ (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/rendering/RenderBox.h ('k') | Source/core/rendering/RenderBoxModelObject.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 20 matching lines...) Expand all
31 #include "core/editing/htmlediting.h" 31 #include "core/editing/htmlediting.h"
32 #include "core/frame/FrameHost.h" 32 #include "core/frame/FrameHost.h"
33 #include "core/frame/FrameView.h" 33 #include "core/frame/FrameView.h"
34 #include "core/frame/LocalFrame.h" 34 #include "core/frame/LocalFrame.h"
35 #include "core/frame/PinchViewport.h" 35 #include "core/frame/PinchViewport.h"
36 #include "core/frame/Settings.h" 36 #include "core/frame/Settings.h"
37 #include "core/html/HTMLElement.h" 37 #include "core/html/HTMLElement.h"
38 #include "core/html/HTMLFrameElementBase.h" 38 #include "core/html/HTMLFrameElementBase.h"
39 #include "core/html/HTMLFrameOwnerElement.h" 39 #include "core/html/HTMLFrameOwnerElement.h"
40 #include "core/layout/HitTestResult.h" 40 #include "core/layout/HitTestResult.h"
41 #include "core/layout/Layer.h"
41 #include "core/layout/LayoutTableCell.h" 42 #include "core/layout/LayoutTableCell.h"
42 #include "core/layout/compositing/RenderLayerCompositor.h" 43 #include "core/layout/compositing/LayerCompositor.h"
43 #include "core/page/AutoscrollController.h" 44 #include "core/page/AutoscrollController.h"
44 #include "core/page/EventHandler.h" 45 #include "core/page/EventHandler.h"
45 #include "core/page/Page.h" 46 #include "core/page/Page.h"
46 #include "core/paint/BackgroundImageGeometry.h" 47 #include "core/paint/BackgroundImageGeometry.h"
47 #include "core/paint/BoxPainter.h" 48 #include "core/paint/BoxPainter.h"
48 #include "core/rendering/PaintInfo.h" 49 #include "core/rendering/PaintInfo.h"
49 #include "core/rendering/RenderDeprecatedFlexibleBox.h" 50 #include "core/rendering/RenderDeprecatedFlexibleBox.h"
50 #include "core/rendering/RenderFlexibleBox.h" 51 #include "core/rendering/RenderFlexibleBox.h"
51 #include "core/rendering/RenderGeometryMap.h" 52 #include "core/rendering/RenderGeometryMap.h"
52 #include "core/rendering/RenderGrid.h" 53 #include "core/rendering/RenderGrid.h"
53 #include "core/rendering/RenderInline.h" 54 #include "core/rendering/RenderInline.h"
54 #include "core/rendering/RenderLayer.h"
55 #include "core/rendering/RenderListBox.h" 55 #include "core/rendering/RenderListBox.h"
56 #include "core/rendering/RenderListMarker.h" 56 #include "core/rendering/RenderListMarker.h"
57 #include "core/rendering/RenderMultiColumnSpannerPlaceholder.h" 57 #include "core/rendering/RenderMultiColumnSpannerPlaceholder.h"
58 #include "core/rendering/RenderScrollbarPart.h" 58 #include "core/rendering/RenderScrollbarPart.h"
59 #include "core/rendering/RenderView.h" 59 #include "core/rendering/RenderView.h"
60 #include "core/rendering/style/ShadowList.h" 60 #include "core/rendering/style/ShadowList.h"
61 #include "platform/LengthFunctions.h" 61 #include "platform/LengthFunctions.h"
62 #include "platform/geometry/FloatQuad.h" 62 #include "platform/geometry/FloatQuad.h"
63 #include "platform/geometry/FloatRoundedRect.h" 63 #include "platform/geometry/FloatRoundedRect.h"
64 #include "platform/geometry/TransformState.h" 64 #include "platform/geometry/TransformState.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 108
109 LayerType RenderBox::layerTypeRequired() const 109 LayerType RenderBox::layerTypeRequired() const
110 { 110 {
111 // hasAutoZIndex only returns true if the element is positioned or a flex-it em since 111 // hasAutoZIndex only returns true if the element is positioned or a flex-it em since
112 // position:static elements that are not flex-items get their z-index coerce d to auto. 112 // position:static elements that are not flex-items get their z-index coerce d to auto.
113 if (isPositioned() || createsGroup() || hasClipPath() || hasTransformRelated Property() 113 if (isPositioned() || createsGroup() || hasClipPath() || hasTransformRelated Property()
114 || hasHiddenBackface() || hasReflection() || style()->specifiesColumns() 114 || hasHiddenBackface() || hasReflection() || style()->specifiesColumns()
115 || !style()->hasAutoZIndex() || style()->shouldCompositeForCurrentAnimat ions()) 115 || !style()->hasAutoZIndex() || style()->shouldCompositeForCurrentAnimat ions())
116 return NormalLayer; 116 return NormalLayer;
117 117
118 // Ensure that explicit use of scroll-blocks-on creates a RenderLayer (since we might need 118 // Ensure that explicit use of scroll-blocks-on creates a Layer (since we mi ght need
119 // it to be composited). 119 // it to be composited).
120 if (style()->hasScrollBlocksOn()) { 120 if (style()->hasScrollBlocksOn()) {
121 if (isDocumentElement()) { 121 if (isDocumentElement()) {
122 ASSERT(style()->scrollBlocksOn() == view()->style()->scrollBlocksOn( )); 122 ASSERT(style()->scrollBlocksOn() == view()->style()->scrollBlocksOn( ));
123 return NoLayer; 123 return NoLayer;
124 } 124 }
125 return NormalLayer; 125 return NormalLayer;
126 } 126 }
127 if (hasOverflowClip()) 127 if (hasOverflowClip())
128 return OverflowClipLayer; 128 return OverflowClipLayer;
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 } 630 }
631 631
632 bool RenderBox::canResize() const 632 bool RenderBox::canResize() const
633 { 633 {
634 // We need a special case for <iframe> because they never have 634 // We need a special case for <iframe> because they never have
635 // hasOverflowClip(). However, they do "implicitly" clip their contents, so 635 // hasOverflowClip(). However, they do "implicitly" clip their contents, so
636 // we want to allow resizing them also. 636 // we want to allow resizing them also.
637 return (hasOverflowClip() || isRenderIFrame()) && style()->resize() != RESIZ E_NONE; 637 return (hasOverflowClip() || isRenderIFrame()) && style()->resize() != RESIZ E_NONE;
638 } 638 }
639 639
640 void RenderBox::addLayerHitTestRects(LayerHitTestRects& layerRects, const Render Layer* currentLayer, const LayoutPoint& layerOffset, const LayoutRect& container Rect) const 640 void RenderBox::addLayerHitTestRects(LayerHitTestRects& layerRects, const Layer* currentLayer, const LayoutPoint& layerOffset, const LayoutRect& containerRect) const
641 { 641 {
642 LayoutPoint adjustedLayerOffset = layerOffset + locationOffset(); 642 LayoutPoint adjustedLayerOffset = layerOffset + locationOffset();
643 RenderBoxModelObject::addLayerHitTestRects(layerRects, currentLayer, adjuste dLayerOffset, containerRect); 643 RenderBoxModelObject::addLayerHitTestRects(layerRects, currentLayer, adjuste dLayerOffset, containerRect);
644 } 644 }
645 645
646 void RenderBox::computeSelfHitTestRects(Vector<LayoutRect>& rects, const LayoutP oint& layerOffset) const 646 void RenderBox::computeSelfHitTestRects(Vector<LayoutRect>& rects, const LayoutP oint& layerOffset) const
647 { 647 {
648 if (!size().isEmpty()) 648 if (!size().isEmpty())
649 rects.append(LayoutRect(layerOffset, size())); 649 rects.append(LayoutRect(layerOffset, size()));
650 } 650 }
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 return std::max(LayoutUnit(), height); 1129 return std::max(LayoutUnit(), height);
1130 } 1130 }
1131 1131
1132 // Hit Testing 1132 // Hit Testing
1133 bool RenderBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& result , const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffs et, HitTestAction action) 1133 bool RenderBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& result , const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffs et, HitTestAction action)
1134 { 1134 {
1135 LayoutPoint adjustedLocation = accumulatedOffset + location(); 1135 LayoutPoint adjustedLocation = accumulatedOffset + location();
1136 1136
1137 // Check kids first. 1137 // Check kids first.
1138 for (RenderObject* child = slowLastChild(); child; child = child->previousSi bling()) { 1138 for (RenderObject* child = slowLastChild(); child; child = child->previousSi bling()) {
1139 if ((!child->hasLayer() || !toRenderLayerModelObject(child)->layer()->is SelfPaintingLayer()) && child->nodeAtPoint(request, result, locationInContainer, adjustedLocation, action)) { 1139 if ((!child->hasLayer() || !toLayoutLayerModelObject(child)->layer()->is SelfPaintingLayer()) && child->nodeAtPoint(request, result, locationInContainer, adjustedLocation, action)) {
1140 updateHitTestResult(result, locationInContainer.point() - toLayoutSi ze(adjustedLocation)); 1140 updateHitTestResult(result, locationInContainer.point() - toLayoutSi ze(adjustedLocation));
1141 return true; 1141 return true;
1142 } 1142 }
1143 } 1143 }
1144 1144
1145 // Check our bounds next. For this purpose always assume that we can only be hit in the 1145 // Check our bounds next. For this purpose always assume that we can only be hit in the
1146 // foreground phase (which is true for replaced elements like images). 1146 // foreground phase (which is true for replaced elements like images).
1147 LayoutRect boundsRect = borderBoxRect(); 1147 LayoutRect boundsRect = borderBoxRect();
1148 boundsRect.moveBy(adjustedLocation); 1148 boundsRect.moveBy(adjustedLocation);
1149 if (visibleToHitTestRequest(request) && action == HitTestForeground && locat ionInContainer.intersects(boundsRect)) { 1149 if (visibleToHitTestRequest(request) && action == HitTestForeground && locat ionInContainer.intersects(boundsRect)) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1233 1233
1234 static bool isCandidateForOpaquenessTest(RenderBox* childBox) 1234 static bool isCandidateForOpaquenessTest(RenderBox* childBox)
1235 { 1235 {
1236 RenderStyle* childStyle = childBox->style(); 1236 RenderStyle* childStyle = childBox->style();
1237 if (childStyle->position() != StaticPosition && childBox->containingBlock() != childBox->parent()) 1237 if (childStyle->position() != StaticPosition && childBox->containingBlock() != childBox->parent())
1238 return false; 1238 return false;
1239 if (childStyle->visibility() != VISIBLE || childStyle->shapeOutside()) 1239 if (childStyle->visibility() != VISIBLE || childStyle->shapeOutside())
1240 return false; 1240 return false;
1241 if (childBox->size().isZero()) 1241 if (childBox->size().isZero())
1242 return false; 1242 return false;
1243 if (RenderLayer* childLayer = childBox->layer()) { 1243 if (Layer* childLayer = childBox->layer()) {
1244 // FIXME: perhaps this could be less conservative? 1244 // FIXME: perhaps this could be less conservative?
1245 if (childLayer->compositingState() != NotComposited) 1245 if (childLayer->compositingState() != NotComposited)
1246 return false; 1246 return false;
1247 // FIXME: Deal with z-index. 1247 // FIXME: Deal with z-index.
1248 if (!childStyle->hasAutoZIndex()) 1248 if (!childStyle->hasAutoZIndex())
1249 return false; 1249 return false;
1250 if (childLayer->hasTransformRelatedProperty() || childLayer->isTranspare nt() || childLayer->hasFilter()) 1250 if (childLayer->hasTransformRelatedProperty() || childLayer->isTranspare nt() || childLayer->hasFilter())
1251 return false; 1251 return false;
1252 if (childBox->hasOverflowClip() && childStyle->hasBorderRadius()) 1252 if (childBox->hasOverflowClip() && childStyle->hasBorderRadius())
1253 return false; 1253 return false;
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1381 for (const FillLayer* curLayer = &layers; curLayer; curLayer = curLayer->nex t()) { 1381 for (const FillLayer* curLayer = &layers; curLayer; curLayer = curLayer->nex t()) {
1382 if (curLayer->image() && image == curLayer->image()->data() && curLayer- >image()->canRender(*this, style()->effectiveZoom())) { 1382 if (curLayer->image() && image == curLayer->image()->data() && curLayer- >image()->canRender(*this, style()->effectiveZoom())) {
1383 for (RenderObject* layerRenderer : layerRenderers) 1383 for (RenderObject* layerRenderer : layerRenderers)
1384 layerRenderer->setShouldDoFullPaintInvalidation(); 1384 layerRenderer->setShouldDoFullPaintInvalidation();
1385 return true; 1385 return true;
1386 } 1386 }
1387 } 1387 }
1388 return false; 1388 return false;
1389 } 1389 }
1390 1390
1391 PaintInvalidationReason RenderBox::invalidatePaintIfNeeded(const PaintInvalidati onState& paintInvalidationState, const RenderLayerModelObject& newPaintInvalidat ionContainer) 1391 PaintInvalidationReason RenderBox::invalidatePaintIfNeeded(const PaintInvalidati onState& paintInvalidationState, const LayoutLayerModelObject& newPaintInvalidat ionContainer)
1392 { 1392 {
1393 PaintInvalidationReason reason = RenderBoxModelObject::invalidatePaintIfNeed ed(paintInvalidationState, newPaintInvalidationContainer); 1393 PaintInvalidationReason reason = RenderBoxModelObject::invalidatePaintIfNeed ed(paintInvalidationState, newPaintInvalidationContainer);
1394 1394
1395 // If we are set to do a full paint invalidation that means the RenderView w ill be 1395 // If we are set to do a full paint invalidation that means the RenderView w ill be
1396 // issue paint invalidations. We can then skip issuing of paint invalidation s for the child 1396 // issue paint invalidations. We can then skip issuing of paint invalidation s for the child
1397 // renderers as they'll be covered by the RenderView. 1397 // renderers as they'll be covered by the RenderView.
1398 if (!view()->doingFullPaintInvalidation() && !isFullPaintInvalidationReason( reason)) { 1398 if (!view()->doingFullPaintInvalidation() && !isFullPaintInvalidationReason( reason)) {
1399 invalidatePaintForOverflowIfNeeded(); 1399 invalidatePaintForOverflowIfNeeded();
1400 1400
1401 // Issue paint invalidations for any scrollbars if there is a scrollable area for this renderer. 1401 // Issue paint invalidations for any scrollbars if there is a scrollable area for this renderer.
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1554 ? view()->frameView()->unscaledVisibleContentSize().height() 1554 ? view()->frameView()->unscaledVisibleContentSize().height()
1555 : view()->frameView()->unscaledVisibleContentSize().width(); 1555 : view()->frameView()->unscaledVisibleContentSize().width();
1556 LayoutUnit fillAvailableExtent = containingBlock()->availableLogicalHeig ht(ExcludeMarginBorderPadding); 1556 LayoutUnit fillAvailableExtent = containingBlock()->availableLogicalHeig ht(ExcludeMarginBorderPadding);
1557 return std::min(fillAvailableExtent, fillFallbackExtent); 1557 return std::min(fillAvailableExtent, fillFallbackExtent);
1558 } 1558 }
1559 1559
1560 // Use the content box logical height as specified by the style. 1560 // Use the content box logical height as specified by the style.
1561 return cb->adjustContentBoxLogicalHeightForBoxSizing(logicalHeightLength.val ue()); 1561 return cb->adjustContentBoxLogicalHeightForBoxSizing(logicalHeightLength.val ue());
1562 } 1562 }
1563 1563
1564 void RenderBox::mapLocalToContainer(const RenderLayerModelObject* paintInvalidat ionContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wa sFixed, const PaintInvalidationState* paintInvalidationState) const 1564 void RenderBox::mapLocalToContainer(const LayoutLayerModelObject* paintInvalidat ionContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wa sFixed, const PaintInvalidationState* paintInvalidationState) const
1565 { 1565 {
1566 if (paintInvalidationContainer == this) 1566 if (paintInvalidationContainer == this)
1567 return; 1567 return;
1568 1568
1569 if (paintInvalidationState && paintInvalidationState->canMapToContainer(pain tInvalidationContainer)) { 1569 if (paintInvalidationState && paintInvalidationState->canMapToContainer(pain tInvalidationContainer)) {
1570 LayoutSize offset = paintInvalidationState->paintOffset() + locationOffs et(); 1570 LayoutSize offset = paintInvalidationState->paintOffset() + locationOffs et();
1571 if (style()->hasInFlowPosition() && layer()) 1571 if (style()->hasInFlowPosition() && layer())
1572 offset += layer()->offsetForInFlowPosition(); 1572 offset += layer()->offsetForInFlowPosition();
1573 transformState.move(offset); 1573 transformState.move(offset);
1574 return; 1574 return;
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
1761 ensureRareData().m_spannerPlaceholder = &placeholder; 1761 ensureRareData().m_spannerPlaceholder = &placeholder;
1762 } 1762 }
1763 1763
1764 void RenderBox::clearSpannerPlaceholder() 1764 void RenderBox::clearSpannerPlaceholder()
1765 { 1765 {
1766 if (!m_rareData) 1766 if (!m_rareData)
1767 return; 1767 return;
1768 m_rareData->m_spannerPlaceholder = 0; 1768 m_rareData->m_spannerPlaceholder = 0;
1769 } 1769 }
1770 1770
1771 LayoutRect RenderBox::clippedOverflowRectForPaintInvalidation(const RenderLayerM odelObject* paintInvalidationContainer, const PaintInvalidationState* paintInval idationState) const 1771 LayoutRect RenderBox::clippedOverflowRectForPaintInvalidation(const LayoutLayerM odelObject* paintInvalidationContainer, const PaintInvalidationState* paintInval idationState) const
1772 { 1772 {
1773 if (style()->visibility() != VISIBLE) { 1773 if (style()->visibility() != VISIBLE) {
1774 RenderLayer* layer = enclosingLayer(); 1774 Layer* layer = enclosingLayer();
1775 layer->updateDescendantDependentFlags(); 1775 layer->updateDescendantDependentFlags();
1776 if (layer->subtreeIsInvisible()) 1776 if (layer->subtreeIsInvisible())
1777 return LayoutRect(); 1777 return LayoutRect();
1778 } 1778 }
1779 1779
1780 LayoutRect r = visualOverflowRect(); 1780 LayoutRect r = visualOverflowRect();
1781 mapRectToPaintInvalidationBacking(paintInvalidationContainer, r, paintInvali dationState); 1781 mapRectToPaintInvalidationBacking(paintInvalidationContainer, r, paintInvali dationState);
1782 return r; 1782 return r;
1783 } 1783 }
1784 1784
1785 void RenderBox::mapRectToPaintInvalidationBacking(const RenderLayerModelObject* paintInvalidationContainer, LayoutRect& rect, const PaintInvalidationState* pain tInvalidationState) const 1785 void RenderBox::mapRectToPaintInvalidationBacking(const LayoutLayerModelObject* paintInvalidationContainer, LayoutRect& rect, const PaintInvalidationState* pain tInvalidationState) const
1786 { 1786 {
1787 // The rect we compute at each step is shifted by our x/y offset in the pare nt container's coordinate space. 1787 // The rect we compute at each step is shifted by our x/y offset in the pare nt container's coordinate space.
1788 // Only when we cross a writing mode boundary will we have to possibly flipF orWritingMode (to convert into a more appropriate 1788 // Only when we cross a writing mode boundary will we have to possibly flipF orWritingMode (to convert into a more appropriate
1789 // offset corner for the enclosing container). This allows for a fully RL or BT document to issue paint invalidations 1789 // offset corner for the enclosing container). This allows for a fully RL or BT document to issue paint invalidations
1790 // properly even during layout, since the rect remains flipped all the way u ntil the end. 1790 // properly even during layout, since the rect remains flipped all the way u ntil the end.
1791 // 1791 //
1792 // RenderView::computeRectForPaintInvalidation then converts the rect to phy sical coordinates. We also convert to 1792 // RenderView::computeRectForPaintInvalidation then converts the rect to phy sical coordinates. We also convert to
1793 // physical when we hit a paintInvalidationContainer boundary. Therefore the final rect returned is always in the 1793 // physical when we hit a paintInvalidationContainer boundary. Therefore the final rect returned is always in the
1794 // physical coordinate space of the paintInvalidationContainer. 1794 // physical coordinate space of the paintInvalidationContainer.
1795 RenderStyle* styleToUse = style(); 1795 RenderStyle* styleToUse = style();
(...skipping 2083 matching lines...) Expand 10 before | Expand all | Expand 10 after
3879 return node && node->isElementNode() && (toElement(node)->isFormControlEleme nt() || isHTMLImageElement(toElement(node))); 3879 return node && node->isElementNode() && (toElement(node)->isFormControlEleme nt() || isHTMLImageElement(toElement(node)));
3880 } 3880 }
3881 3881
3882 bool RenderBox::avoidsFloats() const 3882 bool RenderBox::avoidsFloats() const
3883 { 3883 {
3884 return isReplaced() || isReplacedElement(node()) || hasOverflowClip() || isH R() || isLegend() || isWritingModeRoot() || isFlexItemIncludingDeprecated(); 3884 return isReplaced() || isReplacedElement(node()) || hasOverflowClip() || isH R() || isLegend() || isWritingModeRoot() || isFlexItemIncludingDeprecated();
3885 } 3885 }
3886 3886
3887 bool RenderBox::hasNonCompositedScrollbars() const 3887 bool RenderBox::hasNonCompositedScrollbars() const
3888 { 3888 {
3889 if (RenderLayer* layer = this->layer()) { 3889 if (Layer* layer = this->layer()) {
3890 if (RenderLayerScrollableArea* scrollableArea = layer->scrollableArea()) { 3890 if (LayerScrollableArea* scrollableArea = layer->scrollableArea()) {
3891 if (scrollableArea->hasHorizontalScrollbar() && !scrollableArea->lay erForHorizontalScrollbar()) 3891 if (scrollableArea->hasHorizontalScrollbar() && !scrollableArea->lay erForHorizontalScrollbar())
3892 return true; 3892 return true;
3893 if (scrollableArea->hasVerticalScrollbar() && !scrollableArea->layer ForVerticalScrollbar()) 3893 if (scrollableArea->hasVerticalScrollbar() && !scrollableArea->layer ForVerticalScrollbar())
3894 return true; 3894 return true;
3895 } 3895 }
3896 } 3896 }
3897 return false; 3897 return false;
3898 } 3898 }
3899 3899
3900 PaintInvalidationReason RenderBox::paintInvalidationReason(const RenderLayerMode lObject& paintInvalidationContainer, 3900 PaintInvalidationReason RenderBox::paintInvalidationReason(const LayoutLayerMode lObject& paintInvalidationContainer,
3901 const LayoutRect& oldBounds, const LayoutPoint& oldLocation, const LayoutRec t& newBounds, const LayoutPoint& newLocation) const 3901 const LayoutRect& oldBounds, const LayoutPoint& oldLocation, const LayoutRec t& newBounds, const LayoutPoint& newLocation) const
3902 { 3902 {
3903 PaintInvalidationReason invalidationReason = RenderBoxModelObject::paintInva lidationReason(paintInvalidationContainer, oldBounds, oldLocation, newBounds, ne wLocation); 3903 PaintInvalidationReason invalidationReason = RenderBoxModelObject::paintInva lidationReason(paintInvalidationContainer, oldBounds, oldLocation, newBounds, ne wLocation);
3904 if (isFullPaintInvalidationReason(invalidationReason)) 3904 if (isFullPaintInvalidationReason(invalidationReason))
3905 return invalidationReason; 3905 return invalidationReason;
3906 3906
3907 // If the transform is not identity or translation, incremental invalidation is not applicable 3907 // If the transform is not identity or translation, incremental invalidation is not applicable
3908 // because the difference between oldBounds and newBounds doesn't cover all area needing invalidation. 3908 // because the difference between oldBounds and newBounds doesn't cover all area needing invalidation.
3909 // FIXME: Should also consider ancestor transforms since paintInvalidationCo ntainer. crbug.com/426111. 3909 // FIXME: Should also consider ancestor transforms since paintInvalidationCo ntainer. crbug.com/426111.
3910 if (invalidationReason == PaintInvalidationIncremental 3910 if (invalidationReason == PaintInvalidationIncremental
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
3943 } 3943 }
3944 3944
3945 if (oldBorderBoxSize.width() != newBorderBoxSize.width() && mustInvalidateBa ckgroundOrBorderPaintOnWidthChange()) 3945 if (oldBorderBoxSize.width() != newBorderBoxSize.width() && mustInvalidateBa ckgroundOrBorderPaintOnWidthChange())
3946 return PaintInvalidationBorderBoxChange; 3946 return PaintInvalidationBorderBoxChange;
3947 if (oldBorderBoxSize.height() != newBorderBoxSize.height() && mustInvalidate BackgroundOrBorderPaintOnHeightChange()) 3947 if (oldBorderBoxSize.height() != newBorderBoxSize.height() && mustInvalidate BackgroundOrBorderPaintOnHeightChange())
3948 return PaintInvalidationBorderBoxChange; 3948 return PaintInvalidationBorderBoxChange;
3949 3949
3950 return PaintInvalidationIncremental; 3950 return PaintInvalidationIncremental;
3951 } 3951 }
3952 3952
3953 void RenderBox::incrementallyInvalidatePaint(const RenderLayerModelObject& paint InvalidationContainer, const LayoutRect& oldBounds, const LayoutRect& newBounds, const LayoutPoint& positionFromPaintInvalidationBacking) 3953 void RenderBox::incrementallyInvalidatePaint(const LayoutLayerModelObject& paint InvalidationContainer, const LayoutRect& oldBounds, const LayoutRect& newBounds, const LayoutPoint& positionFromPaintInvalidationBacking)
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
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 invalidatePaintRectClippedByOldAndNewBounds(paintInvalidationContainer, bottomDeltaRect, oldBounds, newBounds);
4003 } 4003 }
4004 } 4004 }
4005 4005
4006 void RenderBox::invalidatePaintRectClippedByOldAndNewBounds(const RenderLayerMod elObject& paintInvalidationContainer, const LayoutRect& rect, const LayoutRect& oldBounds, const LayoutRect& newBounds) 4006 void RenderBox::invalidatePaintRectClippedByOldAndNewBounds(const LayoutLayerMod elObject& paintInvalidationContainer, const LayoutRect& rect, const LayoutRect& oldBounds, const LayoutRect& newBounds)
4007 { 4007 {
4008 if (rect.isEmpty()) 4008 if (rect.isEmpty())
4009 return; 4009 return;
4010 LayoutRect rectClippedByOldBounds = intersection(rect, oldBounds); 4010 LayoutRect rectClippedByOldBounds = intersection(rect, oldBounds);
4011 LayoutRect rectClippedByNewBounds = intersection(rect, newBounds); 4011 LayoutRect rectClippedByNewBounds = intersection(rect, newBounds);
4012 // Invalidate only once if the clipped rects equal. 4012 // Invalidate only once if the clipped rects equal.
4013 if (rectClippedByOldBounds == rectClippedByNewBounds) { 4013 if (rectClippedByOldBounds == rectClippedByNewBounds) {
4014 invalidatePaintUsingContainer(&paintInvalidationContainer, rectClippedBy OldBounds, PaintInvalidationIncremental); 4014 invalidatePaintUsingContainer(&paintInvalidationContainer, rectClippedBy OldBounds, PaintInvalidationIncremental);
4015 return; 4015 return;
4016 } 4016 }
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
4278 if (isReplaced()) { 4278 if (isReplaced()) {
4279 int result = direction == HorizontalLine ? marginHeight() + size().heigh t() : marginWidth() + size().width(); 4279 int result = direction == HorizontalLine ? marginHeight() + size().heigh t() : marginWidth() + size().width();
4280 if (baselineType == AlphabeticBaseline) 4280 if (baselineType == AlphabeticBaseline)
4281 return result; 4281 return result;
4282 return result - result / 2; 4282 return result - result / 2;
4283 } 4283 }
4284 return 0; 4284 return 0;
4285 } 4285 }
4286 4286
4287 4287
4288 RenderLayer* RenderBox::enclosingFloatPaintingLayer() const 4288 Layer* RenderBox::enclosingFloatPaintingLayer() const
4289 { 4289 {
4290 const RenderObject* curr = this; 4290 const RenderObject* curr = this;
4291 while (curr) { 4291 while (curr) {
4292 RenderLayer* layer = curr->hasLayer() && curr->isBox() ? toRenderBox(cur r)->layer() : 0; 4292 Layer* layer = curr->hasLayer() && curr->isBox() ? toRenderBox(curr)->la yer() : 0;
4293 if (layer && layer->isSelfPaintingLayer()) 4293 if (layer && layer->isSelfPaintingLayer())
4294 return layer; 4294 return layer;
4295 curr = curr->parent(); 4295 curr = curr->parent();
4296 } 4296 }
4297 return 0; 4297 return 0;
4298 } 4298 }
4299 4299
4300 LayoutRect RenderBox::logicalVisualOverflowRectForPropagation(RenderStyle* paren tStyle) const 4300 LayoutRect RenderBox::logicalVisualOverflowRectForPropagation(RenderStyle* paren tStyle) const
4301 { 4301 {
4302 LayoutRect rect = visualOverflowRectForPropagation(parentStyle); 4302 LayoutRect rect = visualOverflowRectForPropagation(parentStyle);
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
4572 setLogicalTop(oldLogicalTop); 4572 setLogicalTop(oldLogicalTop);
4573 setLogicalWidth(oldLogicalWidth); 4573 setLogicalWidth(oldLogicalWidth);
4574 setLogicalLeft(oldLogicalLeft); 4574 setLogicalLeft(oldLogicalLeft);
4575 setMarginLeft(oldMarginLeft); 4575 setMarginLeft(oldMarginLeft);
4576 setMarginRight(oldMarginRight); 4576 setMarginRight(oldMarginRight);
4577 } 4577 }
4578 4578
4579 void RenderBox::invalidateDisplayItemClients(DisplayItemList* displayItemList) c onst 4579 void RenderBox::invalidateDisplayItemClients(DisplayItemList* displayItemList) c onst
4580 { 4580 {
4581 RenderBoxModelObject::invalidateDisplayItemClients(displayItemList); 4581 RenderBoxModelObject::invalidateDisplayItemClients(displayItemList);
4582 if (RenderLayerScrollableArea* area = scrollableArea()) 4582 if (LayerScrollableArea* area = scrollableArea())
4583 displayItemList->invalidate(area->displayItemClient()); 4583 displayItemList->invalidate(area->displayItemClient());
4584 } 4584 }
4585 4585
4586 } // namespace blink 4586 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderBox.h ('k') | Source/core/rendering/RenderBoxModelObject.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698