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

Side by Side Diff: third_party/WebKit/Source/core/paint/SVGPaintContext.cpp

Issue 2065593002: Unprefix the CSS 'filter' property (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adjust test Created 4 years, 6 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) 2007, 2008 Rob Buis <buis@kde.org> 2 * Copyright (C) 2007, 2008 Rob Buis <buis@kde.org>
3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> 3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5 * Copyright (C) 2009 Google, Inc. All rights reserved. 5 * Copyright (C) 2009 Google, Inc. All rights reserved.
6 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> 6 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org>
7 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. 7 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 SVGResources* resources = SVGResourcesCache::cachedResourcesForLayoutObject( &m_object); 70 SVGResources* resources = SVGResourcesCache::cachedResourcesForLayoutObject( &m_object);
71 71
72 // When rendering clip paths as masks, only geometric operations should be i ncluded so skip 72 // When rendering clip paths as masks, only geometric operations should be i ncluded so skip
73 // non-geometric operations such as compositing, masking, and filtering. 73 // non-geometric operations such as compositing, masking, and filtering.
74 if (paintInfo().isRenderingClipPathAsMaskImage()) { 74 if (paintInfo().isRenderingClipPathAsMaskImage()) {
75 if (!applyClipIfNecessary(resources)) 75 if (!applyClipIfNecessary(resources))
76 return false; 76 return false;
77 return true; 77 return true;
78 } 78 }
79 79
80 applyCompositingIfNecessary(); 80 bool isSVGRoot = m_object.isSVGRoot();
81
82 // Layer takes care of root opacity and blend mode.
pdr. 2016/06/15 09:50:32 Can you assert that a layer is present? (Similarly
fs 2016/06/15 11:02:43 Added something along those lines.
fs 2016/06/15 22:02:09 Had to adjust this again, because while "has filte
fs 2016/06/20 10:47:07 Fixed up to something that passes trybots.
83 if (!isSVGRoot)
84 applyCompositingIfNecessary();
81 85
82 if (!applyClipIfNecessary(resources)) 86 if (!applyClipIfNecessary(resources))
83 return false; 87 return false;
84 88
85 if (!applyMaskIfNecessary(resources)) 89 if (!applyMaskIfNecessary(resources))
86 return false; 90 return false;
87 91
88 if (!applyFilterIfNecessary(resources)) 92 if (!isSVGRoot && !applyFilterIfNecessary(resources))
89 return false; 93 return false;
90 94
91 if (!isIsolationInstalled() && SVGLayoutSupport::isIsolationRequired(&m_obje ct)) 95 if (!isIsolationInstalled() && SVGLayoutSupport::isIsolationRequired(&m_obje ct))
92 m_compositingRecorder = adoptPtr(new CompositingRecorder(paintInfo().con text, m_object, SkXfermode::kSrcOver_Mode, 1)); 96 m_compositingRecorder = adoptPtr(new CompositingRecorder(paintInfo().con text, m_object, SkXfermode::kSrcOver_Mode, 1));
93 97
94 return true; 98 return true;
95 } 99 }
96 100
97 void SVGPaintContext::applyCompositingIfNecessary() 101 void SVGPaintContext::applyCompositingIfNecessary()
98 { 102 {
99 ASSERT(!paintInfo().isRenderingClipPathAsMaskImage()); 103 ASSERT(!paintInfo().isRenderingClipPathAsMaskImage());
100 104
101 // Layer takes care of root opacity and blend mode.
102 if (m_object.isSVGRoot())
103 return;
104
105 const ComputedStyle& style = m_object.styleRef(); 105 const ComputedStyle& style = m_object.styleRef();
106 float opacity = style.opacity(); 106 float opacity = style.opacity();
107 WebBlendMode blendMode = style.hasBlendMode() && m_object.isBlendingAllowed( ) ? 107 WebBlendMode blendMode = style.hasBlendMode() && m_object.isBlendingAllowed( ) ?
108 style.blendMode() : WebBlendModeNormal; 108 style.blendMode() : WebBlendModeNormal;
109 if (opacity < 1 || blendMode != WebBlendModeNormal) { 109 if (opacity < 1 || blendMode != WebBlendModeNormal) {
110 const FloatRect compositingBounds = m_object.paintInvalidationRectInLoca lSVGCoordinates(); 110 const FloatRect compositingBounds = m_object.paintInvalidationRectInLoca lSVGCoordinates();
111 m_compositingRecorder = adoptPtr(new CompositingRecorder(paintInfo().con text, m_object, 111 m_compositingRecorder = adoptPtr(new CompositingRecorder(paintInfo().con text, m_object,
112 WebCoreCompositeToSkiaComposite(CompositeSourceOver, blendMode), opa city, &compositingBounds)); 112 WebCoreCompositeToSkiaComposite(CompositeSourceOver, blendMode), opa city, &compositingBounds));
113 } 113 }
114 } 114 }
(...skipping 25 matching lines...) Expand all
140 if (!SVGMaskPainter(*masker).prepareEffect(m_object, paintInfo().context )) 140 if (!SVGMaskPainter(*masker).prepareEffect(m_object, paintInfo().context ))
141 return false; 141 return false;
142 m_masker = masker; 142 m_masker = masker;
143 } 143 }
144 return true; 144 return true;
145 } 145 }
146 146
147 bool SVGPaintContext::applyFilterIfNecessary(SVGResources* resources) 147 bool SVGPaintContext::applyFilterIfNecessary(SVGResources* resources)
148 { 148 {
149 if (!resources) { 149 if (!resources) {
150 if (m_object.style()->svgStyle().hasFilter()) 150 if (m_object.style()->hasFilter())
151 return false; 151 return false;
152 } else if (LayoutSVGResourceFilter* filter = resources->filter()) { 152 } else if (LayoutSVGResourceFilter* filter = resources->filter()) {
153 m_filterRecordingContext = adoptPtr(new SVGFilterRecordingContext(paintI nfo().context)); 153 m_filterRecordingContext = adoptPtr(new SVGFilterRecordingContext(paintI nfo().context));
154 m_filter = filter; 154 m_filter = filter;
155 GraphicsContext* filterContext = SVGFilterPainter(*filter).prepareEffect (m_object, *m_filterRecordingContext); 155 GraphicsContext* filterContext = SVGFilterPainter(*filter).prepareEffect (m_object, *m_filterRecordingContext);
156 if (!filterContext) 156 if (!filterContext)
157 return false; 157 return false;
158 158
159 // Because the filter needs to cache its contents we replace the context 159 // Because the filter needs to cache its contents we replace the context
160 // during filtering with the filter's context. 160 // during filtering with the filter's context.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 // though. 222 // though.
223 // Additionally, it's not really safe/guaranteed to be correct, as 223 // Additionally, it's not really safe/guaranteed to be correct, as
224 // something down the paint pipe may want to farther tweak the color 224 // something down the paint pipe may want to farther tweak the color
225 // filter, which could yield incorrect results. (Consider just using 225 // filter, which could yield incorrect results. (Consider just using
226 // saveLayer() w/ this color filter explicitly instead.) 226 // saveLayer() w/ this color filter explicitly instead.)
227 paint.setColorFilter(sk_ref_sp(paintInfo.context.colorFilter())); 227 paint.setColorFilter(sk_ref_sp(paintInfo.context.colorFilter()));
228 return true; 228 return true;
229 } 229 }
230 230
231 } // namespace blink 231 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698