| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/graphics/compositing/PropertyTreeManager.h" | 5 #include "platform/graphics/compositing/PropertyTreeManager.h" |
| 6 | 6 |
| 7 #include "cc/layers/layer.h" | 7 #include "cc/layers/layer.h" |
| 8 #include "cc/trees/clip_node.h" | 8 #include "cc/trees/clip_node.h" |
| 9 #include "cc/trees/effect_node.h" | 9 #include "cc/trees/effect_node.h" |
| 10 #include "cc/trees/property_tree.h" | 10 #include "cc/trees/property_tree.h" |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 m_propertyTrees.element_id_to_scroll_node_index[compositorElementId] = id; | 274 m_propertyTrees.element_id_to_scroll_node_index[compositorElementId] = id; |
| 275 } | 275 } |
| 276 | 276 |
| 277 auto result = m_scrollNodeMap.set(scrollNode, id); | 277 auto result = m_scrollNodeMap.set(scrollNode, id); |
| 278 DCHECK(result.isNewEntry); | 278 DCHECK(result.isNewEntry); |
| 279 scrollTree().set_needs_update(true); | 279 scrollTree().set_needs_update(true); |
| 280 | 280 |
| 281 return id; | 281 return id; |
| 282 } | 282 } |
| 283 | 283 |
| 284 void PropertyTreeManager::updateScrollOffset(int layerId, int scrollId) { | 284 void PropertyTreeManager::updateScrollOffset( |
| 285 cc::ScrollNode& scrollNode = *scrollTree().Node(scrollId); | 285 const ScrollPaintPropertyNode* scrollNode) { |
| 286 cc::TransformNode& transformNode = | 286 int scrollNodeId = ensureCompositorScrollNode(scrollNode); |
| 287 *transformTree().Node(scrollNode.transform_id); | 287 cc::ScrollNode& compositorScrollNode = *scrollTree().Node(scrollNodeId); |
| 288 | 288 cc::TransformNode& compositorTransformNode = |
| 289 transformNode.scrolls = true; | 289 *transformTree().Node(compositorScrollNode.transform_id); |
| 290 | 290 |
| 291 // Blink creates a 2d transform node just for scroll offset whereas cc's | 291 // Blink creates a 2d transform node just for scroll offset whereas cc's |
| 292 // transform node has a special scroll offset field. To handle this we | 292 // transform node has a special scroll offset field. To handle this we adjust |
| 293 // adjust cc's transform node to remove the 2d scroll translation and | 293 // cc's transform node to remove the 2d scroll translation and instead set the |
| 294 // let the cc scroll tree update the cc scroll offset. | 294 // scroll_offset field. |
| 295 DCHECK(transformNode.local.IsIdentityOr2DTranslation()); | 295 auto* scrollOffsetTransform = scrollNode->scrollOffsetTranslation(); |
| 296 auto offset = transformNode.local.To2dTranslation(); | 296 auto scrollOffsetSize = scrollOffsetTransform->matrix().to2DTranslation(); |
| 297 transformNode.local.MakeIdentity(); | 297 auto scrollOffset = |
| 298 scrollTree().SetScrollOffset(layerId, | 298 gfx::ScrollOffset(-scrollOffsetSize.width(), -scrollOffsetSize.height()); |
| 299 gfx::ScrollOffset(-offset.x(), -offset.y())); | 299 DCHECK(compositorTransformNode.local.IsIdentityOr2DTranslation()); |
| 300 scrollTree().set_needs_update(true); | 300 compositorTransformNode.scroll_offset = scrollOffset; |
| 301 compositorTransformNode.local.MakeIdentity(); |
| 302 compositorTransformNode.scrolls = true; |
| 303 transformTree().set_needs_update(true); |
| 304 // TODO(pdr): The scroll tree's scroll offset will need to be set here. |
| 301 } | 305 } |
| 302 | 306 |
| 303 int PropertyTreeManager::switchToEffectNode( | 307 int PropertyTreeManager::switchToEffectNode( |
| 304 const EffectPaintPropertyNode& nextEffect) { | 308 const EffectPaintPropertyNode& nextEffect) { |
| 305 const EffectPaintPropertyNode* ancestor = | 309 const EffectPaintPropertyNode* ancestor = |
| 306 GeometryMapper::lowestCommonAncestor(currentEffectNode(), &nextEffect); | 310 GeometryMapper::lowestCommonAncestor(currentEffectNode(), &nextEffect); |
| 307 DCHECK(ancestor) << "Malformed effect tree. All nodes must be descendant of " | 311 DCHECK(ancestor) << "Malformed effect tree. All nodes must be descendant of " |
| 308 "EffectPaintPropertyNode::root()."; | 312 "EffectPaintPropertyNode::root()."; |
| 309 while (currentEffectNode() != ancestor) | 313 while (currentEffectNode() != ancestor) |
| 310 m_effectStack.pop_back(); | 314 m_effectStack.pop_back(); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 m_effectStack.push_back(BlinkEffectAndCcIdPair{nextEffect, effectNode.id}); | 389 m_effectStack.push_back(BlinkEffectAndCcIdPair{nextEffect, effectNode.id}); |
| 386 | 390 |
| 387 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); | 391 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); |
| 388 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId); | 392 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId); |
| 389 dummyLayer->SetClipTreeIndex(outputClipId); | 393 dummyLayer->SetClipTreeIndex(outputClipId); |
| 390 dummyLayer->SetEffectTreeIndex(effectNode.id); | 394 dummyLayer->SetEffectTreeIndex(effectNode.id); |
| 391 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); | 395 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); |
| 392 } | 396 } |
| 393 | 397 |
| 394 } // namespace blink | 398 } // namespace blink |
| OLD | NEW |