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

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

Issue 2342913003: Replace narrowPrecisionToFloat with clampTo<float> (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) 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2011 Apple Inc. All rights reserved.
3 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 13 matching lines...) Expand all
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */ 25 */
26 26
27 #include "core/paint/FilterEffectBuilder.h" 27 #include "core/paint/FilterEffectBuilder.h"
28 28
29 #include "core/layout/svg/ReferenceFilterBuilder.h" 29 #include "core/layout/svg/ReferenceFilterBuilder.h"
30 #include "core/paint/PaintLayer.h" 30 #include "core/paint/PaintLayer.h"
31 #include "core/svg/SVGFilterElement.h" 31 #include "core/svg/SVGFilterElement.h"
32 #include "core/svg/SVGLengthContext.h" 32 #include "core/svg/SVGLengthContext.h"
33 #include "core/svg/graphics/filters/SVGFilterBuilder.h" 33 #include "core/svg/graphics/filters/SVGFilterBuilder.h"
34 #include "platform/FloatConversion.h"
35 #include "platform/LengthFunctions.h" 34 #include "platform/LengthFunctions.h"
36 #include "platform/graphics/ColorSpace.h" 35 #include "platform/graphics/ColorSpace.h"
37 #include "platform/graphics/filters/FEBoxReflect.h" 36 #include "platform/graphics/filters/FEBoxReflect.h"
38 #include "platform/graphics/filters/FEColorMatrix.h" 37 #include "platform/graphics/filters/FEColorMatrix.h"
39 #include "platform/graphics/filters/FEComponentTransfer.h" 38 #include "platform/graphics/filters/FEComponentTransfer.h"
40 #include "platform/graphics/filters/FEDropShadow.h" 39 #include "platform/graphics/filters/FEDropShadow.h"
41 #include "platform/graphics/filters/FEGaussianBlur.h" 40 #include "platform/graphics/filters/FEGaussianBlur.h"
42 #include "platform/graphics/filters/Filter.h" 41 #include "platform/graphics/filters/Filter.h"
43 #include "platform/graphics/filters/FilterOperations.h" 42 #include "platform/graphics/filters/FilterOperations.h"
44 #include "platform/graphics/filters/SourceGraphic.h" 43 #include "platform/graphics/filters/SourceGraphic.h"
(...skipping 21 matching lines...) Expand all
66 65
67 Vector<float> grayscaleMatrix(double amount) 66 Vector<float> grayscaleMatrix(double amount)
68 { 67 {
69 double oneMinusAmount = clampTo(1 - amount, 0.0, 1.0); 68 double oneMinusAmount = clampTo(1 - amount, 0.0, 1.0);
70 69
71 // See https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#grayscale Equivalent 70 // See https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#grayscale Equivalent
72 // for information on parameters. 71 // for information on parameters.
73 Vector<float> matrix; 72 Vector<float> matrix;
74 matrix.reserveInitialCapacity(20); 73 matrix.reserveInitialCapacity(20);
75 74
76 matrix.uncheckedAppend(narrowPrecisionToFloat(0.2126 + 0.7874 * oneMinusAmou nt)); 75 matrix.uncheckedAppend(clampTo<float>(0.2126 + 0.7874 * oneMinusAmount));
77 matrix.uncheckedAppend(narrowPrecisionToFloat(0.7152 - 0.7152 * oneMinusAmou nt)); 76 matrix.uncheckedAppend(clampTo<float>(0.7152 - 0.7152 * oneMinusAmount));
78 matrix.uncheckedAppend(narrowPrecisionToFloat(0.0722 - 0.0722 * oneMinusAmou nt)); 77 matrix.uncheckedAppend(clampTo<float>(0.0722 - 0.0722 * oneMinusAmount));
79 endMatrixRow(matrix); 78 endMatrixRow(matrix);
80 79
81 matrix.uncheckedAppend(narrowPrecisionToFloat(0.2126 - 0.2126 * oneMinusAmou nt)); 80 matrix.uncheckedAppend(clampTo<float>(0.2126 - 0.2126 * oneMinusAmount));
82 matrix.uncheckedAppend(narrowPrecisionToFloat(0.7152 + 0.2848 * oneMinusAmou nt)); 81 matrix.uncheckedAppend(clampTo<float>(0.7152 + 0.2848 * oneMinusAmount));
83 matrix.uncheckedAppend(narrowPrecisionToFloat(0.0722 - 0.0722 * oneMinusAmou nt)); 82 matrix.uncheckedAppend(clampTo<float>(0.0722 - 0.0722 * oneMinusAmount));
84 endMatrixRow(matrix); 83 endMatrixRow(matrix);
85 84
86 matrix.uncheckedAppend(narrowPrecisionToFloat(0.2126 - 0.2126 * oneMinusAmou nt)); 85 matrix.uncheckedAppend(clampTo<float>(0.2126 - 0.2126 * oneMinusAmount));
87 matrix.uncheckedAppend(narrowPrecisionToFloat(0.7152 - 0.7152 * oneMinusAmou nt)); 86 matrix.uncheckedAppend(clampTo<float>(0.7152 - 0.7152 * oneMinusAmount));
88 matrix.uncheckedAppend(narrowPrecisionToFloat(0.0722 + 0.9278 * oneMinusAmou nt)); 87 matrix.uncheckedAppend(clampTo<float>(0.0722 + 0.9278 * oneMinusAmount));
89 endMatrixRow(matrix); 88 endMatrixRow(matrix);
90 89
91 lastMatrixRow(matrix); 90 lastMatrixRow(matrix);
92 return matrix; 91 return matrix;
93 } 92 }
94 93
95 Vector<float> sepiaMatrix(double amount) 94 Vector<float> sepiaMatrix(double amount)
96 { 95 {
97 double oneMinusAmount = clampTo(1 - amount, 0.0, 1.0); 96 double oneMinusAmount = clampTo(1 - amount, 0.0, 1.0);
98 97
99 // See https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#sepiaEqui valent 98 // See https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#sepiaEqui valent
100 // for information on parameters. 99 // for information on parameters.
101 Vector<float> matrix; 100 Vector<float> matrix;
102 matrix.reserveInitialCapacity(20); 101 matrix.reserveInitialCapacity(20);
103 102
104 matrix.uncheckedAppend(narrowPrecisionToFloat(0.393 + 0.607 * oneMinusAmount )); 103 matrix.uncheckedAppend(clampTo<float>(0.393 + 0.607 * oneMinusAmount));
105 matrix.uncheckedAppend(narrowPrecisionToFloat(0.769 - 0.769 * oneMinusAmount )); 104 matrix.uncheckedAppend(clampTo<float>(0.769 - 0.769 * oneMinusAmount));
106 matrix.uncheckedAppend(narrowPrecisionToFloat(0.189 - 0.189 * oneMinusAmount )); 105 matrix.uncheckedAppend(clampTo<float>(0.189 - 0.189 * oneMinusAmount));
107 endMatrixRow(matrix); 106 endMatrixRow(matrix);
108 107
109 matrix.uncheckedAppend(narrowPrecisionToFloat(0.349 - 0.349 * oneMinusAmount )); 108 matrix.uncheckedAppend(clampTo<float>(0.349 - 0.349 * oneMinusAmount));
110 matrix.uncheckedAppend(narrowPrecisionToFloat(0.686 + 0.314 * oneMinusAmount )); 109 matrix.uncheckedAppend(clampTo<float>(0.686 + 0.314 * oneMinusAmount));
111 matrix.uncheckedAppend(narrowPrecisionToFloat(0.168 - 0.168 * oneMinusAmount )); 110 matrix.uncheckedAppend(clampTo<float>(0.168 - 0.168 * oneMinusAmount));
112 endMatrixRow(matrix); 111 endMatrixRow(matrix);
113 112
114 matrix.uncheckedAppend(narrowPrecisionToFloat(0.272 - 0.272 * oneMinusAmount )); 113 matrix.uncheckedAppend(clampTo<float>(0.272 - 0.272 * oneMinusAmount));
115 matrix.uncheckedAppend(narrowPrecisionToFloat(0.534 - 0.534 * oneMinusAmount )); 114 matrix.uncheckedAppend(clampTo<float>(0.534 - 0.534 * oneMinusAmount));
116 matrix.uncheckedAppend(narrowPrecisionToFloat(0.131 + 0.869 * oneMinusAmount )); 115 matrix.uncheckedAppend(clampTo<float>(0.131 + 0.869 * oneMinusAmount));
117 endMatrixRow(matrix); 116 endMatrixRow(matrix);
118 117
119 lastMatrixRow(matrix); 118 lastMatrixRow(matrix);
120 return matrix; 119 return matrix;
121 } 120 }
122 121
123 FloatRect computeReferenceBox(const Element& element, const FloatSize* zoomedRef erenceBoxSize, float zoom) 122 FloatRect computeReferenceBox(const Element& element, const FloatSize* zoomedRef erenceBoxSize, float zoom)
124 { 123 {
125 FloatRect box; 124 FloatRect box;
126 if (zoomedReferenceBoxSize) { 125 if (zoomedReferenceBoxSize) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_MATR IX, inputParameters); 166 effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_MATR IX, inputParameters);
168 break; 167 break;
169 } 168 }
170 case FilterOperation::SEPIA: { 169 case FilterOperation::SEPIA: {
171 Vector<float> inputParameters = sepiaMatrix(toBasicColorMatrixFilter Operation(filterOperation)->amount()); 170 Vector<float> inputParameters = sepiaMatrix(toBasicColorMatrixFilter Operation(filterOperation)->amount());
172 effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_MATR IX, inputParameters); 171 effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_MATR IX, inputParameters);
173 break; 172 break;
174 } 173 }
175 case FilterOperation::SATURATE: { 174 case FilterOperation::SATURATE: {
176 Vector<float> inputParameters; 175 Vector<float> inputParameters;
177 inputParameters.append(narrowPrecisionToFloat(toBasicColorMatrixFilt erOperation(filterOperation)->amount())); 176 inputParameters.append(clampTo<float>(toBasicColorMatrixFilterOperat ion(filterOperation)->amount()));
178 effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_SATU RATE, inputParameters); 177 effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_SATU RATE, inputParameters);
179 break; 178 break;
180 } 179 }
181 case FilterOperation::HUE_ROTATE: { 180 case FilterOperation::HUE_ROTATE: {
182 Vector<float> inputParameters; 181 Vector<float> inputParameters;
183 inputParameters.append(narrowPrecisionToFloat(toBasicColorMatrixFilt erOperation(filterOperation)->amount())); 182 inputParameters.append(clampTo<float>(toBasicColorMatrixFilterOperat ion(filterOperation)->amount()));
184 effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_HUER OTATE, inputParameters); 183 effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_HUER OTATE, inputParameters);
185 break; 184 break;
186 } 185 }
187 case FilterOperation::INVERT: { 186 case FilterOperation::INVERT: {
188 BasicComponentTransferFilterOperation* componentTransferOperation = toBasicComponentTransferFilterOperation(filterOperation); 187 BasicComponentTransferFilterOperation* componentTransferOperation = toBasicComponentTransferFilterOperation(filterOperation);
189 ComponentTransferFunction transferFunction; 188 ComponentTransferFunction transferFunction;
190 transferFunction.type = FECOMPONENTTRANSFER_TYPE_TABLE; 189 transferFunction.type = FECOMPONENTTRANSFER_TYPE_TABLE;
191 Vector<float> transferParameters; 190 Vector<float> transferParameters;
192 transferParameters.append(narrowPrecisionToFloat(componentTransferOp eration->amount())); 191 transferParameters.append(clampTo<float>(componentTransferOperation- >amount()));
193 transferParameters.append(narrowPrecisionToFloat(1 - componentTransf erOperation->amount())); 192 transferParameters.append(clampTo<float>(1 - componentTransferOperat ion->amount()));
194 transferFunction.tableValues = transferParameters; 193 transferFunction.tableValues = transferParameters;
195 194
196 ComponentTransferFunction nullFunction; 195 ComponentTransferFunction nullFunction;
197 effect = FEComponentTransfer::create(parentFilter, transferFunction, transferFunction, transferFunction, nullFunction); 196 effect = FEComponentTransfer::create(parentFilter, transferFunction, transferFunction, transferFunction, nullFunction);
198 break; 197 break;
199 } 198 }
200 case FilterOperation::OPACITY: { 199 case FilterOperation::OPACITY: {
201 ComponentTransferFunction transferFunction; 200 ComponentTransferFunction transferFunction;
202 transferFunction.type = FECOMPONENTTRANSFER_TYPE_TABLE; 201 transferFunction.type = FECOMPONENTTRANSFER_TYPE_TABLE;
203 Vector<float> transferParameters; 202 Vector<float> transferParameters;
204 transferParameters.append(0); 203 transferParameters.append(0);
205 transferParameters.append(narrowPrecisionToFloat(toBasicComponentTra nsferFilterOperation(filterOperation)->amount())); 204 transferParameters.append(clampTo<float>(toBasicComponentTransferFil terOperation(filterOperation)->amount()));
206 transferFunction.tableValues = transferParameters; 205 transferFunction.tableValues = transferParameters;
207 206
208 ComponentTransferFunction nullFunction; 207 ComponentTransferFunction nullFunction;
209 effect = FEComponentTransfer::create(parentFilter, nullFunction, nul lFunction, nullFunction, transferFunction); 208 effect = FEComponentTransfer::create(parentFilter, nullFunction, nul lFunction, nullFunction, transferFunction);
210 break; 209 break;
211 } 210 }
212 case FilterOperation::BRIGHTNESS: { 211 case FilterOperation::BRIGHTNESS: {
213 ComponentTransferFunction transferFunction; 212 ComponentTransferFunction transferFunction;
214 transferFunction.type = FECOMPONENTTRANSFER_TYPE_LINEAR; 213 transferFunction.type = FECOMPONENTTRANSFER_TYPE_LINEAR;
215 transferFunction.slope = narrowPrecisionToFloat(toBasicComponentTran sferFilterOperation(filterOperation)->amount()); 214 transferFunction.slope = clampTo<float>(toBasicComponentTransferFilt erOperation(filterOperation)->amount());
216 transferFunction.intercept = 0; 215 transferFunction.intercept = 0;
217 216
218 ComponentTransferFunction nullFunction; 217 ComponentTransferFunction nullFunction;
219 effect = FEComponentTransfer::create(parentFilter, transferFunction, transferFunction, transferFunction, nullFunction); 218 effect = FEComponentTransfer::create(parentFilter, transferFunction, transferFunction, transferFunction, nullFunction);
220 break; 219 break;
221 } 220 }
222 case FilterOperation::CONTRAST: { 221 case FilterOperation::CONTRAST: {
223 ComponentTransferFunction transferFunction; 222 ComponentTransferFunction transferFunction;
224 transferFunction.type = FECOMPONENTTRANSFER_TYPE_LINEAR; 223 transferFunction.type = FECOMPONENTTRANSFER_TYPE_LINEAR;
225 float amount = narrowPrecisionToFloat(toBasicComponentTransferFilter Operation(filterOperation)->amount()); 224 float amount = clampTo<float>(toBasicComponentTransferFilterOperatio n(filterOperation)->amount());
226 transferFunction.slope = amount; 225 transferFunction.slope = amount;
227 transferFunction.intercept = -0.5 * amount + 0.5; 226 transferFunction.intercept = -0.5 * amount + 0.5;
228 227
229 ComponentTransferFunction nullFunction; 228 ComponentTransferFunction nullFunction;
230 effect = FEComponentTransfer::create(parentFilter, transferFunction, transferFunction, transferFunction, nullFunction); 229 effect = FEComponentTransfer::create(parentFilter, transferFunction, transferFunction, transferFunction, nullFunction);
231 break; 230 break;
232 } 231 }
233 case FilterOperation::BLUR: { 232 case FilterOperation::BLUR: {
234 float stdDeviation = floatValueForLength(toBlurFilterOperation(filte rOperation)->stdDeviation(), 0); 233 float stdDeviation = floatValueForLength(toBlurFilterOperation(filte rOperation)->stdDeviation(), 0);
235 effect = FEGaussianBlur::create(parentFilter, stdDeviation, stdDevia tion); 234 effect = FEGaussianBlur::create(parentFilter, stdDeviation, stdDevia tion);
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 if (!previousEffect) 314 if (!previousEffect)
316 previousEffect = result->getSourceGraphic(); 315 previousEffect = result->getSourceGraphic();
317 SVGFilterBuilder builder(previousEffect, nodeMap, fillPaint, strokePaint); 316 SVGFilterBuilder builder(previousEffect, nodeMap, fillPaint, strokePaint);
318 builder.buildGraph(result, filterElement, referenceBox); 317 builder.buildGraph(result, filterElement, referenceBox);
319 result->setLastEffect(builder.lastEffect()); 318 result->setLastEffect(builder.lastEffect());
320 return result; 319 return result;
321 } 320 }
322 321
323 } // namespace blink 322 } // namespace blink
324 323
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698