OLD | NEW |
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 Loading... |
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::Pixels: |
191 return 0; | 191 case CSSPrimitiveValue::UnitType::Number: |
192 case LengthTypePX: | 192 case CSSPrimitiveValue::UnitType::UserUnits: |
193 case LengthTypeNumber: | |
194 userUnits = value; | 193 userUnits = value; |
195 break; | 194 break; |
196 case LengthTypePercentage: { | 195 case CSSPrimitiveValue::UnitType::Percentage: { |
197 FloatSize viewportSize; | 196 FloatSize viewportSize; |
198 if (!determineViewport(viewportSize)) | 197 if (!determineViewport(viewportSize)) |
199 return 0; | 198 return 0; |
200 userUnits = value * dimensionForLengthMode(mode, viewportSize) / 100; | 199 userUnits = value * dimensionForLengthMode(mode, viewportSize) / 100; |
201 break; | 200 break; |
202 } | 201 } |
203 case LengthTypeEMS: | 202 case CSSPrimitiveValue::UnitType::Ems: |
204 userUnits = convertValueFromEMSToUserUnits(computedStyleForLengthResolvi
ng(m_context), value); | 203 userUnits = convertValueFromEMSToUserUnits(computedStyleForLengthResolvi
ng(m_context), value); |
205 break; | 204 break; |
206 case LengthTypeEXS: | 205 case CSSPrimitiveValue::UnitType::Exs: |
207 userUnits = convertValueFromEXSToUserUnits(value); | 206 userUnits = convertValueFromEXSToUserUnits(value); |
208 break; | 207 break; |
209 case LengthTypeCM: | 208 case CSSPrimitiveValue::UnitType::Centimeters: |
210 userUnits = value * cssPixelsPerCentimeter; | 209 userUnits = value * cssPixelsPerCentimeter; |
211 break; | 210 break; |
212 case LengthTypeMM: | 211 case CSSPrimitiveValue::UnitType::Millimeters: |
213 userUnits = value * cssPixelsPerMillimeter; | 212 userUnits = value * cssPixelsPerMillimeter; |
214 break; | 213 break; |
215 case LengthTypeIN: | 214 case CSSPrimitiveValue::UnitType::Inches: |
216 userUnits = value * cssPixelsPerInch; | 215 userUnits = value * cssPixelsPerInch; |
217 break; | 216 break; |
218 case LengthTypePT: | 217 case CSSPrimitiveValue::UnitType::Points: |
219 userUnits = value * cssPixelsPerPoint; | 218 userUnits = value * cssPixelsPerPoint; |
220 break; | 219 break; |
221 case LengthTypePC: | 220 case CSSPrimitiveValue::UnitType::Picas: |
222 userUnits = value * cssPixelsPerPica; | 221 userUnits = value * cssPixelsPerPica; |
223 break; | 222 break; |
224 case LengthTypeREMS: | 223 case CSSPrimitiveValue::UnitType::Rems: |
225 userUnits = convertValueFromEMSToUserUnits(rootElementStyle(m_context),
value); | 224 userUnits = convertValueFromEMSToUserUnits(rootElementStyle(m_context),
value); |
226 break; | 225 break; |
227 case LengthTypeCHS: | 226 case CSSPrimitiveValue::UnitType::Chs: |
228 userUnits = convertValueFromCHSToUserUnits(value); | 227 userUnits = convertValueFromCHSToUserUnits(value); |
229 break; | 228 break; |
230 default: | 229 default: |
231 ASSERT_NOT_REACHED(); | 230 ASSERT_NOT_REACHED(); |
232 break; | 231 break; |
233 } | 232 } |
234 | 233 |
235 // Since we mix css <length> values with svg's length values we need to | 234 // 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 | 235 // clamp values to the narrowest range, otherwise it can result in |
237 // rendering issues. | 236 // rendering issues. |
238 return CSSPrimitiveValue::clampToCSSLengthRange(userUnits); | 237 return CSSPrimitiveValue::clampToCSSLengthRange(userUnits); |
239 } | 238 } |
240 | 239 |
241 float SVGLengthContext::convertValueFromUserUnits(float value, SVGLengthMode mod
e, SVGLengthType toUnit) const | 240 float SVGLengthContext::convertValueFromUserUnits(float value, SVGLengthMode mod
e, CSSPrimitiveValue::UnitType toUnit) const |
242 { | 241 { |
243 switch (toUnit) { | 242 switch (toUnit) { |
244 case LengthTypeUnknown: | 243 case CSSPrimitiveValue::UnitType::Pixels: |
245 return 0; | 244 case CSSPrimitiveValue::UnitType::Number: |
246 case LengthTypeNumber: | 245 case CSSPrimitiveValue::UnitType::UserUnits: |
247 return value; | 246 return value; |
248 case LengthTypePercentage: { | 247 case CSSPrimitiveValue::UnitType::Percentage: { |
249 FloatSize viewportSize; | 248 FloatSize viewportSize; |
250 if (!determineViewport(viewportSize)) | 249 if (!determineViewport(viewportSize)) |
251 return 0; | 250 return 0; |
252 float dimension = dimensionForLengthMode(mode, viewportSize); | 251 float dimension = dimensionForLengthMode(mode, viewportSize); |
253 if (!dimension) | 252 if (!dimension) |
254 return 0; | 253 return 0; |
255 // LengthTypePercentage is represented with 100% = 100.0. | 254 // LengthTypePercentage is represented with 100% = 100.0. |
256 // Good for accuracy but could eventually be changed. | 255 // Good for accuracy but could eventually be changed. |
257 return value * 100 / dimension; | 256 return value * 100 / dimension; |
258 } | 257 } |
259 case LengthTypeEMS: | 258 case CSSPrimitiveValue::UnitType::Ems: |
260 return convertValueFromUserUnitsToEMS(computedStyleForLengthResolving(m_
context), value); | 259 return convertValueFromUserUnitsToEMS(computedStyleForLengthResolving(m_
context), value); |
261 case LengthTypeEXS: | 260 case CSSPrimitiveValue::UnitType::Exs: |
262 return convertValueFromUserUnitsToEXS(value); | 261 return convertValueFromUserUnitsToEXS(value); |
263 case LengthTypeREMS: | 262 case CSSPrimitiveValue::UnitType::Rems: |
264 return convertValueFromUserUnitsToEMS(rootElementStyle(m_context), value
); | 263 return convertValueFromUserUnitsToEMS(rootElementStyle(m_context), value
); |
265 case LengthTypeCHS: | 264 case CSSPrimitiveValue::UnitType::Chs: |
266 return convertValueFromUserUnitsToCHS(value); | 265 return convertValueFromUserUnitsToCHS(value); |
267 case LengthTypePX: | 266 case CSSPrimitiveValue::UnitType::Centimeters: |
268 return value; | |
269 case LengthTypeCM: | |
270 return value / cssPixelsPerCentimeter; | 267 return value / cssPixelsPerCentimeter; |
271 case LengthTypeMM: | 268 case CSSPrimitiveValue::UnitType::Millimeters: |
272 return value / cssPixelsPerMillimeter; | 269 return value / cssPixelsPerMillimeter; |
273 case LengthTypeIN: | 270 case CSSPrimitiveValue::UnitType::Inches: |
274 return value / cssPixelsPerInch; | 271 return value / cssPixelsPerInch; |
275 case LengthTypePT: | 272 case CSSPrimitiveValue::UnitType::Points: |
276 return value / cssPixelsPerPoint; | 273 return value / cssPixelsPerPoint; |
277 case LengthTypePC: | 274 case CSSPrimitiveValue::UnitType::Picas: |
278 return value / cssPixelsPerPica; | 275 return value / cssPixelsPerPica; |
| 276 default: |
| 277 break; |
279 } | 278 } |
280 | 279 |
281 ASSERT_NOT_REACHED(); | 280 ASSERT_NOT_REACHED(); |
282 return 0; | 281 return 0; |
283 } | 282 } |
284 | 283 |
285 float SVGLengthContext::convertValueFromUserUnitsToCHS(float value) const | 284 float SVGLengthContext::convertValueFromUserUnitsToCHS(float value) const |
286 { | 285 { |
287 const ComputedStyle* style = computedStyleForLengthResolving(m_context); | 286 const ComputedStyle* style = computedStyleForLengthResolving(m_context); |
288 if (!style) | 287 if (!style) |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 | 347 |
349 const SVGSVGElement& svg = toSVGSVGElement(*viewportElement); | 348 const SVGSVGElement& svg = toSVGSVGElement(*viewportElement); |
350 viewportSize = svg.currentViewBoxRect().size(); | 349 viewportSize = svg.currentViewBoxRect().size(); |
351 if (viewportSize.isEmpty()) | 350 if (viewportSize.isEmpty()) |
352 viewportSize = svg.currentViewportSize(); | 351 viewportSize = svg.currentViewportSize(); |
353 | 352 |
354 return true; | 353 return true; |
355 } | 354 } |
356 | 355 |
357 } | 356 } |
OLD | NEW |