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

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

Issue 1030323005: Simplify application of perspective origin. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: with new TestExpectations Created 5 years, 8 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
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 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 scrollingConfigChanged = true; 445 scrollingConfigChanged = true;
446 } 446 }
447 447
448 if (updateOverflowControlsLayers(requiresHorizontalScrollbarLayer(), require sVerticalScrollbarLayer(), requiresScrollCornerLayer(), needsAncestorClip)) 448 if (updateOverflowControlsLayers(requiresHorizontalScrollbarLayer(), require sVerticalScrollbarLayer(), requiresScrollCornerLayer(), needsAncestorClip))
449 layerConfigChanged = true; 449 layerConfigChanged = true;
450 450
451 bool hasPerspective = false; 451 bool hasPerspective = false;
452 // FIXME: Can |style| be really null that late in the DocumentCycle? 452 // FIXME: Can |style| be really null that late in the DocumentCycle?
453 if (const ComputedStyle* style = renderer->style()) 453 if (const ComputedStyle* style = renderer->style())
454 hasPerspective = style->hasPerspective(); 454 hasPerspective = style->hasPerspective();
455 bool needsChildTransformLayer = hasPerspective && (layerForChildrenTransform () == m_childTransformLayer.get()) && renderer->isBox(); 455 bool needsChildTransformLayer = hasPerspective && renderer->isBox();
456 if (updateChildTransformLayer(needsChildTransformLayer)) 456 if (updateChildTransformLayer(needsChildTransformLayer))
457 layerConfigChanged = true; 457 layerConfigChanged = true;
458 458
459 if (updateSquashingLayers(!m_squashedLayers.isEmpty())) 459 if (updateSquashingLayers(!m_squashedLayers.isEmpty()))
460 layerConfigChanged = true; 460 layerConfigChanged = true;
461 461
462 updateScrollParent(scrollParent); 462 updateScrollParent(scrollParent);
463 updateClipParent(); 463 updateClipParent();
464 464
465 if (layerConfigChanged) 465 if (layerConfigChanged)
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 // m_foregroundLayer has to be inserted in the correct order with child laye rs, 1053 // m_foregroundLayer has to be inserted in the correct order with child laye rs,
1054 // so it's not inserted here. 1054 // so it's not inserted here.
1055 if (m_ancestorClippingLayer) 1055 if (m_ancestorClippingLayer)
1056 m_ancestorClippingLayer->removeAllChildren(); 1056 m_ancestorClippingLayer->removeAllChildren();
1057 1057
1058 m_graphicsLayer->removeFromParent(); 1058 m_graphicsLayer->removeFromParent();
1059 1059
1060 if (m_ancestorClippingLayer) 1060 if (m_ancestorClippingLayer)
1061 m_ancestorClippingLayer->addChild(m_graphicsLayer.get()); 1061 m_ancestorClippingLayer->addChild(m_graphicsLayer.get());
1062 1062
1063 if (m_childContainmentLayer) 1063 // Layer to which children should be attached as we build the hierarchy.
1064 m_graphicsLayer->addChild(m_childContainmentLayer.get()); 1064 GraphicsLayer* bottomLayer = m_graphicsLayer.get();
1065 else if (m_childTransformLayer) 1065 auto updateBottomLayer = [&bottomLayer](GraphicsLayer* layer) {
1066 m_graphicsLayer->addChild(m_childTransformLayer.get()); 1066 if (layer) {
1067 bottomLayer->addChild(layer);
1068 bottomLayer = layer;
1069 }
1070 };
1067 1071
1068 if (m_scrollingLayer) { 1072 updateBottomLayer(m_childTransformLayer.get());
1069 GraphicsLayer* superLayer = m_graphicsLayer.get(); 1073 updateBottomLayer(m_childContainmentLayer.get());
1074 updateBottomLayer(m_scrollingLayer.get());
1070 1075
1071 if (m_childContainmentLayer) 1076 // Now constructing the subtree for the overflow controls.
1072 superLayer = m_childContainmentLayer.get(); 1077 bottomLayer = m_graphicsLayer.get();
1073 1078 updateBottomLayer(m_overflowControlsClippingLayer.get());
1074 if (m_childTransformLayer) 1079 updateBottomLayer(m_overflowControlsHostLayer.get());
1075 superLayer = m_childTransformLayer.get();
1076
1077 superLayer->addChild(m_scrollingLayer.get());
1078 }
1079
1080 // The clip for child layers does not include space for overflow controls, s o they exist as
1081 // siblings of the clipping layer if we have one. Normal children of this la yer are set as
1082 // children of the clipping layer.
1083 if (m_overflowControlsClippingLayer) {
1084 ASSERT(m_overflowControlsHostLayer);
1085 m_graphicsLayer->addChild(m_overflowControlsClippingLayer.get());
1086 m_overflowControlsClippingLayer->addChild(m_overflowControlsHostLayer.ge t());
1087 } else if (m_overflowControlsHostLayer) {
1088 m_graphicsLayer->addChild(m_overflowControlsHostLayer.get());
1089 }
1090
1091 if (m_layerForHorizontalScrollbar) 1080 if (m_layerForHorizontalScrollbar)
1092 m_overflowControlsHostLayer->addChild(m_layerForHorizontalScrollbar.get( )); 1081 m_overflowControlsHostLayer->addChild(m_layerForHorizontalScrollbar.get( ));
1093 if (m_layerForVerticalScrollbar) 1082 if (m_layerForVerticalScrollbar)
1094 m_overflowControlsHostLayer->addChild(m_layerForVerticalScrollbar.get()) ; 1083 m_overflowControlsHostLayer->addChild(m_layerForVerticalScrollbar.get()) ;
1095 if (m_layerForScrollCorner) 1084 if (m_layerForScrollCorner)
1096 m_overflowControlsHostLayer->addChild(m_layerForScrollCorner.get()); 1085 m_overflowControlsHostLayer->addChild(m_layerForScrollCorner.get());
1097 1086
1098 // The squashing containment layer, if it exists, becomes a no-op parent. 1087 // The squashing containment layer, if it exists, becomes a no-op parent.
1099 if (m_squashingLayer) { 1088 if (m_squashingLayer) {
1100 ASSERT((m_ancestorClippingLayer && !m_squashingContainmentLayer) || (!m_ ancestorClippingLayer && m_squashingContainmentLayer)); 1089 ASSERT((m_ancestorClippingLayer && !m_squashingContainmentLayer) || (!m_ ancestorClippingLayer && m_squashingContainmentLayer));
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 1215
1227 if (m_maskLayer) 1216 if (m_maskLayer)
1228 m_maskLayer->setDrawsContent(true); 1217 m_maskLayer->setDrawsContent(true);
1229 1218
1230 if (m_childClippingMaskLayer) 1219 if (m_childClippingMaskLayer)
1231 m_childClippingMaskLayer->setDrawsContent(true); 1220 m_childClippingMaskLayer->setDrawsContent(true);
1232 } 1221 }
1233 1222
1234 void CompositedDeprecatedPaintLayerMapping::updateChildrenTransform() 1223 void CompositedDeprecatedPaintLayerMapping::updateChildrenTransform()
1235 { 1224 {
1236 if (GraphicsLayer* childTransformLayer = layerForChildrenTransform()) { 1225 if (GraphicsLayer* childTransformLayer = this->childTransformLayer()) {
1237 childTransformLayer->setTransform(owningLayer().perspectiveTransform()); 1226 childTransformLayer->setTransform(owningLayer().perspectiveTransform());
1238 childTransformLayer->setTransformOrigin(FloatPoint3D(childTransformLayer ->size().width() * 0.5f, childTransformLayer->size().height() * 0.5f, 0.f)); 1227 childTransformLayer->setTransformOrigin(owningLayer().perspectiveOrigin( ));
1239 } 1228 }
1240 1229
1241 updateShouldFlattenTransform(); 1230 updateShouldFlattenTransform();
1242 } 1231 }
1243 1232
1244 // Return true if the layers changed. 1233 // Return true if the layers changed.
1245 bool CompositedDeprecatedPaintLayerMapping::updateClippingLayers(bool needsAnces torClip, bool needsDescendantClip) 1234 bool CompositedDeprecatedPaintLayerMapping::updateClippingLayers(bool needsAnces torClip, bool needsDescendantClip)
1246 { 1235 {
1247 bool layersChanged = false; 1236 bool layersChanged = false;
1248 1237
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1383 return false; 1372 return false;
1384 } 1373 }
1385 1374
1386 enum ApplyToGraphicsLayersModeFlags { 1375 enum ApplyToGraphicsLayersModeFlags {
1387 ApplyToLayersAffectedByPreserve3D = (1 << 0), 1376 ApplyToLayersAffectedByPreserve3D = (1 << 0),
1388 ApplyToSquashingLayer = (1 << 1), 1377 ApplyToSquashingLayer = (1 << 1),
1389 ApplyToScrollbarLayers = (1 << 2), 1378 ApplyToScrollbarLayers = (1 << 2),
1390 ApplyToBackgroundLayer = (1 << 3), 1379 ApplyToBackgroundLayer = (1 << 3),
1391 ApplyToMaskLayers = (1 << 4), 1380 ApplyToMaskLayers = (1 << 4),
1392 ApplyToContentLayers = (1 << 5), 1381 ApplyToContentLayers = (1 << 5),
1382 ApplyToChildContainingLayers = (1 << 6), // layers between m_graphicsLayer a nd children
Ian Vollick 2015/04/01 18:00:09 bikeshed: ApplyToGraphicsLayerDescendants
Ian Vollick 2015/04/01 18:18:18 Chatted with Jeremy about this offline. My bikeshe
jbroman 2015/04/02 15:34:15 Acknowledged.
1393 ApplyToAllGraphicsLayers = (ApplyToSquashingLayer | ApplyToScrollbarLayers | ApplyToBackgroundLayer | ApplyToMaskLayers | ApplyToLayersAffectedByPreserve3D | ApplyToContentLayers) 1383 ApplyToAllGraphicsLayers = (ApplyToSquashingLayer | ApplyToScrollbarLayers | ApplyToBackgroundLayer | ApplyToMaskLayers | ApplyToLayersAffectedByPreserve3D | ApplyToContentLayers)
1394 }; 1384 };
1395 typedef unsigned ApplyToGraphicsLayersMode; 1385 typedef unsigned ApplyToGraphicsLayersMode;
1396 1386
1397 template <typename Func> 1387 template <typename Func>
1398 static void ApplyToGraphicsLayers(const CompositedDeprecatedPaintLayerMapping* m apping, const Func& f, ApplyToGraphicsLayersMode mode) 1388 static void ApplyToGraphicsLayers(const CompositedDeprecatedPaintLayerMapping* m apping, const Func& f, ApplyToGraphicsLayersMode mode)
1399 { 1389 {
1400 ASSERT(mode); 1390 ASSERT(mode);
1401 1391
1402 if ((mode & ApplyToLayersAffectedByPreserve3D) && mapping->childTransformLay er()) 1392 if ((mode & ApplyToLayersAffectedByPreserve3D) && mapping->childTransformLay er())
1403 f(mapping->childTransformLayer()); 1393 f(mapping->childTransformLayer());
1404 if (((mode & ApplyToLayersAffectedByPreserve3D) || (mode & ApplyToContentLay ers)) && mapping->mainGraphicsLayer()) 1394 if (((mode & ApplyToLayersAffectedByPreserve3D) || (mode & ApplyToContentLay ers)) && mapping->mainGraphicsLayer())
1405 f(mapping->mainGraphicsLayer()); 1395 f(mapping->mainGraphicsLayer());
1406 if ((mode & ApplyToLayersAffectedByPreserve3D) && mapping->clippingLayer()) 1396 if (((mode & ApplyToLayersAffectedByPreserve3D) || (mode & ApplyToChildConta iningLayers)) && mapping->clippingLayer())
1407 f(mapping->clippingLayer()); 1397 f(mapping->clippingLayer());
1408 if ((mode & ApplyToLayersAffectedByPreserve3D) && mapping->scrollingLayer()) 1398 if (((mode & ApplyToLayersAffectedByPreserve3D) || (mode & ApplyToChildConta iningLayers)) && mapping->scrollingLayer())
1409 f(mapping->scrollingLayer()); 1399 f(mapping->scrollingLayer());
1410 if ((mode & ApplyToLayersAffectedByPreserve3D) && mapping->scrollingBlockSel ectionLayer()) 1400 if (((mode & ApplyToLayersAffectedByPreserve3D) || (mode & ApplyToChildConta iningLayers)) && mapping->scrollingBlockSelectionLayer())
1411 f(mapping->scrollingBlockSelectionLayer()); 1401 f(mapping->scrollingBlockSelectionLayer());
1412 if (((mode & ApplyToLayersAffectedByPreserve3D) || (mode & ApplyToContentLay ers)) && mapping->scrollingContentsLayer()) 1402 if (((mode & ApplyToLayersAffectedByPreserve3D) || (mode & ApplyToContentLay ers) || (mode & ApplyToChildContainingLayers)) && mapping->scrollingContentsLaye r())
1413 f(mapping->scrollingContentsLayer()); 1403 f(mapping->scrollingContentsLayer());
1414 if (((mode & ApplyToLayersAffectedByPreserve3D) || (mode & ApplyToContentLay ers)) && mapping->foregroundLayer()) 1404 if (((mode & ApplyToLayersAffectedByPreserve3D) || (mode & ApplyToContentLay ers)) && mapping->foregroundLayer())
1415 f(mapping->foregroundLayer()); 1405 f(mapping->foregroundLayer());
1416 1406
1407 if ((mode & ApplyToChildContainingLayers) && mapping->childTransformLayer())
1408 f(mapping->childTransformLayer());
1409
1417 if ((mode & ApplyToSquashingLayer) && mapping->squashingLayer()) 1410 if ((mode & ApplyToSquashingLayer) && mapping->squashingLayer())
1418 f(mapping->squashingLayer()); 1411 f(mapping->squashingLayer());
1419 1412
1420 if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers)) && mapping ->maskLayer()) 1413 if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers)) && mapping ->maskLayer())
1421 f(mapping->maskLayer()); 1414 f(mapping->maskLayer());
1422 if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers)) && mapping ->childClippingMaskLayer()) 1415 if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers)) && mapping ->childClippingMaskLayer())
1423 f(mapping->childClippingMaskLayer()); 1416 f(mapping->childClippingMaskLayer());
1424 1417
1425 if (((mode & ApplyToBackgroundLayer) || (mode & ApplyToContentLayers)) && ma pping->backgroundLayer()) 1418 if (((mode & ApplyToBackgroundLayer) || (mode & ApplyToContentLayers)) && ma pping->backgroundLayer())
1426 f(mapping->backgroundLayer()); 1419 f(mapping->backgroundLayer());
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1470 void CompositedDeprecatedPaintLayerMapping::updateShouldFlattenTransform() 1463 void CompositedDeprecatedPaintLayerMapping::updateShouldFlattenTransform()
1471 { 1464 {
1472 // All CLM-managed layers that could affect a descendant layer should update their 1465 // All CLM-managed layers that could affect a descendant layer should update their
1473 // should-flatten-transform value (the other layers' transforms don't matter here). 1466 // should-flatten-transform value (the other layers' transforms don't matter here).
1474 UpdateShouldFlattenTransformFunctor functor = { !m_owningLayer.shouldPreserv e3D() }; 1467 UpdateShouldFlattenTransformFunctor functor = { !m_owningLayer.shouldPreserv e3D() };
1475 ApplyToGraphicsLayersMode mode = ApplyToLayersAffectedByPreserve3D; 1468 ApplyToGraphicsLayersMode mode = ApplyToLayersAffectedByPreserve3D;
1476 ApplyToGraphicsLayers(this, functor, mode); 1469 ApplyToGraphicsLayers(this, functor, mode);
1477 1470
1478 // Note, if we apply perspective, we have to set should flatten differently 1471 // Note, if we apply perspective, we have to set should flatten differently
1479 // so that the transform propagates to child layers correctly. 1472 // so that the transform propagates to child layers correctly.
1480 if (GraphicsLayer* childTransformLayer = layerForChildrenTransform()) { 1473 if (hasChildTransformLayer()) {
1481 bool hasPerspective = false; 1474 ApplyToGraphicsLayers(this, [](GraphicsLayer* layer) {
1482 // FIXME: Can |style| be really null here? 1475 layer->setShouldFlattenTransform(false);
1483 if (const ComputedStyle* style = m_owningLayer.layoutObject()->style()) 1476 }, ApplyToChildContainingLayers);
1484 hasPerspective = style->hasPerspective();
1485 if (hasPerspective)
1486 childTransformLayer->setShouldFlattenTransform(false);
1487
1488 // Note, if the target is the scrolling layer, we need to ensure that th e
1489 // scrolling content layer doesn't flatten the transform. (It would be n ice
1490 // if we could apply transform to the scrolling content layer, but that' s
1491 // too late, we need the children transform to be applied _before_ the
1492 // scrolling offset.)
1493 if (childTransformLayer == m_scrollingLayer.get()) {
1494 m_scrollingContentsLayer->setShouldFlattenTransform(false);
1495 m_scrollingBlockSelectionLayer->setShouldFlattenTransform(false);
1496 }
1497 } 1477 }
1498 } 1478 }
1499 1479
1500 bool CompositedDeprecatedPaintLayerMapping::updateForegroundLayer(bool needsFore groundLayer) 1480 bool CompositedDeprecatedPaintLayerMapping::updateForegroundLayer(bool needsFore groundLayer)
1501 { 1481 {
1502 bool layerChanged = false; 1482 bool layerChanged = false;
1503 if (needsForegroundLayer) { 1483 if (needsForegroundLayer) {
1504 if (!m_foregroundLayer) { 1484 if (!m_foregroundLayer) {
1505 m_foregroundLayer = createGraphicsLayer(CompositingReasonLayerForFor eground); 1485 m_foregroundLayer = createGraphicsLayer(CompositingReasonLayerForFor eground);
1506 m_foregroundLayer->setPaintingPhase(GraphicsLayerPaintForeground); 1486 m_foregroundLayer->setPaintingPhase(GraphicsLayerPaintForeground);
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
1985 { 1965 {
1986 if (m_squashingContainmentLayer) 1966 if (m_squashingContainmentLayer)
1987 return m_squashingContainmentLayer.get(); 1967 return m_squashingContainmentLayer.get();
1988 1968
1989 if (m_ancestorClippingLayer) 1969 if (m_ancestorClippingLayer)
1990 return m_ancestorClippingLayer.get(); 1970 return m_ancestorClippingLayer.get();
1991 1971
1992 return m_graphicsLayer.get(); 1972 return m_graphicsLayer.get();
1993 } 1973 }
1994 1974
1995 GraphicsLayer* CompositedDeprecatedPaintLayerMapping::layerForChildrenTransform( ) const
1996 {
1997 if (GraphicsLayer* clipLayer = clippingLayer())
1998 return clipLayer;
1999 if (m_scrollingLayer)
2000 return m_scrollingLayer.get();
2001 return m_childTransformLayer.get();
2002 }
2003
2004 void CompositedDeprecatedPaintLayerMapping::setBlendMode(WebBlendMode blendMode) 1975 void CompositedDeprecatedPaintLayerMapping::setBlendMode(WebBlendMode blendMode)
2005 { 1976 {
2006 if (m_ancestorClippingLayer) { 1977 if (m_ancestorClippingLayer) {
2007 m_ancestorClippingLayer->setBlendMode(blendMode); 1978 m_ancestorClippingLayer->setBlendMode(blendMode);
2008 m_graphicsLayer->setBlendMode(WebBlendModeNormal); 1979 m_graphicsLayer->setBlendMode(WebBlendModeNormal);
2009 } else { 1980 } else {
2010 m_graphicsLayer->setBlendMode(blendMode); 1981 m_graphicsLayer->setBlendMode(blendMode);
2011 } 1982 }
2012 } 1983 }
2013 1984
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
2373 } else if (graphicsLayer == m_scrollingBlockSelectionLayer.get()) { 2344 } else if (graphicsLayer == m_scrollingBlockSelectionLayer.get()) {
2374 name = "Scrolling Block Selection Layer"; 2345 name = "Scrolling Block Selection Layer";
2375 } else { 2346 } else {
2376 ASSERT_NOT_REACHED(); 2347 ASSERT_NOT_REACHED();
2377 } 2348 }
2378 2349
2379 return name; 2350 return name;
2380 } 2351 }
2381 2352
2382 } // namespace blink 2353 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698