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 "SkSVGRenderContext.h" | 9 #include "SkSVGRenderContext.h" |
9 #include "SkSVGTypes.h" | 10 #include "SkSVGTypes.h" |
10 | 11 |
11 namespace { | 12 namespace { |
12 | 13 |
13 SkScalar length_size_for_type(const SkSize& viewport, SkSVGLengthContext::Length
Type t) { | 14 SkScalar length_size_for_type(const SkSize& viewport, SkSVGLengthContext::Length
Type t) { |
14 switch (t) { | 15 switch (t) { |
15 case SkSVGLengthContext::LengthType::kHorizontal: | 16 case SkSVGLengthContext::LengthType::kHorizontal: |
16 return viewport.width(); | 17 return viewport.width(); |
17 case SkSVGLengthContext::LengthType::kVertical: | 18 case SkSVGLengthContext::LengthType::kVertical: |
(...skipping 17 matching lines...) Expand all Loading... |
35 return l.value() * length_size_for_type(fViewport, t) / 100; | 36 return l.value() * length_size_for_type(fViewport, t) / 100; |
36 break; | 37 break; |
37 default: | 38 default: |
38 SkDebugf("unsupported unit type: <%d>\n", l.unit()); | 39 SkDebugf("unsupported unit type: <%d>\n", l.unit()); |
39 break; | 40 break; |
40 } | 41 } |
41 | 42 |
42 return 0; | 43 return 0; |
43 } | 44 } |
44 | 45 |
45 SkSVGRenderContext::SkSVGRenderContext(const SkSize& initialViewport) | 46 SkRect SkSVGLengthContext::resolveRect(const SkSVGLength& x, const SkSVGLength&
y, |
46 : fLengthContext(initialViewport) {} | 47 const SkSVGLength& w, const SkSVGLength&
h) const { |
| 48 return SkRect::MakeXYWH( |
| 49 this->resolve(x, SkSVGLengthContext::LengthType::kHorizontal), |
| 50 this->resolve(y, SkSVGLengthContext::LengthType::kVertical), |
| 51 this->resolve(w, SkSVGLengthContext::LengthType::kHorizontal), |
| 52 this->resolve(h, SkSVGLengthContext::LengthType::kVertical)); |
| 53 } |
47 | 54 |
48 SkSVGRenderContext& SkSVGRenderContext::operator=(const SkSVGRenderContext& othe
r) { | 55 SkSVGPresentationContext::SkSVGPresentationContext() {} |
| 56 |
| 57 SkSVGPresentationContext::SkSVGPresentationContext(const SkSVGPresentationContex
t& o) { |
| 58 this->initFrom(o); |
| 59 } |
| 60 |
| 61 SkSVGPresentationContext& SkSVGPresentationContext::operator=(const SkSVGPresent
ationContext& o) { |
| 62 this->initFrom(o); |
| 63 return *this; |
| 64 } |
| 65 |
| 66 void SkSVGPresentationContext::initFrom(const SkSVGPresentationContext& other) { |
49 if (other.fFill.isValid()) { | 67 if (other.fFill.isValid()) { |
50 fFill.set(*other.fFill.get()); | 68 fFill.set(*other.fFill.get()); |
51 } else { | 69 } else { |
52 fFill.reset(); | 70 fFill.reset(); |
53 } | 71 } |
54 | 72 |
55 if (other.fStroke.isValid()) { | 73 if (other.fStroke.isValid()) { |
56 fStroke.set(*other.fStroke.get()); | 74 fStroke.set(*other.fStroke.get()); |
57 } else { | 75 } else { |
58 fStroke.reset(); | 76 fStroke.reset(); |
59 } | 77 } |
60 | |
61 return *this; | |
62 } | 78 } |
63 | 79 |
64 SkPaint& SkSVGRenderContext::ensureFill() { | 80 SkPaint& SkSVGPresentationContext::ensureFill() { |
65 if (!fFill.isValid()) { | 81 if (!fFill.isValid()) { |
66 fFill.init(); | 82 fFill.init(); |
67 fFill.get()->setStyle(SkPaint::kFill_Style); | 83 fFill.get()->setStyle(SkPaint::kFill_Style); |
68 fFill.get()->setAntiAlias(true); | 84 fFill.get()->setAntiAlias(true); |
69 } | 85 } |
70 return *fFill.get(); | 86 return *fFill.get(); |
71 } | 87 } |
72 | 88 |
73 SkPaint& SkSVGRenderContext::ensureStroke() { | 89 SkPaint& SkSVGPresentationContext::ensureStroke() { |
74 if (!fStroke.isValid()) { | 90 if (!fStroke.isValid()) { |
75 fStroke.init(); | 91 fStroke.init(); |
76 fStroke.get()->setStyle(SkPaint::kStroke_Style); | 92 fStroke.get()->setStyle(SkPaint::kStroke_Style); |
77 fStroke.get()->setAntiAlias(true); | 93 fStroke.get()->setAntiAlias(true); |
78 } | 94 } |
79 return *fStroke.get(); | 95 return *fStroke.get(); |
80 } | 96 } |
81 | 97 |
82 void SkSVGRenderContext::setFillColor(SkColor color) { | 98 void SkSVGPresentationContext::setFillColor(SkColor color) { |
83 this->ensureFill().setColor(color); | 99 this->ensureFill().setColor(color); |
84 } | 100 } |
85 | 101 |
86 void SkSVGRenderContext::setStrokeColor(SkColor color) { | 102 void SkSVGPresentationContext::setStrokeColor(SkColor color) { |
87 this->ensureStroke().setColor(color); | 103 this->ensureStroke().setColor(color); |
88 } | 104 } |
| 105 |
| 106 SkSVGRenderContext::SkSVGRenderContext(SkCanvas* canvas, |
| 107 const SkSVGLengthContext& lctx, |
| 108 const SkSVGPresentationContext& pctx) |
| 109 : fLengthContext(lctx) |
| 110 , fPresentationContext(pctx) |
| 111 , fCanvas(canvas) |
| 112 , fCanvasSaveCount(canvas->getSaveCount()) {} |
| 113 |
| 114 SkSVGRenderContext::SkSVGRenderContext(const SkSVGRenderContext& other) |
| 115 : SkSVGRenderContext(other.canvas(), |
| 116 other.lengthContext(), |
| 117 other.presentationContext()) {} |
| 118 |
| 119 SkSVGRenderContext::~SkSVGRenderContext() { |
| 120 fCanvas->restoreToCount(fCanvasSaveCount); |
| 121 } |
OLD | NEW |