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

Side by Side Diff: Source/core/layout/Layer.cpp

Issue 952273006: Make the constructor of a LayoutRect from an IntRect explicit. (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/layout/HitTestLocation.cpp ('k') | Source/core/layout/LayerClipper.cpp » ('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) 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 1567 matching lines...) Expand 10 before | Expand all | Expand 10 after
1578 1578
1579 // Calculate clip rects relative to the enclosingPaginationLayer. The purpos e of this call is to determine our bounds clipped to intermediate 1579 // Calculate clip rects relative to the enclosingPaginationLayer. The purpos e of this call is to determine our bounds clipped to intermediate
1580 // layers between us and the pagination context. It's important to minimize the number of fragments we need to create and this helps with that. 1580 // layers between us and the pagination context. It's important to minimize the number of fragments we need to create and this helps with that.
1581 ClipRectsContext paginationClipRectsContext(enclosingPaginationLayer(), clip RectsCacheSlot, inOverlayScrollbarSizeRelevancy); 1581 ClipRectsContext paginationClipRectsContext(enclosingPaginationLayer(), clip RectsCacheSlot, inOverlayScrollbarSizeRelevancy);
1582 if (respectOverflowClip == IgnoreOverflowClip) 1582 if (respectOverflowClip == IgnoreOverflowClip)
1583 paginationClipRectsContext.setIgnoreOverflowClip(); 1583 paginationClipRectsContext.setIgnoreOverflowClip();
1584 LayoutRect layerBoundsInFlowThread; 1584 LayoutRect layerBoundsInFlowThread;
1585 ClipRect backgroundRectInFlowThread; 1585 ClipRect backgroundRectInFlowThread;
1586 ClipRect foregroundRectInFlowThread; 1586 ClipRect foregroundRectInFlowThread;
1587 ClipRect outlineRectInFlowThread; 1587 ClipRect outlineRectInFlowThread;
1588 clipper().calculateRects(paginationClipRectsContext, LayoutRect::infiniteInt Rect(), layerBoundsInFlowThread, backgroundRectInFlowThread, foregroundRectInFlo wThread, 1588 clipper().calculateRects(paginationClipRectsContext, LayoutRect(LayoutRect:: infiniteIntRect()), layerBoundsInFlowThread, backgroundRectInFlowThread, foregro undRectInFlowThread,
1589 outlineRectInFlowThread, &offsetWithinPaginatedLayer); 1589 outlineRectInFlowThread, &offsetWithinPaginatedLayer);
1590 1590
1591 // Take our bounding box within the flow thread and clip it. 1591 // Take our bounding box within the flow thread and clip it.
1592 LayoutRect layerBoundingBoxInFlowThread = layerBoundingBox ? *layerBoundingB ox : physicalBoundingBox(enclosingPaginationLayer(), &offsetWithinPaginatedLayer ); 1592 LayoutRect layerBoundingBoxInFlowThread = layerBoundingBox ? *layerBoundingB ox : physicalBoundingBox(enclosingPaginationLayer(), &offsetWithinPaginatedLayer );
1593 layerBoundingBoxInFlowThread.intersect(backgroundRectInFlowThread.rect()); 1593 layerBoundingBoxInFlowThread.intersect(backgroundRectInFlowThread.rect());
1594 1594
1595 // Make the dirty rect relative to the fragmentation context (multicol conta iner, etc.). 1595 // Make the dirty rect relative to the fragmentation context (multicol conta iner, etc.).
1596 LayoutFlowThread* enclosingFlowThread = toLayoutFlowThread(enclosingPaginati onLayer()->renderer()); 1596 LayoutFlowThread* enclosingFlowThread = toLayoutFlowThread(enclosingPaginati onLayer()->renderer());
1597 LayoutPoint offsetOfPaginationLayerFromRoot; // Visual offset from the root layer to the nearest fragmentation context. 1597 LayoutPoint offsetOfPaginationLayerFromRoot; // Visual offset from the root layer to the nearest fragmentation context.
1598 bool rootLayerIsInsidePaginationLayer = rootLayer->enclosingPaginationLayer( ) == enclosingPaginationLayer(); 1598 bool rootLayerIsInsidePaginationLayer = rootLayer->enclosingPaginationLayer( ) == enclosingPaginationLayer();
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1644 fragment.intersect(fragment.paginationClip); 1644 fragment.intersect(fragment.paginationClip);
1645 } 1645 }
1646 } 1646 }
1647 1647
1648 static inline LayoutRect frameVisibleRect(LayoutObject* renderer) 1648 static inline LayoutRect frameVisibleRect(LayoutObject* renderer)
1649 { 1649 {
1650 FrameView* frameView = renderer->document().view(); 1650 FrameView* frameView = renderer->document().view();
1651 if (!frameView) 1651 if (!frameView)
1652 return LayoutRect(); 1652 return LayoutRect();
1653 1653
1654 return frameView->visibleContentRect(); 1654 return LayoutRect(frameView->visibleContentRect());
1655 } 1655 }
1656 1656
1657 bool Layer::hitTest(const HitTestRequest& request, HitTestResult& result) 1657 bool Layer::hitTest(const HitTestRequest& request, HitTestResult& result)
1658 { 1658 {
1659 return hitTest(request, result.hitTestLocation(), result); 1659 return hitTest(request, result.hitTestLocation(), result);
1660 } 1660 }
1661 1661
1662 bool Layer::hitTest(const HitTestRequest& request, const HitTestLocation& hitTes tLocation, HitTestResult& result) 1662 bool Layer::hitTest(const HitTestRequest& request, const HitTestLocation& hitTes tLocation, HitTestResult& result)
1663 { 1663 {
1664 ASSERT(isSelfPaintingLayer() || hasSelfPaintingLayerDescendant()); 1664 ASSERT(isSelfPaintingLayer() || hasSelfPaintingLayerDescendant());
1665 1665
1666 // LayoutView should make sure to update layout before entering hit testing 1666 // LayoutView should make sure to update layout before entering hit testing
1667 ASSERT(!renderer()->frame()->view()->layoutPending()); 1667 ASSERT(!renderer()->frame()->view()->layoutPending());
1668 ASSERT(!renderer()->document().layoutView()->needsLayout()); 1668 ASSERT(!renderer()->document().layoutView()->needsLayout());
1669 1669
1670 // Start with frameVisibleRect to ensure we include the scrollbars. 1670 // Start with frameVisibleRect to ensure we include the scrollbars.
1671 LayoutRect hitTestArea = frameVisibleRect(renderer()); 1671 LayoutRect hitTestArea = frameVisibleRect(renderer());
1672 if (request.ignoreClipping()) 1672 if (request.ignoreClipping())
1673 hitTestArea.unite(renderer()->view()->documentRect()); 1673 hitTestArea.unite(LayoutRect(renderer()->view()->documentRect()));
1674 1674
1675 Layer* insideLayer = hitTestLayer(this, 0, request, result, hitTestArea, hit TestLocation, false); 1675 Layer* insideLayer = hitTestLayer(this, 0, request, result, hitTestArea, hit TestLocation, false);
1676 if (!insideLayer) { 1676 if (!insideLayer) {
1677 // We didn't hit any layer. If we are the root layer and the mouse is -- or just was -- down, 1677 // We didn't hit any layer. If we are the root layer and the mouse is -- or just was -- down,
1678 // return ourselves. We do this so mouse events continue getting deliver ed after a drag has 1678 // return ourselves. We do this so mouse events continue getting deliver ed after a drag has
1679 // exited the WebView, and so hit testing over a scrollbar hits the cont ent document. 1679 // exited the WebView, and so hit testing over a scrollbar hits the cont ent document.
1680 // In addtion, it is possible for the mouse to stay in the document but there is no element. 1680 // In addtion, it is possible for the mouse to stay in the document but there is no element.
1681 // At that time, the events of the mouse should be fired. 1681 // At that time, the events of the mouse should be fired.
1682 LayoutPoint hitPoint = hitTestLocation.point(); 1682 LayoutPoint hitPoint = hitTestLocation.point();
1683 if (!request.isChildFrameHitTest() && ((request.active() || request.rele ase()) || (request.move() && hitTestArea.contains(hitPoint.x(), hitPoint.y()))) && isRootLayer()) { 1683 if (!request.isChildFrameHitTest() && ((request.active() || request.rele ase()) || (request.move() && hitTestArea.contains(hitPoint.x(), hitPoint.y()))) && isRootLayer()) {
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
2196 else 2196 else
2197 childLayer->m_transform.clear(); 2197 childLayer->m_transform.clear();
2198 } else { 2198 } else {
2199 // Adjust the transform such that the renderer's upper left corn er will be at (0,0) in user space. 2199 // Adjust the transform such that the renderer's upper left corn er will be at (0,0) in user space.
2200 // This involves subtracting out the position of the layer in ou r current coordinate space. 2200 // This involves subtracting out the position of the layer in ou r current coordinate space.
2201 Layer* nextLayer = columnLayers[columnIndex - 1]; 2201 Layer* nextLayer = columnLayers[columnIndex - 1];
2202 RefPtr<HitTestingTransformState> newTransformState = nextLayer-> createLocalTransformState(rootLayer, nextLayer, localClipRect, hitTestLocation, transformState); 2202 RefPtr<HitTestingTransformState> newTransformState = nextLayer-> createLocalTransformState(rootLayer, nextLayer, localClipRect, hitTestLocation, transformState);
2203 newTransformState->translate(offset.width(), offset.height(), Hi tTestingTransformState::AccumulateTransform); 2203 newTransformState->translate(offset.width(), offset.height(), Hi tTestingTransformState::AccumulateTransform);
2204 FloatPoint localPoint = newTransformState->mappedPoint(); 2204 FloatPoint localPoint = newTransformState->mappedPoint();
2205 FloatQuad localPointQuad = newTransformState->mappedQuad(); 2205 FloatQuad localPointQuad = newTransformState->mappedQuad();
2206 LayoutRect localHitTestRect = newTransformState->mappedArea().en closingBoundingBox(); 2206 LayoutRect localHitTestRect(newTransformState->mappedArea().encl osingBoundingBox());
2207 HitTestLocation newHitTestLocation; 2207 HitTestLocation newHitTestLocation;
2208 if (hitTestLocation.isRectBasedTest()) 2208 if (hitTestLocation.isRectBasedTest())
2209 newHitTestLocation = HitTestLocation(localPoint, localPointQ uad); 2209 newHitTestLocation = HitTestLocation(localPoint, localPointQ uad);
2210 else 2210 else
2211 newHitTestLocation = HitTestLocation(localPoint); 2211 newHitTestLocation = HitTestLocation(localPoint);
2212 newTransformState->flatten(); 2212 newTransformState->flatten();
2213 2213
2214 hitLayer = hitTestChildLayerColumns(childLayer, columnLayers[col umnIndex - 1], request, result, localHitTestRect, newHitTestLocation, 2214 hitLayer = hitTestChildLayerColumns(childLayer, columnLayers[col umnIndex - 1], request, result, localHitTestRect, newHitTestLocation,
2215 newTransformState.get(), zOffset, columnLayers, columnIndex - 1); 2215 newTransformState.get(), zOffset, columnLayers, columnIndex - 1);
2216 } 2216 }
(...skipping 29 matching lines...) Expand all
2246 { 2246 {
2247 for (Layer* child = firstChild(); child; child = child->nextSibling()) { 2247 for (Layer* child = firstChild(); child; child = child->nextSibling()) {
2248 // FIXME: We should not allow paint invalidation out of paint invalidati on state. crbug.com/457415 2248 // FIXME: We should not allow paint invalidation out of paint invalidati on state. crbug.com/457415
2249 DisablePaintInvalidationStateAsserts disabler; 2249 DisablePaintInvalidationStateAsserts disabler;
2250 child->invalidatePaintForBlockSelectionGaps(); 2250 child->invalidatePaintForBlockSelectionGaps();
2251 } 2251 }
2252 2252
2253 if (m_blockSelectionGapsBounds.isEmpty()) 2253 if (m_blockSelectionGapsBounds.isEmpty())
2254 return; 2254 return;
2255 2255
2256 LayoutRect rect = m_blockSelectionGapsBounds; 2256 LayoutRect rect(m_blockSelectionGapsBounds);
2257 if (renderer()->hasOverflowClip()) { 2257 if (renderer()->hasOverflowClip()) {
2258 LayoutBox* box = layoutBox(); 2258 LayoutBox* box = layoutBox();
2259 rect.move(-box->scrolledContentOffset()); 2259 rect.move(-box->scrolledContentOffset());
2260 if (!scrollableArea()->usesCompositedScrolling()) 2260 if (!scrollableArea()->usesCompositedScrolling())
2261 rect.intersect(box->overflowClipRect(LayoutPoint())); 2261 rect.intersect(box->overflowClipRect(LayoutPoint()));
2262 } 2262 }
2263 if (renderer()->hasClip()) 2263 if (renderer()->hasClip())
2264 rect.intersect(toLayoutBox(renderer())->clipRect(LayoutPoint())); 2264 rect.intersect(toLayoutBox(renderer())->clipRect(LayoutPoint()));
2265 if (!rect.isEmpty()) { 2265 if (!rect.isEmpty()) {
2266 // FIXME: We should not allow paint invalidation out of paint invalidati on state. crbug.com/457415 2266 // FIXME: We should not allow paint invalidation out of paint invalidati on state. crbug.com/457415
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
2429 2429
2430 if (!ancestorLayer) 2430 if (!ancestorLayer)
2431 ancestorLayer = this; 2431 ancestorLayer = this;
2432 2432
2433 // FIXME: This could be improved to do a check like hasVisibleNonCompositing DescendantLayers() (bug 92580). 2433 // FIXME: This could be improved to do a check like hasVisibleNonCompositing DescendantLayers() (bug 92580).
2434 if (this != ancestorLayer && !hasVisibleContent() && !hasVisibleDescendant() ) 2434 if (this != ancestorLayer && !hasVisibleContent() && !hasVisibleDescendant() )
2435 return LayoutRect(); 2435 return LayoutRect();
2436 2436
2437 // The root layer is always just the size of the document. 2437 // The root layer is always just the size of the document.
2438 if (isRootLayer()) 2438 if (isRootLayer())
2439 return m_renderer->view()->unscaledDocumentRect(); 2439 return LayoutRect(m_renderer->view()->unscaledDocumentRect());
2440 2440
2441 // The layer created for the LayoutFlowThread is just a helper for painting and hit-testing, 2441 // The layer created for the LayoutFlowThread is just a helper for painting and hit-testing,
2442 // and should not contribute to the bounding box. The LayoutMultiColumnSets will contribute 2442 // and should not contribute to the bounding box. The LayoutMultiColumnSets will contribute
2443 // the correct size for the rendered content of the multicol container. 2443 // the correct size for the rendered content of the multicol container.
2444 if (useRegionBasedColumns() && renderer()->isLayoutFlowThread()) 2444 if (useRegionBasedColumns() && renderer()->isLayoutFlowThread())
2445 return LayoutRect(); 2445 return LayoutRect();
2446 2446
2447 LayoutRect result = clipper().localClipRect(); 2447 LayoutRect result = clipper().localClipRect();
2448 if (result == LayoutRect::infiniteIntRect()) { 2448 if (result == LayoutRect::infiniteIntRect()) {
2449 LayoutPoint origin; 2449 LayoutPoint origin;
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
2951 } 2951 }
2952 } 2952 }
2953 2953
2954 void showLayerTree(const blink::LayoutObject* renderer) 2954 void showLayerTree(const blink::LayoutObject* renderer)
2955 { 2955 {
2956 if (!renderer) 2956 if (!renderer)
2957 return; 2957 return;
2958 showLayerTree(renderer->enclosingLayer()); 2958 showLayerTree(renderer->enclosingLayer());
2959 } 2959 }
2960 #endif 2960 #endif
OLDNEW
« no previous file with comments | « Source/core/layout/HitTestLocation.cpp ('k') | Source/core/layout/LayerClipper.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698