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

Side by Side Diff: Source/core/layout/compositing/CompositedDeprecatedPaintLayerMapping.cpp

Issue 1308273010: Adapt and reland old position sticky implementation (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix style errors and remaining layout tests. Created 5 years, 3 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 30 matching lines...) Expand all
41 #include "core/inspector/InspectorInstrumentation.h" 41 #include "core/inspector/InspectorInstrumentation.h"
42 #include "core/layout/LayoutEmbeddedObject.h" 42 #include "core/layout/LayoutEmbeddedObject.h"
43 #include "core/layout/LayoutHTMLCanvas.h" 43 #include "core/layout/LayoutHTMLCanvas.h"
44 #include "core/layout/LayoutImage.h" 44 #include "core/layout/LayoutImage.h"
45 #include "core/layout/LayoutPart.h" 45 #include "core/layout/LayoutPart.h"
46 #include "core/layout/LayoutVideo.h" 46 #include "core/layout/LayoutVideo.h"
47 #include "core/layout/LayoutView.h" 47 #include "core/layout/LayoutView.h"
48 #include "core/layout/compositing/DeprecatedPaintLayerCompositor.h" 48 #include "core/layout/compositing/DeprecatedPaintLayerCompositor.h"
49 #include "core/page/ChromeClient.h" 49 #include "core/page/ChromeClient.h"
50 #include "core/page/Page.h" 50 #include "core/page/Page.h"
51 #include "core/page/scrolling/ScrollingConstraints.h"
51 #include "core/page/scrolling/ScrollingCoordinator.h" 52 #include "core/page/scrolling/ScrollingCoordinator.h"
52 #include "core/paint/DeprecatedPaintLayerPainter.h" 53 #include "core/paint/DeprecatedPaintLayerPainter.h"
53 #include "core/paint/DeprecatedPaintLayerStackingNodeIterator.h" 54 #include "core/paint/DeprecatedPaintLayerStackingNodeIterator.h"
54 #include "core/paint/ScrollableAreaPainter.h" 55 #include "core/paint/ScrollableAreaPainter.h"
55 #include "core/paint/TransformRecorder.h" 56 #include "core/paint/TransformRecorder.h"
56 #include "core/plugins/PluginView.h" 57 #include "core/plugins/PluginView.h"
57 #include "platform/LengthFunctions.h" 58 #include "platform/LengthFunctions.h"
58 #include "platform/RuntimeEnabledFeatures.h" 59 #include "platform/RuntimeEnabledFeatures.h"
59 #include "platform/fonts/FontCache.h" 60 #include "platform/fonts/FontCache.h"
60 #include "platform/geometry/TransformState.h" 61 #include "platform/geometry/TransformState.h"
61 #include "platform/graphics/BitmapImage.h" 62 #include "platform/graphics/BitmapImage.h"
62 #include "platform/graphics/GraphicsContext.h" 63 #include "platform/graphics/GraphicsContext.h"
63 #include "platform/graphics/paint/ClipDisplayItem.h" 64 #include "platform/graphics/paint/ClipDisplayItem.h"
64 #include "platform/graphics/paint/DisplayItemList.h" 65 #include "platform/graphics/paint/DisplayItemList.h"
65 #include "platform/graphics/paint/TransformDisplayItem.h" 66 #include "platform/graphics/paint/TransformDisplayItem.h"
67 #include "public/platform/WebLayerPositionConstraint.h"
66 #include "wtf/CurrentTime.h" 68 #include "wtf/CurrentTime.h"
67 #include "wtf/text/StringBuilder.h" 69 #include "wtf/text/StringBuilder.h"
68 70
69 namespace blink { 71 namespace blink {
70 72
71 using namespace HTMLNames; 73 using namespace HTMLNames;
72 74
73 static IntRect clipBox(LayoutBox* layoutObject); 75 static IntRect clipBox(LayoutBox* layoutObject);
74 76
75 static IntRect contentsRect(const LayoutObject* layoutObject) 77 static IntRect contentsRect(const LayoutObject* layoutObject)
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 } 224 }
223 225
224 void CompositedDeprecatedPaintLayerMapping::createPrimaryGraphicsLayer() 226 void CompositedDeprecatedPaintLayerMapping::createPrimaryGraphicsLayer()
225 { 227 {
226 m_graphicsLayer = createGraphicsLayer(m_owningLayer.compositingReasons()); 228 m_graphicsLayer = createGraphicsLayer(m_owningLayer.compositingReasons());
227 229
228 updateOpacity(layoutObject()->styleRef()); 230 updateOpacity(layoutObject()->styleRef());
229 updateTransform(layoutObject()->styleRef()); 231 updateTransform(layoutObject()->styleRef());
230 updateFilters(layoutObject()->styleRef()); 232 updateFilters(layoutObject()->styleRef());
231 updateBackdropFilters(layoutObject()->styleRef()); 233 updateBackdropFilters(layoutObject()->styleRef());
234 updateStickyConstraints(layoutObject()->styleRef());
232 235
233 if (RuntimeEnabledFeatures::cssCompositingEnabled()) { 236 if (RuntimeEnabledFeatures::cssCompositingEnabled()) {
234 updateLayerBlendMode(layoutObject()->styleRef()); 237 updateLayerBlendMode(layoutObject()->styleRef());
235 updateIsRootForIsolatedGroup(); 238 updateIsRootForIsolatedGroup();
236 } 239 }
237 } 240 }
238 241
239 void CompositedDeprecatedPaintLayerMapping::destroyGraphicsLayers() 242 void CompositedDeprecatedPaintLayerMapping::destroyGraphicsLayers()
240 { 243 {
241 if (m_graphicsLayer) 244 if (m_graphicsLayer)
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 void CompositedDeprecatedPaintLayerMapping::updateBackdropFilters(const Computed Style& style) 284 void CompositedDeprecatedPaintLayerMapping::updateBackdropFilters(const Computed Style& style)
282 { 285 {
283 m_graphicsLayer->setBackdropFilters(owningLayer().computeBackdropFilterOpera tions(style)); 286 m_graphicsLayer->setBackdropFilters(owningLayer().computeBackdropFilterOpera tions(style));
284 } 287 }
285 288
286 void CompositedDeprecatedPaintLayerMapping::updateLayerBlendMode(const ComputedS tyle& style) 289 void CompositedDeprecatedPaintLayerMapping::updateLayerBlendMode(const ComputedS tyle& style)
287 { 290 {
288 setBlendMode(style.blendMode()); 291 setBlendMode(style.blendMode());
289 } 292 }
290 293
294 void CompositedDeprecatedPaintLayerMapping::updateStickyConstraints(const Comput edStyle& style)
295 {
296 bool sticky = style.position() == EPosition::StickyPosition;
297 if (sticky) {
298 const DeprecatedPaintLayer* ancestorScrollingLayer = m_owningLayer.ances torScrollingLayer();
299 if (ancestorScrollingLayer) {
300 sticky = ancestorScrollingLayer->needsCompositedScrolling();
301 } else {
302 // If there's no ancestor scrolling layer the viewport is our ancest or scroller.
303 sticky = layoutObject()->view()->frameView()->isScrollable();
304 }
305 }
306
307 WebLayerStickyPositionConstraint webConstraint;
308 if (sticky) {
309 LayoutBoxModelObject* boxModelObject = m_owningLayer.layoutObject();
310 LayoutRect containingRect = boxModelObject->computeStickyConstrainingRec t();
311 StickyPositionViewportConstraints constraints;
312 boxModelObject->computeStickyPositionConstraints(constraints, containing Rect);
313
314 webConstraint.isSticky = true;
315
316 webConstraint.isAnchoredLeft = constraints.anchorEdges() & ViewportConst raints::AnchorEdgeLeft;
317 webConstraint.isAnchoredRight = constraints.anchorEdges() & ViewportCons traints::AnchorEdgeRight;
318 webConstraint.isAnchoredTop = constraints.anchorEdges() & ViewportConstr aints::AnchorEdgeTop;
319 webConstraint.isAnchoredBottom = constraints.anchorEdges() & ViewportCon straints::AnchorEdgeBottom;
320
321 webConstraint.leftOffset = constraints.leftOffset().toFloat();
322 webConstraint.rightOffset = constraints.rightOffset().toFloat();
323 webConstraint.topOffset = constraints.topOffset().toFloat();
324 webConstraint.bottomOffset = constraints.bottomOffset().toFloat();
325
326 webConstraint.absoluteStickyBoxRect = enclosingIntRect(constraints.absol uteStickyBoxRect());
327 webConstraint.absoluteContainingBlockRect = enclosingIntRect(constraints .absoluteContainingBlockRect());
328 }
329
330 m_graphicsLayer->platformLayer()->setStickyPositionConstraint(webConstraint) ;
331 }
332
291 void CompositedDeprecatedPaintLayerMapping::updateIsRootForIsolatedGroup() 333 void CompositedDeprecatedPaintLayerMapping::updateIsRootForIsolatedGroup()
292 { 334 {
293 bool isolate = m_owningLayer.shouldIsolateCompositedDescendants(); 335 bool isolate = m_owningLayer.shouldIsolateCompositedDescendants();
294 336
295 // non stacking context layers should never isolate 337 // non stacking context layers should never isolate
296 ASSERT(m_owningLayer.stackingNode()->isStackingContext() || !isolate); 338 ASSERT(m_owningLayer.stackingNode()->isStackingContext() || !isolate);
297 339
298 m_graphicsLayer->setIsRootForIsolatedGroup(isolate); 340 m_graphicsLayer->setIsRootForIsolatedGroup(isolate);
299 } 341 }
300 342
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 updateBackgroundColor(); 766 updateBackgroundColor();
725 updateDrawsContent(); 767 updateDrawsContent();
726 updateContentsOpaque(); 768 updateContentsOpaque();
727 updateAfterPartResize(); 769 updateAfterPartResize();
728 updateRenderingContext(); 770 updateRenderingContext();
729 updateShouldFlattenTransform(); 771 updateShouldFlattenTransform();
730 updateChildrenTransform(); 772 updateChildrenTransform();
731 updateScrollParent(scrollParent()); 773 updateScrollParent(scrollParent());
732 registerScrollingLayers(); 774 registerScrollingLayers();
733 775
776 updateStickyConstraints(layoutObject()->styleRef());
777
734 updateCompositingReasons(); 778 updateCompositingReasons();
735 } 779 }
736 780
737 void CompositedDeprecatedPaintLayerMapping::updateMainGraphicsLayerGeometry(cons t IntRect& relativeCompositingBounds, const IntRect& localCompositingBounds, con st IntPoint& graphicsLayerParentLocation) 781 void CompositedDeprecatedPaintLayerMapping::updateMainGraphicsLayerGeometry(cons t IntRect& relativeCompositingBounds, const IntRect& localCompositingBounds, con st IntPoint& graphicsLayerParentLocation)
738 { 782 {
739 m_graphicsLayer->setPosition(FloatPoint(relativeCompositingBounds.location() - graphicsLayerParentLocation)); 783 m_graphicsLayer->setPosition(FloatPoint(relativeCompositingBounds.location() - graphicsLayerParentLocation));
740 m_graphicsLayer->setOffsetFromLayoutObject(toIntSize(localCompositingBounds. location())); 784 m_graphicsLayer->setOffsetFromLayoutObject(toIntSize(localCompositingBounds. location()));
741 785
742 FloatSize oldSize = m_graphicsLayer->size(); 786 FloatSize oldSize = m_graphicsLayer->size();
743 const IntSize& contentsSize = relativeCompositingBounds.size(); 787 const IntSize& contentsSize = relativeCompositingBounds.size();
(...skipping 1653 matching lines...) Expand 10 before | Expand all | Expand 10 after
2397 } else if (graphicsLayer == m_scrollingBlockSelectionLayer.get()) { 2441 } else if (graphicsLayer == m_scrollingBlockSelectionLayer.get()) {
2398 name = "Scrolling Block Selection Layer"; 2442 name = "Scrolling Block Selection Layer";
2399 } else { 2443 } else {
2400 ASSERT_NOT_REACHED(); 2444 ASSERT_NOT_REACHED();
2401 } 2445 }
2402 2446
2403 return name; 2447 return name;
2404 } 2448 }
2405 2449
2406 } // namespace blink 2450 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698