OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
9 #include "SkSVGAttribute.h" | 9 #include "SkSVGAttribute.h" |
10 #include "SkSVGRenderContext.h" | 10 #include "SkSVGRenderContext.h" |
11 #include "SkSVGTypes.h" | 11 #include "SkSVGTypes.h" |
12 | 12 |
13 namespace { | 13 namespace { |
14 | 14 |
15 SkScalar length_size_for_type(const SkSize& viewport, SkSVGLengthContext::Length Type t) { | 15 SkScalar length_size_for_type(const SkSize& viewport, SkSVGLengthContext::Length Type t) { |
16 switch (t) { | 16 switch (t) { |
17 case SkSVGLengthContext::LengthType::kHorizontal: | 17 case SkSVGLengthContext::LengthType::kHorizontal: |
18 return viewport.width(); | 18 return viewport.width(); |
19 case SkSVGLengthContext::LengthType::kVertical: | 19 case SkSVGLengthContext::LengthType::kVertical: |
20 return viewport.height(); | 20 return viewport.height(); |
21 case SkSVGLengthContext::LengthType::kOther: | 21 case SkSVGLengthContext::LengthType::kOther: |
22 return SkScalarSqrt(viewport.width() * viewport.height()); | 22 return SkScalarSqrt(viewport.width() * viewport.height()); |
23 } | 23 } |
24 | 24 |
25 SkASSERT(false); // Not reached. | 25 SkASSERT(false); // Not reached. |
26 return 0; | 26 return 0; |
27 } | 27 } |
28 | 28 |
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.
| |
29 // https://www.w3.org/TR/SVG/coords.html#Units | |
30 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.
| |
31 constexpr SkScalar kPTMultiplier = 1.25f; | |
32 constexpr SkScalar kPCMultiplier = 15.00f; | |
33 constexpr SkScalar kINMultiplier = 90.00f; | |
34 constexpr SkScalar kMMMultiplier = 3.543307f; | |
35 constexpr SkScalar kCMMultiplier = kMMMultiplier * 10; | |
36 | |
29 } // anonymous ns | 37 } // anonymous ns |
30 | 38 |
31 SkScalar SkSVGLengthContext::resolve(const SkSVGLength& l, LengthType t) const { | 39 SkScalar SkSVGLengthContext::resolve(const SkSVGLength& l, LengthType t) const { |
32 switch (l.unit()) { | 40 switch (l.unit()) { |
33 case SkSVGLength::Unit::kNumber: | 41 case SkSVGLength::Unit::kNumber: |
34 // Fall through. | |
35 case SkSVGLength::Unit::kPX: | |
36 return l.value(); | 42 return l.value(); |
37 case SkSVGLength::Unit::kPercentage: | 43 case SkSVGLength::Unit::kPercentage: |
38 return l.value() * length_size_for_type(fViewport, t) / 100; | 44 return l.value() * length_size_for_type(fViewport, t) / 100; |
45 case SkSVGLength::Unit::kPX: | |
46 return l.value() * kPXMultiplier; | |
47 case SkSVGLength::Unit::kCM: | |
48 return l.value() * kCMMultiplier; | |
49 case SkSVGLength::Unit::kMM: | |
50 return l.value() * kMMMultiplier; | |
51 case SkSVGLength::Unit::kIN: | |
52 return l.value() * kINMultiplier; | |
53 case SkSVGLength::Unit::kPT: | |
54 return l.value() * kPTMultiplier; | |
55 case SkSVGLength::Unit::kPC: | |
56 return l.value() * kPCMultiplier; | |
39 default: | 57 default: |
40 SkDebugf("unsupported unit type: <%d>\n", l.unit()); | 58 SkDebugf("unsupported unit type: <%d>\n", l.unit()); |
41 return 0; | 59 return 0; |
42 } | 60 } |
43 } | 61 } |
44 | 62 |
45 SkRect SkSVGLengthContext::resolveRect(const SkSVGLength& x, const SkSVGLength& y, | 63 SkRect SkSVGLengthContext::resolveRect(const SkSVGLength& x, const SkSVGLength& y, |
46 const SkSVGLength& w, const SkSVGLength& h) const { | 64 const SkSVGLength& w, const SkSVGLength& h) const { |
47 return SkRect::MakeXYWH( | 65 return SkRect::MakeXYWH( |
48 this->resolve(x, SkSVGLengthContext::LengthType::kHorizontal), | 66 this->resolve(x, SkSVGLengthContext::LengthType::kHorizontal), |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
237 | 255 |
238 const SkPaint* SkSVGRenderContext::fillPaint() const { | 256 const SkPaint* SkSVGRenderContext::fillPaint() const { |
239 const SkSVGPaint::Type paintType = fPresentationContext->fInherited.fFill.ge t()->type(); | 257 const SkSVGPaint::Type paintType = fPresentationContext->fInherited.fFill.ge t()->type(); |
240 return paintType != SkSVGPaint::Type::kNone ? &fPresentationContext->fFillPa int : nullptr; | 258 return paintType != SkSVGPaint::Type::kNone ? &fPresentationContext->fFillPa int : nullptr; |
241 } | 259 } |
242 | 260 |
243 const SkPaint* SkSVGRenderContext::strokePaint() const { | 261 const SkPaint* SkSVGRenderContext::strokePaint() const { |
244 const SkSVGPaint::Type paintType = fPresentationContext->fInherited.fStroke. get()->type(); | 262 const SkSVGPaint::Type paintType = fPresentationContext->fInherited.fStroke. get()->type(); |
245 return paintType != SkSVGPaint::Type::kNone ? &fPresentationContext->fStroke Paint : nullptr; | 263 return paintType != SkSVGPaint::Type::kNone ? &fPresentationContext->fStroke Paint : nullptr; |
246 } | 264 } |
OLD | NEW |