• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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(NULL);
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(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 
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