| 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 |