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