OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org> |
3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> |
4 * Copyright (C) 2005 Eric Seidel <eric@webkit.org> | 4 * Copyright (C) 2005 Eric Seidel <eric@webkit.org> |
5 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> | 5 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> |
6 * Copyright (C) 2013 Google Inc. All rights reserved. | 6 * Copyright (C) 2013 Google Inc. All rights reserved. |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 static void luminanceToAlphaMatrix(SkScalar matrix[kColorMatrixSize]) | 114 static void luminanceToAlphaMatrix(SkScalar matrix[kColorMatrixSize]) |
115 { | 115 { |
116 memset(matrix, 0, kColorMatrixSize * sizeof(SkScalar)); | 116 memset(matrix, 0, kColorMatrixSize * sizeof(SkScalar)); |
117 matrix[15] = 0.2125f; | 117 matrix[15] = 0.2125f; |
118 matrix[16] = 0.7154f; | 118 matrix[16] = 0.7154f; |
119 matrix[17] = 0.0721f; | 119 matrix[17] = 0.0721f; |
120 } | 120 } |
121 | 121 |
122 static SkColorFilter* createColorFilter(ColorMatrixType type, const Vector<float
>& values) | 122 static SkColorFilter* createColorFilter(ColorMatrixType type, const Vector<float
>& values) |
123 { | 123 { |
124 // Use defaults if values contains too few values. See SVGFEColorMatrixEleme
nt::build | 124 // Use defaults if values contains too few/many values. |
125 SkScalar matrix[kColorMatrixSize]; | 125 SkScalar matrix[kColorMatrixSize]; |
126 memset(matrix, 0, kColorMatrixSize * sizeof(SkScalar)); | 126 memset(matrix, 0, kColorMatrixSize * sizeof(SkScalar)); |
127 matrix[0] = matrix[6] = matrix[12] = matrix[18] = 1; | 127 matrix[0] = matrix[6] = matrix[12] = matrix[18] = 1; |
128 | 128 |
129 switch (type) { | 129 switch (type) { |
130 case FECOLORMATRIX_TYPE_UNKNOWN: | 130 case FECOLORMATRIX_TYPE_UNKNOWN: |
131 break; | 131 break; |
132 case FECOLORMATRIX_TYPE_MATRIX: | 132 case FECOLORMATRIX_TYPE_MATRIX: |
133 if (values.size() >= kColorMatrixSize) { | 133 if (values.size() == kColorMatrixSize) { |
134 for (unsigned i = 0; i < kColorMatrixSize; ++i) | 134 for (unsigned i = 0; i < kColorMatrixSize; ++i) |
135 matrix[i] = values[i]; | 135 matrix[i] = values[i]; |
136 } | 136 } |
137 matrix[4] *= SkScalar(255); | 137 matrix[4] *= SkScalar(255); |
138 matrix[9] *= SkScalar(255); | 138 matrix[9] *= SkScalar(255); |
139 matrix[14] *= SkScalar(255); | 139 matrix[14] *= SkScalar(255); |
140 matrix[19] *= SkScalar(255); | 140 matrix[19] *= SkScalar(255); |
141 break; | 141 break; |
142 case FECOLORMATRIX_TYPE_SATURATE: | 142 case FECOLORMATRIX_TYPE_SATURATE: |
143 if (values.size()) | 143 if (values.size() == 1) |
144 saturateMatrix(values[0], matrix); | 144 saturateMatrix(values[0], matrix); |
145 break; | 145 break; |
146 case FECOLORMATRIX_TYPE_HUEROTATE: | 146 case FECOLORMATRIX_TYPE_HUEROTATE: |
147 if (values.size()) | 147 if (values.size() == 1) |
148 hueRotateMatrix(values[0], matrix); | 148 hueRotateMatrix(values[0], matrix); |
149 break; | 149 break; |
150 case FECOLORMATRIX_TYPE_LUMINANCETOALPHA: | 150 case FECOLORMATRIX_TYPE_LUMINANCETOALPHA: |
151 luminanceToAlphaMatrix(matrix); | 151 luminanceToAlphaMatrix(matrix); |
152 break; | 152 break; |
153 } | 153 } |
154 return SkColorMatrixFilter::Create(matrix); | 154 return SkColorMatrixFilter::Create(matrix); |
155 } | 155 } |
156 | 156 |
157 bool FEColorMatrix::affectsTransparentPixels() | 157 bool FEColorMatrix::affectsTransparentPixels() |
(...skipping 26 matching lines...) Expand all Loading... |
184 case FECOLORMATRIX_TYPE_HUEROTATE: | 184 case FECOLORMATRIX_TYPE_HUEROTATE: |
185 ts << "HUEROTATE"; | 185 ts << "HUEROTATE"; |
186 break; | 186 break; |
187 case FECOLORMATRIX_TYPE_LUMINANCETOALPHA: | 187 case FECOLORMATRIX_TYPE_LUMINANCETOALPHA: |
188 ts << "LUMINANCETOALPHA"; | 188 ts << "LUMINANCETOALPHA"; |
189 break; | 189 break; |
190 } | 190 } |
191 return ts; | 191 return ts; |
192 } | 192 } |
193 | 193 |
| 194 static bool valuesIsValidForType(ColorMatrixType type, const Vector<float>& valu
es) |
| 195 { |
| 196 switch (type) { |
| 197 case FECOLORMATRIX_TYPE_MATRIX: |
| 198 return values.size() == kColorMatrixSize; |
| 199 case FECOLORMATRIX_TYPE_SATURATE: |
| 200 case FECOLORMATRIX_TYPE_HUEROTATE: |
| 201 return values.size() == 1; |
| 202 case FECOLORMATRIX_TYPE_LUMINANCETOALPHA: |
| 203 return values.size() == 0; |
| 204 case FECOLORMATRIX_TYPE_UNKNOWN: |
| 205 break; |
| 206 } |
| 207 ASSERT_NOT_REACHED(); |
| 208 return false; |
| 209 } |
| 210 |
194 TextStream& FEColorMatrix::externalRepresentation(TextStream& ts, int indent) co
nst | 211 TextStream& FEColorMatrix::externalRepresentation(TextStream& ts, int indent) co
nst |
195 { | 212 { |
196 writeIndent(ts, indent); | 213 writeIndent(ts, indent); |
197 ts << "[feColorMatrix"; | 214 ts << "[feColorMatrix"; |
198 FilterEffect::externalRepresentation(ts); | 215 FilterEffect::externalRepresentation(ts); |
199 ts << " type=\"" << m_type << "\""; | 216 ts << " type=\"" << m_type << "\""; |
200 if (!m_values.isEmpty()) { | 217 if (!m_values.isEmpty() && valuesIsValidForType(m_type, m_values)) { |
201 ts << " values=\""; | 218 ts << " values=\""; |
202 Vector<float>::const_iterator ptr = m_values.begin(); | 219 Vector<float>::const_iterator ptr = m_values.begin(); |
203 const Vector<float>::const_iterator end = m_values.end(); | 220 const Vector<float>::const_iterator end = m_values.end(); |
204 while (ptr < end) { | 221 while (ptr < end) { |
205 ts << *ptr; | 222 ts << *ptr; |
206 ++ptr; | 223 ++ptr; |
207 if (ptr < end) | 224 if (ptr < end) |
208 ts << " "; | 225 ts << " "; |
209 } | 226 } |
210 ts << "\""; | 227 ts << "\""; |
211 } | 228 } |
212 ts << "]\n"; | 229 ts << "]\n"; |
213 inputEffect(0)->externalRepresentation(ts, indent + 1); | 230 inputEffect(0)->externalRepresentation(ts, indent + 1); |
214 return ts; | 231 return ts; |
215 } | 232 } |
216 | 233 |
217 } // namespace blink | 234 } // namespace blink |
OLD | NEW |