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
14SkProgressBarView::SkProgressBarView()
15{
16	init_skin_anim(kProgress_SkinEnum, &fAnim);
17	fAnim.setHostEventSink(this);
18	fProgress = 0;
19	fMax = 100;
20
21}
22
23void 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
85void SkProgressBarView::reset()
86{
87	fProgress = 0;
88	SkEvent e("user");
89	e.setString("id", "reset");
90	fAnim.doUserEvent(e);
91}
92
93void 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
102void 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