Chromium Code Reviews| Index: experimental/svg/model/SkSVGRenderContext.cpp |
| diff --git a/experimental/svg/model/SkSVGRenderContext.cpp b/experimental/svg/model/SkSVGRenderContext.cpp |
| index 8ad881429a21b906a3041a06753bb5b045c61757..1ce21e4a9bd759cd2a95dd8ef0b82f6e8b7e112a 100644 |
| --- a/experimental/svg/model/SkSVGRenderContext.cpp |
| +++ b/experimental/svg/model/SkSVGRenderContext.cpp |
| @@ -26,16 +26,34 @@ SkScalar length_size_for_type(const SkSize& viewport, SkSVGLengthContext::Length |
| return 0; |
| } |
|
robertphillips
2016/08/17 18:39:03
// These all assume a 90dpi display device.
Do we
f(malita)
2016/08/17 21:04:17
Done.
|
| +// https://www.w3.org/TR/SVG/coords.html#Units |
| +constexpr SkScalar kPXMultiplier = 1.00f; |
|
robertphillips
2016/08/17 18:39:03
Isn't the pt multiplier supposed to be DPI/72.272
f(malita)
2016/08/17 21:04:17
Done.
|
| +constexpr SkScalar kPTMultiplier = 1.25f; |
| +constexpr SkScalar kPCMultiplier = 15.00f; |
| +constexpr SkScalar kINMultiplier = 90.00f; |
| +constexpr SkScalar kMMMultiplier = 3.543307f; |
| +constexpr SkScalar kCMMultiplier = kMMMultiplier * 10; |
| + |
| } // anonymous ns |
| SkScalar SkSVGLengthContext::resolve(const SkSVGLength& l, LengthType t) const { |
| switch (l.unit()) { |
| case SkSVGLength::Unit::kNumber: |
| - // Fall through. |
| - case SkSVGLength::Unit::kPX: |
| return l.value(); |
| case SkSVGLength::Unit::kPercentage: |
| return l.value() * length_size_for_type(fViewport, t) / 100; |
| + case SkSVGLength::Unit::kPX: |
| + return l.value() * kPXMultiplier; |
| + case SkSVGLength::Unit::kCM: |
| + return l.value() * kCMMultiplier; |
| + case SkSVGLength::Unit::kMM: |
| + return l.value() * kMMMultiplier; |
| + case SkSVGLength::Unit::kIN: |
| + return l.value() * kINMultiplier; |
| + case SkSVGLength::Unit::kPT: |
| + return l.value() * kPTMultiplier; |
| + case SkSVGLength::Unit::kPC: |
| + return l.value() * kPCMultiplier; |
| default: |
| SkDebugf("unsupported unit type: <%d>\n", l.unit()); |
| return 0; |