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

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

Issue 612323011: Use fragmented bounding box for hit-test/paint clipping. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Undid renaming Created 6 years, 2 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
« no previous file with comments | « Source/core/rendering/RenderLayer.h ('k') | no next file » | 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) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
3 * 3 *
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
5 * 5 *
6 * Other contributors: 6 * Other contributors:
7 * Robert O'Callahan <roc+@cs.cmu.edu> 7 * Robert O'Callahan <roc+@cs.cmu.edu>
8 * David Baron <dbaron@fas.harvard.edu> 8 * David Baron <dbaron@fas.harvard.edu>
9 * Christian Biesinger <cbiesinger@web.de> 9 * Christian Biesinger <cbiesinger@web.de>
10 * Randall Jesup <rjesup@wgate.com> 10 * Randall Jesup <rjesup@wgate.com>
(...skipping 1122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1133 // get our true bounding box. 1133 // get our true bounding box.
1134 RenderFlowThread* enclosingFlowThread = toRenderFlowThread(paginationLay er->renderer()); 1134 RenderFlowThread* enclosingFlowThread = toRenderFlowThread(paginationLay er->renderer());
1135 result = enclosingFlowThread->fragmentsBoundingBox(result); 1135 result = enclosingFlowThread->fragmentsBoundingBox(result);
1136 1136
1137 LayoutPoint rootLayerDelta; 1137 LayoutPoint rootLayerDelta;
1138 paginationLayer->convertToLayerCoords(rootLayer, rootLayerDelta); 1138 paginationLayer->convertToLayerCoords(rootLayer, rootLayerDelta);
1139 result.moveBy(rootLayerDelta); 1139 result.moveBy(rootLayerDelta);
1140 return result; 1140 return result;
1141 } 1141 }
1142 1142
1143 LayoutRect clipRect = layer->physicalBoundingBox(rootLayer); 1143 LayoutRect clipRect = layer->fragmentsBoundingBox(rootLayer);
1144 expandClipRectForDescendantsAndReflection(clipRect, layer, rootLayer, transp arencyBehavior, subPixelAccumulation, paintBehavior); 1144 expandClipRectForDescendantsAndReflection(clipRect, layer, rootLayer, transp arencyBehavior, subPixelAccumulation, paintBehavior);
1145 layer->renderer()->style()->filterOutsets().expandRect(clipRect); 1145 layer->renderer()->style()->filterOutsets().expandRect(clipRect);
1146 clipRect.move(subPixelAccumulation); 1146 clipRect.move(subPixelAccumulation);
1147 return clipRect; 1147 return clipRect;
1148 } 1148 }
1149 1149
1150 LayoutRect RenderLayer::paintingExtent(const RenderLayer* rootLayer, const Layou tRect& paintDirtyRect, const LayoutSize& subPixelAccumulation, PaintBehavior pai ntBehavior) 1150 LayoutRect RenderLayer::paintingExtent(const RenderLayer* rootLayer, const Layou tRect& paintDirtyRect, const LayoutSize& subPixelAccumulation, PaintBehavior pai ntBehavior)
1151 { 1151 {
1152 return intersection(transparencyClipBox(this, rootLayer, PaintingTransparenc yClipBox, RootOfTransparencyClipBox, subPixelAccumulation, paintBehavior), paint DirtyRect); 1152 return intersection(transparencyClipBox(this, rootLayer, PaintingTransparenc yClipBox, RootOfTransparencyClipBox, subPixelAccumulation, paintBehavior), paint DirtyRect);
1153 } 1153 }
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
1405 1405
1406 const RenderLayer* currLayer = this; 1406 const RenderLayer* currLayer = this;
1407 while (currLayer && currLayer != ancestorLayer) 1407 while (currLayer && currLayer != ancestorLayer)
1408 currLayer = accumulateOffsetTowardsAncestor(currLayer, ancestorLayer, lo cation); 1408 currLayer = accumulateOffsetTowardsAncestor(currLayer, ancestorLayer, lo cation);
1409 } 1409 }
1410 1410
1411 void RenderLayer::convertToLayerCoords(const RenderLayer* ancestorLayer, LayoutR ect& rect) const 1411 void RenderLayer::convertToLayerCoords(const RenderLayer* ancestorLayer, LayoutR ect& rect) const
1412 { 1412 {
1413 LayoutPoint delta; 1413 LayoutPoint delta;
1414 convertToLayerCoords(ancestorLayer, delta); 1414 convertToLayerCoords(ancestorLayer, delta);
1415 rect.move(-delta.x(), -delta.y()); 1415 rect.moveBy(delta);
1416 } 1416 }
1417 1417
1418 void RenderLayer::didUpdateNeedsCompositedScrolling() 1418 void RenderLayer::didUpdateNeedsCompositedScrolling()
1419 { 1419 {
1420 updateSelfPaintingLayer(); 1420 updateSelfPaintingLayer();
1421 } 1421 }
1422 1422
1423 void RenderLayer::updateReflectionInfo(const RenderStyle* oldStyle) 1423 void RenderLayer::updateReflectionInfo(const RenderStyle* oldStyle)
1424 { 1424 {
1425 ASSERT(!oldStyle || !renderer()->style()->reflectionDataEquivalent(oldStyle) ); 1425 ASSERT(!oldStyle || !renderer()->style()->reflectionDataEquivalent(oldStyle) );
(...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after
2218 RenderBox* box = renderBox(); 2218 RenderBox* box = renderBox();
2219 ASSERT(box); 2219 ASSERT(box);
2220 result = box->borderBoxRect(); 2220 result = box->borderBoxRect();
2221 result.unite(box->visualOverflowRect()); 2221 result.unite(box->visualOverflowRect());
2222 } 2222 }
2223 2223
2224 ASSERT(renderer()->view()); 2224 ASSERT(renderer()->view());
2225 return result; 2225 return result;
2226 } 2226 }
2227 2227
2228 LayoutRect RenderLayer::physicalBoundingBox(const RenderLayer* ancestorLayer, co nst LayoutPoint* offsetFromRoot) const 2228 LayoutRect RenderLayer::flippedLogicalBoundingBox() const
2229 { 2229 {
2230 LayoutRect result = logicalBoundingBox(); 2230 LayoutRect result = logicalBoundingBox();
2231 if (m_renderer->isBox()) 2231 if (m_renderer->isBox())
2232 renderBox()->flipForWritingMode(result); 2232 renderBox()->flipForWritingMode(result);
2233 else 2233 else
2234 m_renderer->containingBlock()->flipForWritingMode(result); 2234 m_renderer->containingBlock()->flipForWritingMode(result);
2235
2236 LayoutPoint delta;
2237 if (offsetFromRoot)
2238 delta = *offsetFromRoot;
2239 else
2240 convertToLayerCoords(ancestorLayer, delta);
2241
2242 result.moveBy(delta);
2243 return result; 2235 return result;
2244 } 2236 }
2245 2237
2238 LayoutRect RenderLayer::physicalBoundingBox(const RenderLayer* ancestorLayer, co nst LayoutPoint* offsetFromRoot) const
2239 {
2240 LayoutRect result = flippedLogicalBoundingBox();
2241 if (offsetFromRoot)
2242 result.moveBy(*offsetFromRoot);
2243 else
2244 convertToLayerCoords(ancestorLayer, result);
2245 return result;
2246 }
2247
2248 LayoutRect RenderLayer::fragmentsBoundingBox(const RenderLayer* ancestorLayer) c onst
2249 {
2250 if (!enclosingPaginationLayer())
2251 return physicalBoundingBox(ancestorLayer);
2252
2253 LayoutRect result = flippedLogicalBoundingBox();
2254
2255 // Split our box up into the actual fragment boxes that render in the column s/pages and unite those together to
2256 // get our true bounding box.
2257 LayoutPoint offsetWithinPaginationLayer;
2258 convertToLayerCoords(enclosingPaginationLayer(), offsetWithinPaginationLayer );
2259 result.moveBy(offsetWithinPaginationLayer);
2260
2261 RenderFlowThread* enclosingFlowThread = toRenderFlowThread(enclosingPaginati onLayer()->renderer());
2262 result = enclosingFlowThread->fragmentsBoundingBox(result);
2263 enclosingPaginationLayer()->convertToLayerCoords(ancestorLayer, result);
2264 return result;
2265 }
2266
2246 static void expandRectForReflectionAndStackingChildren(const RenderLayer* ancest orLayer, RenderLayer::CalculateBoundsOptions options, LayoutRect& result) 2267 static void expandRectForReflectionAndStackingChildren(const RenderLayer* ancest orLayer, RenderLayer::CalculateBoundsOptions options, LayoutRect& result)
2247 { 2268 {
2248 if (ancestorLayer->reflectionInfo() && !ancestorLayer->reflectionInfo()->ref lectionLayer()->hasCompositedLayerMapping()) 2269 if (ancestorLayer->reflectionInfo() && !ancestorLayer->reflectionInfo()->ref lectionLayer()->hasCompositedLayerMapping())
2249 result.unite(ancestorLayer->reflectionInfo()->reflectionLayer()->boundin gBoxForCompositing(ancestorLayer)); 2270 result.unite(ancestorLayer->reflectionInfo()->reflectionLayer()->boundin gBoxForCompositing(ancestorLayer));
2250 2271
2251 ASSERT(ancestorLayer->stackingNode()->isStackingContext() || !ancestorLayer- >stackingNode()->hasPositiveZOrderList()); 2272 ASSERT(ancestorLayer->stackingNode()->isStackingContext() || !ancestorLayer- >stackingNode()->hasPositiveZOrderList());
2252 2273
2253 #if ENABLE(ASSERT) 2274 #if ENABLE(ASSERT)
2254 LayerListMutationDetector mutationChecker(const_cast<RenderLayer*>(ancestorL ayer)->stackingNode()); 2275 LayerListMutationDetector mutationChecker(const_cast<RenderLayer*>(ancestorL ayer)->stackingNode());
2255 #endif 2276 #endif
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
2851 } 2872 }
2852 } 2873 }
2853 2874
2854 void showLayerTree(const blink::RenderObject* renderer) 2875 void showLayerTree(const blink::RenderObject* renderer)
2855 { 2876 {
2856 if (!renderer) 2877 if (!renderer)
2857 return; 2878 return;
2858 showLayerTree(renderer->enclosingLayer()); 2879 showLayerTree(renderer->enclosingLayer());
2859 } 2880 }
2860 #endif 2881 #endif
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderLayer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698