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

Side by Side Diff: third_party/WebKit/Source/core/svg/SVGLengthContext.cpp

Issue 1421533006: Make SVGLength wrap a CSSPrimitiveValue. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed the initial types on properties Created 5 years, 1 month 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) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> 2 * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
4 * Copyright (C) 2007 Apple Inc. All rights reserved. 4 * Copyright (C) 2007 Apple Inc. All rights reserved.
5 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 5 * Copyright (C) Research In Motion Limited 2011. 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 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 float SVGLengthContext::valueForLength(const Length& length, float zoom, float d imension) 176 float SVGLengthContext::valueForLength(const Length& length, float zoom, float d imension)
177 { 177 {
178 ASSERT(zoom != 0); 178 ASSERT(zoom != 0);
179 // isIntrinsic can occur for 'width' and 'height', but has no 179 // isIntrinsic can occur for 'width' and 'height', but has no
180 // real meaning for svg. 180 // real meaning for svg.
181 if (length.isIntrinsic()) 181 if (length.isIntrinsic())
182 return 0; 182 return 0;
183 return floatValueForLength(length, dimension * zoom) / zoom; 183 return floatValueForLength(length, dimension * zoom) / zoom;
184 } 184 }
185 185
186 float SVGLengthContext::convertValueToUserUnits(float value, SVGLengthMode mode, SVGLengthType fromUnit) const 186 float SVGLengthContext::convertValueToUserUnits(float value, SVGLengthMode mode, CSSPrimitiveValue::UnitType fromUnit) const
187 { 187 {
188 float userUnits = value; 188 float userUnits = value;
189 switch (fromUnit) { 189 switch (fromUnit) {
190 case LengthTypeUnknown: 190 case CSSPrimitiveValue::UnitType::Unknown:
Timothy Loh 2015/11/04 00:33:44 this might be an ASSERT_NOT_REACHED case (i.e. let
Stephen Chennney 2015/11/04 18:04:47 Done.
191 return 0; 191 return 0;
192 case LengthTypePX: 192 case CSSPrimitiveValue::UnitType::Pixels:
193 case LengthTypeNumber: 193 case CSSPrimitiveValue::UnitType::Number:
194 case CSSPrimitiveValue::UnitType::UserUnits:
194 userUnits = value; 195 userUnits = value;
195 break; 196 break;
196 case LengthTypePercentage: { 197 case CSSPrimitiveValue::UnitType::Percentage: {
197 FloatSize viewportSize; 198 FloatSize viewportSize;
198 if (!determineViewport(viewportSize)) 199 if (!determineViewport(viewportSize))
199 return 0; 200 return 0;
200 userUnits = value * dimensionForLengthMode(mode, viewportSize) / 100; 201 userUnits = value * dimensionForLengthMode(mode, viewportSize) / 100;
201 break; 202 break;
202 } 203 }
203 case LengthTypeEMS: 204 case CSSPrimitiveValue::UnitType::Ems:
204 userUnits = convertValueFromEMSToUserUnits(computedStyleForLengthResolvi ng(m_context), value); 205 userUnits = convertValueFromEMSToUserUnits(computedStyleForLengthResolvi ng(m_context), value);
205 break; 206 break;
206 case LengthTypeEXS: 207 case CSSPrimitiveValue::UnitType::Exs:
207 userUnits = convertValueFromEXSToUserUnits(value); 208 userUnits = convertValueFromEXSToUserUnits(value);
208 break; 209 break;
209 case LengthTypeCM: 210 case CSSPrimitiveValue::UnitType::Centimeters:
210 userUnits = value * cssPixelsPerCentimeter; 211 userUnits = value * cssPixelsPerCentimeter;
211 break; 212 break;
212 case LengthTypeMM: 213 case CSSPrimitiveValue::UnitType::Millimeters:
213 userUnits = value * cssPixelsPerMillimeter; 214 userUnits = value * cssPixelsPerMillimeter;
214 break; 215 break;
215 case LengthTypeIN: 216 case CSSPrimitiveValue::UnitType::Inches:
216 userUnits = value * cssPixelsPerInch; 217 userUnits = value * cssPixelsPerInch;
217 break; 218 break;
218 case LengthTypePT: 219 case CSSPrimitiveValue::UnitType::Points:
219 userUnits = value * cssPixelsPerPoint; 220 userUnits = value * cssPixelsPerPoint;
220 break; 221 break;
221 case LengthTypePC: 222 case CSSPrimitiveValue::UnitType::Picas:
222 userUnits = value * cssPixelsPerPica; 223 userUnits = value * cssPixelsPerPica;
223 break; 224 break;
224 case LengthTypeREMS: 225 case CSSPrimitiveValue::UnitType::Rems:
225 userUnits = convertValueFromEMSToUserUnits(rootElementStyle(m_context), value); 226 userUnits = convertValueFromEMSToUserUnits(rootElementStyle(m_context), value);
226 break; 227 break;
227 case LengthTypeCHS: 228 case CSSPrimitiveValue::UnitType::Chs:
228 userUnits = convertValueFromCHSToUserUnits(value); 229 userUnits = convertValueFromCHSToUserUnits(value);
229 break; 230 break;
230 default: 231 default:
231 ASSERT_NOT_REACHED(); 232 ASSERT_NOT_REACHED();
232 break; 233 break;
233 } 234 }
234 235
235 // Since we mix css <length> values with svg's length values we need to 236 // Since we mix css <length> values with svg's length values we need to
236 // clamp values to the narrowest range, otherwise it can result in 237 // clamp values to the narrowest range, otherwise it can result in
237 // rendering issues. 238 // rendering issues.
238 return CSSPrimitiveValue::clampToCSSLengthRange(userUnits); 239 return CSSPrimitiveValue::clampToCSSLengthRange(userUnits);
239 } 240 }
240 241
241 float SVGLengthContext::convertValueFromUserUnits(float value, SVGLengthMode mod e, SVGLengthType toUnit) const 242 float SVGLengthContext::convertValueFromUserUnits(float value, SVGLengthMode mod e, CSSPrimitiveValue::UnitType toUnit) const
242 { 243 {
243 switch (toUnit) { 244 switch (toUnit) {
244 case LengthTypeUnknown: 245 case CSSPrimitiveValue::UnitType::Unknown:
245 return 0; 246 return 0;
Timothy Loh 2015/11/04 00:33:44 this might be an ASSERT_NOT_REACHED case (i.e. let
Stephen Chennney 2015/11/04 18:04:47 Done.
246 case LengthTypeNumber: 247 case CSSPrimitiveValue::UnitType::Pixels:
248 case CSSPrimitiveValue::UnitType::Number:
249 case CSSPrimitiveValue::UnitType::UserUnits:
247 return value; 250 return value;
248 case LengthTypePercentage: { 251 case CSSPrimitiveValue::UnitType::Percentage: {
249 FloatSize viewportSize; 252 FloatSize viewportSize;
250 if (!determineViewport(viewportSize)) 253 if (!determineViewport(viewportSize))
251 return 0; 254 return 0;
252 float dimension = dimensionForLengthMode(mode, viewportSize); 255 float dimension = dimensionForLengthMode(mode, viewportSize);
253 if (!dimension) 256 if (!dimension)
254 return 0; 257 return 0;
255 // LengthTypePercentage is represented with 100% = 100.0. 258 // LengthTypePercentage is represented with 100% = 100.0.
256 // Good for accuracy but could eventually be changed. 259 // Good for accuracy but could eventually be changed.
257 return value * 100 / dimension; 260 return value * 100 / dimension;
258 } 261 }
259 case LengthTypeEMS: 262 case CSSPrimitiveValue::UnitType::Ems:
260 return convertValueFromUserUnitsToEMS(computedStyleForLengthResolving(m_ context), value); 263 return convertValueFromUserUnitsToEMS(computedStyleForLengthResolving(m_ context), value);
261 case LengthTypeEXS: 264 case CSSPrimitiveValue::UnitType::Exs:
262 return convertValueFromUserUnitsToEXS(value); 265 return convertValueFromUserUnitsToEXS(value);
263 case LengthTypeREMS: 266 case CSSPrimitiveValue::UnitType::Rems:
264 return convertValueFromUserUnitsToEMS(rootElementStyle(m_context), value ); 267 return convertValueFromUserUnitsToEMS(rootElementStyle(m_context), value );
265 case LengthTypeCHS: 268 case CSSPrimitiveValue::UnitType::Chs:
266 return convertValueFromUserUnitsToCHS(value); 269 return convertValueFromUserUnitsToCHS(value);
267 case LengthTypePX: 270 case CSSPrimitiveValue::UnitType::Centimeters:
268 return value;
269 case LengthTypeCM:
270 return value / cssPixelsPerCentimeter; 271 return value / cssPixelsPerCentimeter;
271 case LengthTypeMM: 272 case CSSPrimitiveValue::UnitType::Millimeters:
272 return value / cssPixelsPerMillimeter; 273 return value / cssPixelsPerMillimeter;
273 case LengthTypeIN: 274 case CSSPrimitiveValue::UnitType::Inches:
274 return value / cssPixelsPerInch; 275 return value / cssPixelsPerInch;
275 case LengthTypePT: 276 case CSSPrimitiveValue::UnitType::Points:
276 return value / cssPixelsPerPoint; 277 return value / cssPixelsPerPoint;
277 case LengthTypePC: 278 case CSSPrimitiveValue::UnitType::Picas:
278 return value / cssPixelsPerPica; 279 return value / cssPixelsPerPica;
280 default:
281 break;
279 } 282 }
280 283
281 ASSERT_NOT_REACHED(); 284 ASSERT_NOT_REACHED();
282 return 0; 285 return 0;
283 } 286 }
284 287
285 float SVGLengthContext::convertValueFromUserUnitsToCHS(float value) const 288 float SVGLengthContext::convertValueFromUserUnitsToCHS(float value) const
286 { 289 {
287 const ComputedStyle* style = computedStyleForLengthResolving(m_context); 290 const ComputedStyle* style = computedStyleForLengthResolving(m_context);
288 if (!style) 291 if (!style)
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 351
349 const SVGSVGElement& svg = toSVGSVGElement(*viewportElement); 352 const SVGSVGElement& svg = toSVGSVGElement(*viewportElement);
350 viewportSize = svg.currentViewBoxRect().size(); 353 viewportSize = svg.currentViewBoxRect().size();
351 if (viewportSize.isEmpty()) 354 if (viewportSize.isEmpty())
352 viewportSize = svg.currentViewportSize(); 355 viewportSize = svg.currentViewportSize();
353 356
354 return true; 357 return true;
355 } 358 }
356 359
357 } 360 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698