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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/filters/FilterEffect.h

Issue 2313583002: Revert of Revamp filter primitive region calculations for Filter Effects (Closed)
Patch Set: Created 4 years, 3 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) 2008 Alex Mathews <possessedpenguinbob@gmail.com> 2 * Copyright (C) 2008 Alex Mathews <possessedpenguinbob@gmail.com>
3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> 3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org>
4 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 4 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
5 * Copyright (C) 2013 Google Inc. All rights reserved. 5 * Copyright (C) 2013 Google Inc. All rights reserved.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 43
44 typedef HeapVector<Member<FilterEffect>> FilterEffectVector; 44 typedef HeapVector<Member<FilterEffect>> FilterEffectVector;
45 45
46 enum FilterEffectType { 46 enum FilterEffectType {
47 FilterEffectTypeUnknown, 47 FilterEffectTypeUnknown,
48 FilterEffectTypeImage, 48 FilterEffectTypeImage,
49 FilterEffectTypeTile, 49 FilterEffectTypeTile,
50 FilterEffectTypeSourceInput 50 FilterEffectTypeSourceInput
51 }; 51 };
52 52
53 enum DetermineMaxEffectRectFlag { 53 enum DetermineSubregionFlag {
54 DetermineMaxEffectRectNone = 0, 54 DetermineSubregionNone = 0,
55 MapRectForward = 1, 55 MapRectForward = 1,
56 ClipToFilterRegion = 1 << 1 56 ClipToFilterRegion = 1 << 1
57 }; 57 };
58 58
59 typedef int DetermineMaxEffectRectFlags; 59 typedef int DetermineSubregionFlags;
60 60
61 class PLATFORM_EXPORT FilterEffect : public GarbageCollectedFinalized<FilterEffe ct> { 61 class PLATFORM_EXPORT FilterEffect : public GarbageCollectedFinalized<FilterEffe ct> {
62 WTF_MAKE_NONCOPYABLE(FilterEffect); 62 WTF_MAKE_NONCOPYABLE(FilterEffect);
63 public: 63 public:
64 virtual ~FilterEffect(); 64 virtual ~FilterEffect();
65 DECLARE_VIRTUAL_TRACE(); 65 DECLARE_VIRTUAL_TRACE();
66 66
67 void clearResult(); 67 void clearResult();
68 68
69 FilterEffectVector& inputEffects() { return m_inputEffects; } 69 FilterEffectVector& inputEffects() { return m_inputEffects; }
70 FilterEffect* inputEffect(unsigned) const; 70 FilterEffect* inputEffect(unsigned) const;
71 unsigned numberOfEffectInputs() const { return m_inputEffects.size(); } 71 unsigned numberOfEffectInputs() const { return m_inputEffects.size(); }
72 72
73 inline bool hasImageFilter() const 73 inline bool hasImageFilter() const
74 { 74 {
75 return m_imageFilters[0] || m_imageFilters[1] || m_imageFilters[2] || m_ imageFilters[3]; 75 return m_imageFilters[0] || m_imageFilters[1] || m_imageFilters[2] || m_ imageFilters[3];
76 } 76 }
77 77
78 IntRect absolutePaintRect() const { return m_absolutePaintRect; } 78 IntRect absolutePaintRect() const { return m_absolutePaintRect; }
79 79
80 FloatRect maxEffectRect() const { return m_maxEffectRect; } 80 FloatRect maxEffectRect() const { return m_maxEffectRect; }
81 void setMaxEffectRect(const FloatRect& maxEffectRect) { m_maxEffectRect = ma xEffectRect; }
81 82
82 virtual sk_sp<SkImageFilter> createImageFilter(); 83 virtual sk_sp<SkImageFilter> createImageFilter();
83 virtual sk_sp<SkImageFilter> createImageFilterWithoutValidation(); 84 virtual sk_sp<SkImageFilter> createImageFilterWithoutValidation();
84 85
85 // Mapping a rect forwards determines which which destination pixels a 86 // Mapping a rect forwards determines which which destination pixels a
86 // given source rect would affect. Mapping a rect backwards determines 87 // given source rect would affect. Mapping a rect backwards determines
87 // which pixels from the source rect would be required to fill a given 88 // which pixels from the source rect would be required to fill a given
88 // destination rect. Note that these are not necessarily the inverse of 89 // destination rect. Note that these are not necessarily the inverse of
89 // each other. For example, for FEGaussianBlur, they are the same 90 // each other. For example, for FEGaussianBlur, they are the same
90 // transformation. 91 // transformation.
91 virtual FloatRect mapRect(const FloatRect& rect, bool forward = true) const { return rect; } 92 virtual FloatRect mapRect(const FloatRect& rect, bool forward = true) const { return rect; }
92 // A version of the above that is used for calculating paint rects. We can't 93 // A version of the above that is used for calculating paint rects. We can't
93 // use mapRect above for that, because that is also used for calculating eff ect 94 // use mapRect above for that, because that is also used for calculating eff ect
94 // regions for CSS filters and has undesirable effects for tile and 95 // regions for CSS filters and has undesirable effects for tile and
95 // displacement map. 96 // displacement map.
96 virtual FloatRect mapPaintRect(const FloatRect& rect, bool forward) const 97 virtual FloatRect mapPaintRect(const FloatRect& rect, bool forward) const
97 { 98 {
98 return mapRect(rect, forward); 99 return mapRect(rect, forward);
99 } 100 }
100 FloatRect mapRectRecursive(const FloatRect&) const; 101 FloatRect mapRectRecursive(const FloatRect&) const;
101 102
102 virtual FilterEffectType getFilterEffectType() const { return FilterEffectTy peUnknown; } 103 virtual FilterEffectType getFilterEffectType() const { return FilterEffectTy peUnknown; }
103 104
104 virtual TextStream& externalRepresentation(TextStream&, int indention = 0) c onst; 105 virtual TextStream& externalRepresentation(TextStream&, int indention = 0) c onst;
105 106
107 // The following functions are SVG specific and will move to LayoutSVGResour ceFilterPrimitive.
108 // See bug https://bugs.webkit.org/show_bug.cgi?id=45614.
109 bool hasX() const { return m_hasX; }
110 void setHasX(bool value) { m_hasX = value; }
111
112 bool hasY() const { return m_hasY; }
113 void setHasY(bool value) { m_hasY = value; }
114
115 bool hasWidth() const { return m_hasWidth; }
116 void setHasWidth(bool value) { m_hasWidth = value; }
117
118 bool hasHeight() const { return m_hasHeight; }
119 void setHasHeight(bool value) { m_hasHeight = value; }
120
106 FloatRect filterPrimitiveSubregion() const { return m_filterPrimitiveSubregi on; } 121 FloatRect filterPrimitiveSubregion() const { return m_filterPrimitiveSubregi on; }
107 void setFilterPrimitiveSubregion(const FloatRect& filterPrimitiveSubregion) { m_filterPrimitiveSubregion = filterPrimitiveSubregion; } 122 void setFilterPrimitiveSubregion(const FloatRect& filterPrimitiveSubregion) { m_filterPrimitiveSubregion = filterPrimitiveSubregion; }
108 123
124 const FloatRect& effectBoundaries() const { return m_effectBoundaries; }
125 void setEffectBoundaries(const FloatRect& effectBoundaries) { m_effectBounda ries = effectBoundaries; }
126 FloatRect applyEffectBoundaries(const FloatRect&) const;
127
109 Filter* getFilter() { return m_filter; } 128 Filter* getFilter() { return m_filter; }
110 const Filter* getFilter() const { return m_filter; } 129 const Filter* getFilter() const { return m_filter; }
111 130
112 bool clipsToBounds() const { return m_clipsToBounds; } 131 bool clipsToBounds() const { return m_clipsToBounds; }
113 void setClipsToBounds(bool value) { m_clipsToBounds = value; } 132 void setClipsToBounds(bool value) { m_clipsToBounds = value; }
114 133
115 ColorSpace operatingColorSpace() const { return m_operatingColorSpace; } 134 ColorSpace operatingColorSpace() const { return m_operatingColorSpace; }
116 virtual void setOperatingColorSpace(ColorSpace colorSpace) { m_operatingColo rSpace = colorSpace; } 135 virtual void setOperatingColorSpace(ColorSpace colorSpace) { m_operatingColo rSpace = colorSpace; }
117 136
118 FloatRect determineMaximumEffectRect(DetermineMaxEffectRectFlags); 137 FloatRect determineFilterPrimitiveSubregion(DetermineSubregionFlags = Determ ineSubregionNone);
119 138
120 virtual FloatRect determineAbsolutePaintRect(const FloatRect& requestedAbsol uteRect); 139 virtual FloatRect determineAbsolutePaintRect(const FloatRect& requestedAbsol uteRect);
121 virtual bool affectsTransparentPixels() { return false; } 140 virtual bool affectsTransparentPixels() { return false; }
122 141
123 // Return false if the filter will only operate correctly on valid RGBA valu es, with 142 // Return false if the filter will only operate correctly on valid RGBA valu es, with
124 // alpha in [0,255] and each color component in [0, alpha]. 143 // alpha in [0,255] and each color component in [0, alpha].
125 virtual bool mayProduceInvalidPreMultipliedPixels() { return false; } 144 virtual bool mayProduceInvalidPreMultipliedPixels() { return false; }
126 145
127 SkImageFilter* getImageFilter(ColorSpace, bool requiresPMColorValidation) co nst; 146 SkImageFilter* getImageFilter(ColorSpace, bool requiresPMColorValidation) co nst;
128 void setImageFilter(ColorSpace, bool requiresPMColorValidation, sk_sp<SkImag eFilter>); 147 void setImageFilter(ColorSpace, bool requiresPMColorValidation, sk_sp<SkImag eFilter>);
(...skipping 24 matching lines...) Expand all
153 FloatRect m_maxEffectRect; 172 FloatRect m_maxEffectRect;
154 Member<Filter> m_filter; 173 Member<Filter> m_filter;
155 174
156 // The following member variables are SVG specific and will move to LayoutSV GResourceFilterPrimitive. 175 // The following member variables are SVG specific and will move to LayoutSV GResourceFilterPrimitive.
157 // See bug https://bugs.webkit.org/show_bug.cgi?id=45614. 176 // See bug https://bugs.webkit.org/show_bug.cgi?id=45614.
158 177
159 // The subregion of a filter primitive according to the SVG Filter specifica tion in local coordinates. 178 // The subregion of a filter primitive according to the SVG Filter specifica tion in local coordinates.
160 // This is SVG specific and needs to move to LayoutSVGResourceFilterPrimitiv e. 179 // This is SVG specific and needs to move to LayoutSVGResourceFilterPrimitiv e.
161 FloatRect m_filterPrimitiveSubregion; 180 FloatRect m_filterPrimitiveSubregion;
162 181
182 // x, y, width and height of the actual SVGFE*Element. Is needed to determin e the subregion of the
183 // filter primitive on a later step.
184 FloatRect m_effectBoundaries;
185 bool m_hasX;
186 bool m_hasY;
187 bool m_hasWidth;
188 bool m_hasHeight;
189
163 // Should the effect clip to its primitive region, or expand to use the comb ined region of its inputs. 190 // Should the effect clip to its primitive region, or expand to use the comb ined region of its inputs.
164 bool m_clipsToBounds; 191 bool m_clipsToBounds;
165 192
166 bool m_originTainted; 193 bool m_originTainted;
167 194
168 ColorSpace m_operatingColorSpace; 195 ColorSpace m_operatingColorSpace;
169 196
170 sk_sp<SkImageFilter> m_imageFilters[4]; 197 sk_sp<SkImageFilter> m_imageFilters[4];
171 }; 198 };
172 199
173 } // namespace blink 200 } // namespace blink
174 201
175 #endif // FilterEffect_h 202 #endif // FilterEffect_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698