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