Changeset 201648 in webkit
- Timestamp:
- Jun 3, 2016 11:13:52 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 8 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r201639 r201648 1 2016-06-03 Antoine Quint <graouts@apple.com> 2 3 Reflection of element does not respect backdrop-filter property 4 https://bugs.webkit.org/show_bug.cgi?id=158201 5 6 Reviewed by Dean Jackson. 7 8 * css3/filters/backdrop/backdrop-filter-with-reflection-add-backdrop-expected.html: Added. 9 * css3/filters/backdrop/backdrop-filter-with-reflection-add-backdrop.html: Added. 10 11 Covers the case where a reflected element without a backdrop-filter initially has one added later. 12 13 * css3/filters/backdrop/backdrop-filter-with-reflection-expected.html: Added. 14 * css3/filters/backdrop/backdrop-filter-with-reflection-remove-backdrop-expected.html: Added. 15 16 Covers the case where a reflected element with a backdrop-filter initially has it removed later. 17 18 * css3/filters/backdrop/backdrop-filter-with-reflection-remove-backdrop.html: Added. 19 * css3/filters/backdrop/backdrop-filter-with-reflection-value-change-expected.html: Added. 20 21 Covers the case where a reflected element with a backdrop-filter has its backdrop-filter property changed later. 22 23 * css3/filters/backdrop/backdrop-filter-with-reflection-value-change.html: Added. 24 * css3/filters/backdrop/backdrop-filter-with-reflection.html: Added. 25 26 Covers the basic case of a reflected element with a backdrop-filter. 27 1 28 2016-06-03 Antoine Quint <graouts@apple.com> 2 29 -
trunk/Source/WebCore/ChangeLog
r201647 r201648 1 2016-06-03 Antoine Quint <graouts@apple.com> 2 3 Reflection of element does not respect backdrop-filter property 4 https://bugs.webkit.org/show_bug.cgi?id=158201 5 6 Reviewed by Dean Jackson. 7 8 We weren't cloning the PlatformCALayer for the backdrop so reflections would simply 9 not show their backdrops. We now follow the same pattern as other PlatformCALayers 10 owned by a GraphicsLayerCA and keep a list of backdrop layer clones that we add 11 to the structural layer when cloning to match the layer order of the original 12 and update the backdrop layer clone properties to match the original when the 13 backdrop filters or rectangle changes. 14 15 Tests: css3/filters/backdrop/backdrop-filter-with-reflection-add-backdrop.html 16 css3/filters/backdrop/backdrop-filter-with-reflection-remove-backdrop.html 17 css3/filters/backdrop/backdrop-filter-with-reflection-value-change.html 18 css3/filters/backdrop/backdrop-filter-with-reflection.html 19 20 * platform/graphics/ca/GraphicsLayerCA.cpp: 21 (WebCore::GraphicsLayerCA::updateBackdropFilters): 22 (WebCore::GraphicsLayerCA::updateBackdropFiltersRect): 23 Update backdrop layer clones to match new values set when the backdrop filter 24 configuration changes. 25 26 (WebCore::GraphicsLayerCA::ensureCloneLayers): 27 Create the backdrop layer clones map if needed and clone the existing backdrop layer. 28 29 (WebCore::GraphicsLayerCA::clearClones): 30 Clear the backdrop layer clones map. 31 32 (WebCore::GraphicsLayerCA::fetchCloneLayers): 33 Obtain a clone for the backdrop layer, and if we have a valid clone, add it to the 34 structural layer clone as its first child to match the operation in updateSublayerList(). 35 36 * platform/graphics/ca/GraphicsLayerCA.h: 37 Modify the signature for ensureCloneLayers() to account for the new backdrop layer clone and 38 declare the backdrop layer clone map. 39 40 * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm: 41 (PlatformCALayerCocoa::clone): 42 Reflect the backdrop layer type when cloning a PlatformCALayer. 43 1 44 2016-06-03 Brady Eidson <beidson@apple.com> 2 45 -
trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
r201374 r201648 1951 1951 m_backdropLayer->setHidden(!m_contentsVisible); 1952 1952 m_backdropLayer->setFilters(m_backdropFilters); 1953 1954 if (LayerMap* layerCloneMap = m_backdropLayerClones.get()) { 1955 for (auto& clone : *layerCloneMap) { 1956 PlatformCALayer* cloneLayer = clone.value.get(); 1957 cloneLayer->setHidden(!m_contentsVisible); 1958 cloneLayer->setFilters(m_backdropFilters); 1959 } 1960 } 1953 1961 } 1954 1962 … … 1960 1968 m_backdropLayer->setBounds(contentBounds); 1961 1969 m_backdropLayer->setPosition(m_backdropFiltersRect.location()); 1970 1971 if (LayerMap* layerCloneMap = m_backdropLayerClones.get()) { 1972 for (auto& clone : *layerCloneMap) { 1973 PlatformCALayer* cloneLayer = clone.value.get(); 1974 cloneLayer->setBounds(contentBounds); 1975 cloneLayer->setPosition(m_backdropFiltersRect.location()); 1976 } 1977 } 1962 1978 } 1963 1979 … … 3581 3597 3582 3598 void GraphicsLayerCA::ensureCloneLayers(CloneID cloneID, RefPtr<PlatformCALayer>& primaryLayer, RefPtr<PlatformCALayer>& structuralLayer, 3583 RefPtr<PlatformCALayer>& contentsLayer, RefPtr<PlatformCALayer>& contentsClippingLayer, RefPtr<PlatformCALayer>& contentsShapeMaskLayer, RefPtr<PlatformCALayer>& shapeMaskLayer, CloneLevel cloneLevel)3599 RefPtr<PlatformCALayer>& contentsLayer, RefPtr<PlatformCALayer>& contentsClippingLayer, RefPtr<PlatformCALayer>& contentsShapeMaskLayer, RefPtr<PlatformCALayer>& shapeMaskLayer, RefPtr<PlatformCALayer>& backdropLayer, CloneLevel cloneLevel) 3584 3600 { 3585 3601 structuralLayer = nullptr; … … 3604 3620 m_shapeMaskLayerClones = std::make_unique<LayerMap>(); 3605 3621 3622 if (!m_backdropLayerClones && m_backdropLayer) 3623 m_backdropLayerClones = std::make_unique<LayerMap>(); 3624 3606 3625 primaryLayer = findOrMakeClone(cloneID, m_layer.get(), m_layerClones.get(), cloneLevel); 3607 3626 structuralLayer = findOrMakeClone(cloneID, m_structuralLayer.get(), m_structuralLayerClones.get(), cloneLevel); … … 3610 3629 contentsShapeMaskLayer = findOrMakeClone(cloneID, m_contentsShapeMaskLayer.get(), m_contentsShapeMaskLayerClones.get(), cloneLevel); 3611 3630 shapeMaskLayer = findOrMakeClone(cloneID, m_shapeMaskLayer.get(), m_shapeMaskLayerClones.get(), cloneLevel); 3631 backdropLayer = findOrMakeClone(cloneID, m_backdropLayer.get(), m_backdropLayerClones.get(), cloneLevel); 3612 3632 } 3613 3633 … … 3631 3651 clearClones(m_contentsShapeMaskLayerClones); 3632 3652 clearClones(m_shapeMaskLayerClones); 3653 clearClones(m_backdropLayerClones); 3633 3654 } 3634 3655 … … 3664 3685 RefPtr<PlatformCALayer> contentsShapeMaskLayer; 3665 3686 RefPtr<PlatformCALayer> shapeMaskLayer; 3666 ensureCloneLayers(replicaState.cloneID(), primaryLayer, structuralLayer, contentsLayer, contentsClippingLayer, contentsShapeMaskLayer, shapeMaskLayer, cloneLevel); 3687 RefPtr<PlatformCALayer> backdropLayer; 3688 ensureCloneLayers(replicaState.cloneID(), primaryLayer, structuralLayer, contentsLayer, contentsClippingLayer, contentsShapeMaskLayer, shapeMaskLayer, backdropLayer, cloneLevel); 3667 3689 3668 3690 if (m_maskLayer) { … … 3708 3730 if (shapeMaskLayer) 3709 3731 primaryLayer->setMask(shapeMaskLayer.get()); 3710 3732 3711 3733 if (replicaLayer || structuralLayer || contentsLayer || contentsClippingLayer || childLayers.size() > 0) { 3712 3734 if (structuralLayer) { 3735 if (backdropLayer) 3736 clonalSublayers.append(backdropLayer); 3737 3713 3738 // Replicas render behind the actual layer content. 3714 3739 if (replicaLayer) -
trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h
r198189 r201648 375 375 376 376 void ensureCloneLayers(CloneID, RefPtr<PlatformCALayer>& primaryLayer, RefPtr<PlatformCALayer>& structuralLayer, 377 RefPtr<PlatformCALayer>& contentsLayer, RefPtr<PlatformCALayer>& contentsClippingLayer, RefPtr<PlatformCALayer>& contentsShapeMaskLayer, RefPtr<PlatformCALayer>& shapeMaskLayer, CloneLevel);377 RefPtr<PlatformCALayer>& contentsLayer, RefPtr<PlatformCALayer>& contentsClippingLayer, RefPtr<PlatformCALayer>& contentsShapeMaskLayer, RefPtr<PlatformCALayer>& shapeMaskLayer, RefPtr<PlatformCALayer>& backdropLayer, CloneLevel); 378 378 379 379 static void clearClones(std::unique_ptr<LayerMap>&); … … 519 519 std::unique_ptr<LayerMap> m_contentsShapeMaskLayerClones; 520 520 std::unique_ptr<LayerMap> m_shapeMaskLayerClones; 521 std::unique_ptr<LayerMap> m_backdropLayerClones; 521 522 522 523 #ifdef VISIBLE_TILE_WASH -
trunk/Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm
r201038 r201648 327 327 type = LayerTypeShapeLayer; 328 328 break; 329 case LayerTypeBackdropLayer: 330 type = LayerTypeBackdropLayer; 331 break; 329 332 case LayerTypeLayer: 330 333 default:
Note: See TracChangeset
for help on using the changeset viewer.