| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights |
| 3 * reserved. | 3 * reserved. |
| 4 * | 4 * |
| 5 * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 5 * Portions are Copyright (C) 1998 Netscape Communications Corporation. |
| 6 * | 6 * |
| 7 * Other contributors: | 7 * Other contributors: |
| 8 * Robert O'Callahan <roc+@cs.cmu.edu> | 8 * Robert O'Callahan <roc+@cs.cmu.edu> |
| 9 * David Baron <dbaron@fas.harvard.edu> | 9 * David Baron <dbaron@fas.harvard.edu> |
| 10 * Christian Biesinger <cbiesinger@web.de> | 10 * Christian Biesinger <cbiesinger@web.de> |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 struct { | 103 struct { |
| 104 IntSize size; | 104 IntSize size; |
| 105 void* pointer; | 105 void* pointer; |
| 106 LayoutRect rect; | 106 LayoutRect rect; |
| 107 } previousPaintStatus; | 107 } previousPaintStatus; |
| 108 }; | 108 }; |
| 109 | 109 |
| 110 static_assert(sizeof(PaintLayer) == sizeof(SameSizeAsPaintLayer), | 110 static_assert(sizeof(PaintLayer) == sizeof(SameSizeAsPaintLayer), |
| 111 "PaintLayer should stay small"); | 111 "PaintLayer should stay small"); |
| 112 | 112 |
| 113 bool isReferenceClipPath(const ClipPathOperation* clipOperation) { |
| 114 return clipOperation && clipOperation->type() == ClipPathOperation::REFERENCE; |
| 115 } |
| 116 |
| 113 } // namespace | 117 } // namespace |
| 114 | 118 |
| 115 using namespace HTMLNames; | 119 using namespace HTMLNames; |
| 116 | 120 |
| 117 PaintLayerRareData::PaintLayerRareData() | 121 PaintLayerRareData::PaintLayerRareData() |
| 118 : enclosingPaginationLayer(nullptr), | 122 : enclosingPaginationLayer(nullptr), |
| 119 potentialCompositingReasonsFromStyle(CompositingReasonNone), | 123 potentialCompositingReasonsFromStyle(CompositingReasonNone), |
| 120 compositingReasons(CompositingReasonNone), | 124 compositingReasons(CompositingReasonNone), |
| 121 squashingDisallowedReasons(SquashingDisallowedReasonsNone), | 125 squashingDisallowedReasons(SquashingDisallowedReasonsNone), |
| 122 groupedMapping(nullptr) {} | 126 groupedMapping(nullptr) {} |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 if (!layoutObject->slowFirstChild() && layoutObject->style()) { | 176 if (!layoutObject->slowFirstChild() && layoutObject->style()) { |
| 173 m_isVisibleContentDirty = false; | 177 m_isVisibleContentDirty = false; |
| 174 m_hasVisibleContent = | 178 m_hasVisibleContent = |
| 175 layoutObject->style()->visibility() == EVisibility::Visible; | 179 layoutObject->style()->visibility() == EVisibility::Visible; |
| 176 } | 180 } |
| 177 | 181 |
| 178 updateScrollableArea(); | 182 updateScrollableArea(); |
| 179 } | 183 } |
| 180 | 184 |
| 181 PaintLayer::~PaintLayer() { | 185 PaintLayer::~PaintLayer() { |
| 182 if (m_rareData && m_rareData->filterInfo) { | 186 if (m_rareData && m_rareData->resourceInfo) { |
| 183 layoutObject()->styleRef().filter().removeClient(m_rareData->filterInfo); | 187 const ComputedStyle& style = layoutObject()->styleRef(); |
| 184 m_rareData->filterInfo->clearLayer(); | 188 if (style.hasFilter()) |
| 189 style.filter().removeClient(m_rareData->resourceInfo); |
| 190 if (isReferenceClipPath(style.clipPath())) { |
| 191 toReferenceClipPathOperation(style.clipPath()) |
| 192 ->removeClient(m_rareData->resourceInfo); |
| 193 } |
| 194 m_rareData->resourceInfo->clearLayer(); |
| 185 } | 195 } |
| 186 if (layoutObject()->frame() && layoutObject()->frame()->page()) { | 196 if (layoutObject()->frame() && layoutObject()->frame()->page()) { |
| 187 if (ScrollingCoordinator* scrollingCoordinator = | 197 if (ScrollingCoordinator* scrollingCoordinator = |
| 188 layoutObject()->frame()->page()->scrollingCoordinator()) | 198 layoutObject()->frame()->page()->scrollingCoordinator()) |
| 189 scrollingCoordinator->willDestroyLayer(this); | 199 scrollingCoordinator->willDestroyLayer(this); |
| 190 } | 200 } |
| 191 | 201 |
| 192 if (groupedMapping()) { | 202 if (groupedMapping()) { |
| 193 DisableCompositingQueryAsserts disabler; | 203 DisableCompositingQueryAsserts disabler; |
| 194 setGroupedMapping(0, InvalidateLayerAndRemoveFromMapping); | 204 setGroupedMapping(0, InvalidateLayerAndRemoveFromMapping); |
| (...skipping 2172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2367 FloatPoint point(hitTestLocation.point()); | 2377 FloatPoint point(hitTestLocation.point()); |
| 2368 | 2378 |
| 2369 ClipPathOperation* clipPathOperation = layoutObject()->style()->clipPath(); | 2379 ClipPathOperation* clipPathOperation = layoutObject()->style()->clipPath(); |
| 2370 DCHECK(clipPathOperation); | 2380 DCHECK(clipPathOperation); |
| 2371 if (clipPathOperation->type() == ClipPathOperation::SHAPE) { | 2381 if (clipPathOperation->type() == ClipPathOperation::SHAPE) { |
| 2372 ShapeClipPathOperation* clipPath = | 2382 ShapeClipPathOperation* clipPath = |
| 2373 toShapeClipPathOperation(clipPathOperation); | 2383 toShapeClipPathOperation(clipPathOperation); |
| 2374 return !clipPath->path(FloatRect(referenceBox)).contains(point); | 2384 return !clipPath->path(FloatRect(referenceBox)).contains(point); |
| 2375 } | 2385 } |
| 2376 DCHECK_EQ(clipPathOperation->type(), ClipPathOperation::REFERENCE); | 2386 DCHECK_EQ(clipPathOperation->type(), ClipPathOperation::REFERENCE); |
| 2377 ReferenceClipPathOperation* referenceClipPathOperation = | 2387 Node* targetNode = layoutObject()->node(); |
| 2378 toReferenceClipPathOperation(clipPathOperation); | 2388 if (!targetNode) |
| 2379 Element* element = layoutObject()->document().getElementById( | 2389 return false; |
| 2380 referenceClipPathOperation->fragment()); | 2390 const ReferenceClipPathOperation& referenceClipPathOperation = |
| 2391 toReferenceClipPathOperation(*clipPathOperation); |
| 2392 SVGElement* element = |
| 2393 referenceClipPathOperation.findElement(targetNode->treeScope()); |
| 2381 if (!isSVGClipPathElement(element) || !element->layoutObject()) | 2394 if (!isSVGClipPathElement(element) || !element->layoutObject()) |
| 2382 return false; | 2395 return false; |
| 2383 LayoutSVGResourceClipper* clipper = toLayoutSVGResourceClipper( | 2396 LayoutSVGResourceClipper* clipper = toLayoutSVGResourceClipper( |
| 2384 toLayoutSVGResourceContainer(element->layoutObject())); | 2397 toLayoutSVGResourceContainer(element->layoutObject())); |
| 2385 // If the clipPath is using "userspace on use" units, then the origin of | 2398 // If the clipPath is using "userspace on use" units, then the origin of |
| 2386 // the coordinate system is the top-left of the reference box, so adjust | 2399 // the coordinate system is the top-left of the reference box, so adjust |
| 2387 // the point accordingly. | 2400 // the point accordingly. |
| 2388 if (clipper->clipPathUnits() == SVGUnitTypes::kSvgUnitTypeUserspaceonuse) | 2401 if (clipper->clipPathUnits() == SVGUnitTypes::kSvgUnitTypeUserspaceonuse) |
| 2389 point.moveBy(-referenceBox.location()); | 2402 point.moveBy(-referenceBox.location()); |
| 2390 return !clipper->hitTestClipContent(FloatRect(referenceBox), point); | 2403 return !clipper->hitTestClipContent(FloatRect(referenceBox), point); |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2638 | 2651 |
| 2639 void PaintLayer::ensureCompositedLayerMapping() { | 2652 void PaintLayer::ensureCompositedLayerMapping() { |
| 2640 if (m_rareData && m_rareData->compositedLayerMapping) | 2653 if (m_rareData && m_rareData->compositedLayerMapping) |
| 2641 return; | 2654 return; |
| 2642 | 2655 |
| 2643 ensureRareData().compositedLayerMapping = | 2656 ensureRareData().compositedLayerMapping = |
| 2644 wrapUnique(new CompositedLayerMapping(*this)); | 2657 wrapUnique(new CompositedLayerMapping(*this)); |
| 2645 m_rareData->compositedLayerMapping->setNeedsGraphicsLayerUpdate( | 2658 m_rareData->compositedLayerMapping->setNeedsGraphicsLayerUpdate( |
| 2646 GraphicsLayerUpdateSubtree); | 2659 GraphicsLayerUpdateSubtree); |
| 2647 | 2660 |
| 2648 if (PaintLayerFilterInfo* filterInfo = this->filterInfo()) | 2661 if (PaintLayerResourceInfo* resourceInfo = this->resourceInfo()) |
| 2649 filterInfo->invalidateFilterChain(); | 2662 resourceInfo->invalidateFilterChain(); |
| 2650 } | 2663 } |
| 2651 | 2664 |
| 2652 void PaintLayer::clearCompositedLayerMapping(bool layerBeingDestroyed) { | 2665 void PaintLayer::clearCompositedLayerMapping(bool layerBeingDestroyed) { |
| 2653 if (!layerBeingDestroyed) { | 2666 if (!layerBeingDestroyed) { |
| 2654 // We need to make sure our decendants get a geometry update. In principle, | 2667 // We need to make sure our decendants get a geometry update. In principle, |
| 2655 // we could call setNeedsGraphicsLayerUpdate on our children, but that would | 2668 // we could call setNeedsGraphicsLayerUpdate on our children, but that would |
| 2656 // require walking the z-order lists to find them. Instead, we | 2669 // require walking the z-order lists to find them. Instead, we |
| 2657 // over-invalidate by marking our parent as needing a geometry update. | 2670 // over-invalidate by marking our parent as needing a geometry update. |
| 2658 if (PaintLayer* compositingParent = | 2671 if (PaintLayer* compositingParent = |
| 2659 enclosingLayerWithCompositedLayerMapping(ExcludeSelf)) | 2672 enclosingLayerWithCompositedLayerMapping(ExcludeSelf)) |
| 2660 compositingParent->compositedLayerMapping()->setNeedsGraphicsLayerUpdate( | 2673 compositingParent->compositedLayerMapping()->setNeedsGraphicsLayerUpdate( |
| 2661 GraphicsLayerUpdateSubtree); | 2674 GraphicsLayerUpdateSubtree); |
| 2662 } | 2675 } |
| 2663 | 2676 |
| 2664 if (m_rareData) | 2677 if (m_rareData) |
| 2665 m_rareData->compositedLayerMapping.reset(); | 2678 m_rareData->compositedLayerMapping.reset(); |
| 2666 | 2679 |
| 2667 if (layerBeingDestroyed) | 2680 if (layerBeingDestroyed) |
| 2668 return; | 2681 return; |
| 2669 | 2682 |
| 2670 if (PaintLayerFilterInfo* filterInfo = this->filterInfo()) | 2683 if (PaintLayerResourceInfo* resourceInfo = this->resourceInfo()) |
| 2671 filterInfo->invalidateFilterChain(); | 2684 resourceInfo->invalidateFilterChain(); |
| 2672 } | 2685 } |
| 2673 | 2686 |
| 2674 void PaintLayer::setGroupedMapping(CompositedLayerMapping* groupedMapping, | 2687 void PaintLayer::setGroupedMapping(CompositedLayerMapping* groupedMapping, |
| 2675 SetGroupMappingOptions options) { | 2688 SetGroupMappingOptions options) { |
| 2676 CompositedLayerMapping* oldGroupedMapping = this->groupedMapping(); | 2689 CompositedLayerMapping* oldGroupedMapping = this->groupedMapping(); |
| 2677 if (groupedMapping == oldGroupedMapping) | 2690 if (groupedMapping == oldGroupedMapping) |
| 2678 return; | 2691 return; |
| 2679 | 2692 |
| 2680 if (options == InvalidateLayerAndRemoveFromMapping && oldGroupedMapping) { | 2693 if (options == InvalidateLayerAndRemoveFromMapping && oldGroupedMapping) { |
| 2681 oldGroupedMapping->setNeedsGraphicsLayerUpdate(GraphicsLayerUpdateSubtree); | 2694 oldGroupedMapping->setNeedsGraphicsLayerUpdate(GraphicsLayerUpdateSubtree); |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2864 return false; | 2877 return false; |
| 2865 | 2878 |
| 2866 return hasBoxDecorationsOrBackground() || hasOverflowControls(); | 2879 return hasBoxDecorationsOrBackground() || hasOverflowControls(); |
| 2867 } | 2880 } |
| 2868 | 2881 |
| 2869 void PaintLayer::updateFilters(const ComputedStyle* oldStyle, | 2882 void PaintLayer::updateFilters(const ComputedStyle* oldStyle, |
| 2870 const ComputedStyle& newStyle) { | 2883 const ComputedStyle& newStyle) { |
| 2871 if (!newStyle.hasFilterInducingProperty() && | 2884 if (!newStyle.hasFilterInducingProperty() && |
| 2872 (!oldStyle || !oldStyle->hasFilterInducingProperty())) | 2885 (!oldStyle || !oldStyle->hasFilterInducingProperty())) |
| 2873 return; | 2886 return; |
| 2874 const bool hadFilterInfo = filterInfo(); | 2887 const bool hadResourceInfo = resourceInfo(); |
| 2875 if (newStyle.hasFilterInducingProperty()) | 2888 if (newStyle.hasFilterInducingProperty()) |
| 2876 newStyle.filter().addClient(&ensureFilterInfo()); | 2889 newStyle.filter().addClient(&ensureResourceInfo()); |
| 2877 if (hadFilterInfo && oldStyle) | 2890 if (hadResourceInfo && oldStyle) |
| 2878 oldStyle->filter().removeClient(filterInfo()); | 2891 oldStyle->filter().removeClient(resourceInfo()); |
| 2879 if (!newStyle.hasFilterInducingProperty()) { | 2892 if (PaintLayerResourceInfo* resourceInfo = this->resourceInfo()) |
| 2880 removeFilterInfo(); | 2893 resourceInfo->invalidateFilterChain(); |
| 2894 } |
| 2895 |
| 2896 void PaintLayer::updateClipPath(const ComputedStyle* oldStyle, |
| 2897 const ComputedStyle& newStyle) { |
| 2898 ClipPathOperation* newClipOperation = newStyle.clipPath(); |
| 2899 ClipPathOperation* oldClipOperation = |
| 2900 oldStyle ? oldStyle->clipPath() : nullptr; |
| 2901 if (!newClipOperation && !oldClipOperation) |
| 2881 return; | 2902 return; |
| 2903 const bool hadResourceInfo = resourceInfo(); |
| 2904 if (isReferenceClipPath(newClipOperation)) { |
| 2905 toReferenceClipPathOperation(newClipOperation) |
| 2906 ->addClient(&ensureResourceInfo()); |
| 2882 } | 2907 } |
| 2883 if (PaintLayerFilterInfo* filterInfo = this->filterInfo()) | 2908 if (hadResourceInfo && isReferenceClipPath(oldClipOperation)) { |
| 2884 filterInfo->invalidateFilterChain(); | 2909 toReferenceClipPathOperation(oldClipOperation) |
| 2910 ->removeClient(resourceInfo()); |
| 2911 } |
| 2885 } | 2912 } |
| 2886 | 2913 |
| 2887 bool PaintLayer::attemptDirectCompositingUpdate(StyleDifference diff, | 2914 bool PaintLayer::attemptDirectCompositingUpdate(StyleDifference diff, |
| 2888 const ComputedStyle* oldStyle) { | 2915 const ComputedStyle* oldStyle) { |
| 2889 CompositingReasons oldPotentialCompositingReasonsFromStyle = | 2916 CompositingReasons oldPotentialCompositingReasonsFromStyle = |
| 2890 potentialCompositingReasonsFromStyle(); | 2917 potentialCompositingReasonsFromStyle(); |
| 2891 compositor()->updatePotentialCompositingReasonsFromStyle(this); | 2918 compositor()->updatePotentialCompositingReasonsFromStyle(this); |
| 2892 | 2919 |
| 2893 // This function implements an optimization for transforms and opacity. | 2920 // This function implements an optimization for transforms and opacity. |
| 2894 // A common pattern is for a touchmove handler to update the transform | 2921 // A common pattern is for a touchmove handler to update the transform |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2960 m_scrollableArea->updateAfterStyleChange(oldStyle); | 2987 m_scrollableArea->updateAfterStyleChange(oldStyle); |
| 2961 | 2988 |
| 2962 // Overlay scrollbars can make this layer self-painting so we need | 2989 // Overlay scrollbars can make this layer self-painting so we need |
| 2963 // to recompute the bit once scrollbars have been updated. | 2990 // to recompute the bit once scrollbars have been updated. |
| 2964 updateSelfPaintingLayer(); | 2991 updateSelfPaintingLayer(); |
| 2965 | 2992 |
| 2966 updateDescendantDependentFlags(); | 2993 updateDescendantDependentFlags(); |
| 2967 | 2994 |
| 2968 updateTransform(oldStyle, layoutObject()->styleRef()); | 2995 updateTransform(oldStyle, layoutObject()->styleRef()); |
| 2969 updateFilters(oldStyle, layoutObject()->styleRef()); | 2996 updateFilters(oldStyle, layoutObject()->styleRef()); |
| 2997 updateClipPath(oldStyle, layoutObject()->styleRef()); |
| 2970 | 2998 |
| 2971 setNeedsCompositingInputsUpdate(); | 2999 setNeedsCompositingInputsUpdate(); |
| 2972 } | 3000 } |
| 2973 | 3001 |
| 2974 bool PaintLayer::scrollsOverflow() const { | 3002 bool PaintLayer::scrollsOverflow() const { |
| 2975 if (PaintLayerScrollableArea* scrollableArea = this->getScrollableArea()) | 3003 if (PaintLayerScrollableArea* scrollableArea = this->getScrollableArea()) |
| 2976 return scrollableArea->scrollsOverflow(); | 3004 return scrollableArea->scrollsOverflow(); |
| 2977 | 3005 |
| 2978 return false; | 3006 return false; |
| 2979 } | 3007 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3004 PaintLayer::createCompositorFilterOperationsForBackdropFilter( | 3032 PaintLayer::createCompositorFilterOperationsForBackdropFilter( |
| 3005 const ComputedStyle& style) { | 3033 const ComputedStyle& style) { |
| 3006 FloatRect zoomedReferenceBox; | 3034 FloatRect zoomedReferenceBox; |
| 3007 if (style.backdropFilter().hasReferenceFilter()) | 3035 if (style.backdropFilter().hasReferenceFilter()) |
| 3008 zoomedReferenceBox = boxForFilter(); | 3036 zoomedReferenceBox = boxForFilter(); |
| 3009 FilterEffectBuilder builder(enclosingNode(), zoomedReferenceBox, | 3037 FilterEffectBuilder builder(enclosingNode(), zoomedReferenceBox, |
| 3010 style.effectiveZoom()); | 3038 style.effectiveZoom()); |
| 3011 return builder.buildFilterOperations(style.backdropFilter()); | 3039 return builder.buildFilterOperations(style.backdropFilter()); |
| 3012 } | 3040 } |
| 3013 | 3041 |
| 3014 PaintLayerFilterInfo& PaintLayer::ensureFilterInfo() { | 3042 PaintLayerResourceInfo& PaintLayer::ensureResourceInfo() { |
| 3015 PaintLayerRareData& rareData = ensureRareData(); | 3043 PaintLayerRareData& rareData = ensureRareData(); |
| 3016 if (!rareData.filterInfo) | 3044 if (!rareData.resourceInfo) |
| 3017 rareData.filterInfo = new PaintLayerFilterInfo(this); | 3045 rareData.resourceInfo = new PaintLayerResourceInfo(this); |
| 3018 return *rareData.filterInfo; | 3046 return *rareData.resourceInfo; |
| 3019 } | |
| 3020 | |
| 3021 void PaintLayer::removeFilterInfo() { | |
| 3022 if (!m_rareData || !m_rareData->filterInfo) | |
| 3023 return; | |
| 3024 m_rareData->filterInfo->clearLayer(); | |
| 3025 m_rareData->filterInfo = nullptr; | |
| 3026 } | 3047 } |
| 3027 | 3048 |
| 3028 void PaintLayer::removeAncestorOverflowLayer(const PaintLayer* removedLayer) { | 3049 void PaintLayer::removeAncestorOverflowLayer(const PaintLayer* removedLayer) { |
| 3029 // If the current ancestor overflow layer does not match the removed layer | 3050 // If the current ancestor overflow layer does not match the removed layer |
| 3030 // the ancestor overflow layer has changed so we can stop searching. | 3051 // the ancestor overflow layer has changed so we can stop searching. |
| 3031 if (ancestorOverflowLayer() && ancestorOverflowLayer() != removedLayer) | 3052 if (ancestorOverflowLayer() && ancestorOverflowLayer() != removedLayer) |
| 3032 return; | 3053 return; |
| 3033 | 3054 |
| 3034 if (ancestorOverflowLayer()) { | 3055 if (ancestorOverflowLayer()) { |
| 3035 // TODO(pdr): When slimming paint v2 is enabled, we will need to | 3056 // TODO(pdr): When slimming paint v2 is enabled, we will need to |
| 3036 // invalidate the scroll paint property subtree for this so main | 3057 // invalidate the scroll paint property subtree for this so main |
| 3037 // thread scroll reasons are recomputed. | 3058 // thread scroll reasons are recomputed. |
| 3038 ancestorOverflowLayer() | 3059 ancestorOverflowLayer() |
| 3039 ->getScrollableArea() | 3060 ->getScrollableArea() |
| 3040 ->invalidateStickyConstraintsFor(this); | 3061 ->invalidateStickyConstraintsFor(this); |
| 3041 } | 3062 } |
| 3042 updateAncestorOverflowLayer(nullptr); | 3063 updateAncestorOverflowLayer(nullptr); |
| 3043 PaintLayer* current = m_first; | 3064 PaintLayer* current = m_first; |
| 3044 while (current) { | 3065 while (current) { |
| 3045 current->removeAncestorOverflowLayer(removedLayer); | 3066 current->removeAncestorOverflowLayer(removedLayer); |
| 3046 current = current->nextSibling(); | 3067 current = current->nextSibling(); |
| 3047 } | 3068 } |
| 3048 } | 3069 } |
| 3049 | 3070 |
| 3050 FilterEffect* PaintLayer::lastFilterEffect() const { | 3071 FilterEffect* PaintLayer::lastFilterEffect() const { |
| 3051 // TODO(chrishtr): ensure (and assert) that compositing is clean here. | 3072 // TODO(chrishtr): ensure (and assert) that compositing is clean here. |
| 3052 if (!paintsWithFilters()) | 3073 if (!paintsWithFilters()) |
| 3053 return nullptr; | 3074 return nullptr; |
| 3054 PaintLayerFilterInfo* filterInfo = this->filterInfo(); | 3075 PaintLayerResourceInfo* resourceInfo = this->resourceInfo(); |
| 3055 DCHECK(filterInfo); | 3076 DCHECK(resourceInfo); |
| 3056 | 3077 |
| 3057 if (filterInfo->lastEffect()) | 3078 if (resourceInfo->lastEffect()) |
| 3058 return filterInfo->lastEffect(); | 3079 return resourceInfo->lastEffect(); |
| 3059 | 3080 |
| 3060 const ComputedStyle& style = layoutObject()->styleRef(); | 3081 const ComputedStyle& style = layoutObject()->styleRef(); |
| 3061 FloatRect zoomedReferenceBox; | 3082 FloatRect zoomedReferenceBox; |
| 3062 if (style.filter().hasReferenceFilter()) | 3083 if (style.filter().hasReferenceFilter()) |
| 3063 zoomedReferenceBox = boxForFilter(); | 3084 zoomedReferenceBox = boxForFilter(); |
| 3064 FilterEffectBuilder builder(enclosingNode(), zoomedReferenceBox, | 3085 FilterEffectBuilder builder(enclosingNode(), zoomedReferenceBox, |
| 3065 style.effectiveZoom()); | 3086 style.effectiveZoom()); |
| 3066 filterInfo->setLastEffect( | 3087 resourceInfo->setLastEffect( |
| 3067 builder.buildFilterEffect(addReflectionToFilterOperations(style))); | 3088 builder.buildFilterEffect(addReflectionToFilterOperations(style))); |
| 3068 return filterInfo->lastEffect(); | 3089 return resourceInfo->lastEffect(); |
| 3069 } | 3090 } |
| 3070 | 3091 |
| 3071 FloatRect PaintLayer::mapRectForFilter(const FloatRect& rect) const { | 3092 FloatRect PaintLayer::mapRectForFilter(const FloatRect& rect) const { |
| 3072 if (!hasFilterThatMovesPixels()) | 3093 if (!hasFilterThatMovesPixels()) |
| 3073 return rect; | 3094 return rect; |
| 3074 | 3095 |
| 3075 // Ensure the filter-chain is refreshed wrt reference filters. | 3096 // Ensure the filter-chain is refreshed wrt reference filters. |
| 3076 // TODO(fs): Avoid having this side-effect inducing call. | 3097 // TODO(fs): Avoid having this side-effect inducing call. |
| 3077 lastFilterEffect(); | 3098 lastFilterEffect(); |
| 3078 | 3099 |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3229 } | 3250 } |
| 3230 | 3251 |
| 3231 void showLayerTree(const blink::LayoutObject* layoutObject) { | 3252 void showLayerTree(const blink::LayoutObject* layoutObject) { |
| 3232 if (!layoutObject) { | 3253 if (!layoutObject) { |
| 3233 LOG(INFO) << "Cannot showLayerTree. Root is (nil)"; | 3254 LOG(INFO) << "Cannot showLayerTree. Root is (nil)"; |
| 3234 return; | 3255 return; |
| 3235 } | 3256 } |
| 3236 showLayerTree(layoutObject->enclosingLayer()); | 3257 showLayerTree(layoutObject->enclosingLayer()); |
| 3237 } | 3258 } |
| 3238 #endif | 3259 #endif |
| OLD | NEW |