|
1 |
|
2 /* |
|
3 * Copyright 2011 Google Inc. |
|
4 * |
|
5 * Use of this source code is governed by a BSD-style license that can be |
|
6 * found in the LICENSE file. |
|
7 */ |
|
8 #include "SkProgressBarView.h" |
|
9 #include "SkAnimator.h" |
|
10 #include "SkWidgetViews.h" |
|
11 #include "SkTime.h" |
|
12 #include "SkSystemEventTypes.h" |
|
13 |
|
14 SkProgressBarView::SkProgressBarView() |
|
15 { |
|
16 init_skin_anim(kProgress_SkinEnum, &fAnim); |
|
17 fAnim.setHostEventSink(this); |
|
18 fProgress = 0; |
|
19 fMax = 100; |
|
20 |
|
21 } |
|
22 |
|
23 void SkProgressBarView::changeProgress(int diff) |
|
24 { |
|
25 int newProg = fProgress + diff; |
|
26 if (newProg > 0 && newProg < fMax) |
|
27 this->setProgress(newProg); |
|
28 //otherwise i'll just leave it as it is |
|
29 //this implies that if a new max and progress are set, max must be set first |
|
30 } |
|
31 |
|
32 /*virtual*/ void SkProgressBarView::onDraw(SkCanvas* canvas) |
|
33 { |
|
34 SkPaint paint; |
|
35 SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs()); |
|
36 |
|
37 if (diff == SkAnimator::kDifferent) |
|
38 this->inval(NULL); |
|
39 else if (diff == SkAnimator::kPartiallyDifferent) |
|
40 { |
|
41 SkRect bounds; |
|
42 fAnim.getInvalBounds(&bounds); |
|
43 this->inval(&bounds); |
|
44 } |
|
45 } |
|
46 |
|
47 /*virtual*/ bool SkProgressBarView::onEvent(const SkEvent& evt) |
|
48 { |
|
49 if (evt.isType(SK_EventType_Inval)) |
|
50 { |
|
51 this->inval(NULL); |
|
52 return true; |
|
53 } |
|
54 if (evt.isType("recommendDim")) |
|
55 { |
|
56 SkScalar height; |
|
57 |
|
58 if (evt.findScalar("y", &height)) |
|
59 this->setHeight(height); |
|
60 return true; |
|
61 } |
|
62 return this->INHERITED::onEvent(evt); |
|
63 } |
|
64 |
|
65 /*virtual*/ void SkProgressBarView::onInflate(const SkDOM& dom, const SkDOM::Node* node) |
|
66 { |
|
67 this->INHERITED::onInflate(dom, node); |
|
68 int32_t temp; |
|
69 if (dom.findS32(node, "max", &temp)) |
|
70 this->setMax(temp); |
|
71 if (dom.findS32(node, "progress", &temp)) |
|
72 this->setProgress(temp); |
|
73 } |
|
74 |
|
75 /*virtual*/ void SkProgressBarView::onSizeChange() |
|
76 { |
|
77 this->INHERITED::onSizeChange(); |
|
78 SkEvent evt("user"); |
|
79 evt.setString("id", "setDim"); |
|
80 evt.setScalar("dimX", this->width()); |
|
81 evt.setScalar("dimY", this->height()); |
|
82 fAnim.doUserEvent(evt); |
|
83 } |
|
84 |
|
85 void SkProgressBarView::reset() |
|
86 { |
|
87 fProgress = 0; |
|
88 SkEvent e("user"); |
|
89 e.setString("id", "reset"); |
|
90 fAnim.doUserEvent(e); |
|
91 } |
|
92 |
|
93 void SkProgressBarView::setMax(int max) |
|
94 { |
|
95 fMax = max; |
|
96 SkEvent e("user"); |
|
97 e.setString("id", "setMax"); |
|
98 e.setS32("newMax", max); |
|
99 fAnim.doUserEvent(e); |
|
100 } |
|
101 |
|
102 void SkProgressBarView::setProgress(int progress) |
|
103 { |
|
104 fProgress = progress; |
|
105 SkEvent e("user"); |
|
106 e.setString("id", "setProgress"); |
|
107 e.setS32("newProgress", progress); |
|
108 fAnim.doUserEvent(e); |
|
109 } |