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 
SkProgressBarView()14 SkProgressBarView::SkProgressBarView()
15 {
16     init_skin_anim(kProgress_SkinEnum, &fAnim);
17     fAnim.setHostEventSink(this);
18     fProgress = 0;
19     fMax = 100;
20 
21 }
22 
changeProgress(int diff)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 
onDraw(SkCanvas * canvas)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(nullptr);
39     else if (diff == SkAnimator::kPartiallyDifferent)
40     {
41         SkRect    bounds;
42         fAnim.getInvalBounds(&bounds);
43         this->inval(&bounds);
44     }
45 }
46 
onEvent(const SkEvent & evt)47 /*virtual*/ bool SkProgressBarView::onEvent(const SkEvent& evt)
48 {
49     if (evt.isType(SK_EventType_Inval))
50     {
51         this->inval(nullptr);
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 
onInflate(const SkDOM & dom,const SkDOM::Node * node)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 
onSizeChange()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 
reset()85 void SkProgressBarView::reset()
86 {
87     fProgress = 0;
88     SkEvent e("user");
89     e.setString("id", "reset");
90     fAnim.doUserEvent(e);
91 }
92 
setMax(int max)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 
setProgress(int progress)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 }
110