blob: e7754eb612536c774ea81cf328064f2ddf291a44 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
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 */
reed@android.com8a1c16f2008-12-17 15:59:43 +00008#include "SkProgressBarView.h"
9#include "SkAnimator.h"
10#include "SkWidgetViews.h"
11#include "SkTime.h"
12#include "SkSystemEventTypes.h"
13
14SkProgressBarView::SkProgressBarView()
15{
rmistry@google.comd6176b02012-08-23 18:14:13 +000016 init_skin_anim(kProgress_SkinEnum, &fAnim);
17 fAnim.setHostEventSink(this);
18 fProgress = 0;
19 fMax = 100;
20
reed@android.com8a1c16f2008-12-17 15:59:43 +000021}
22
23void SkProgressBarView::changeProgress(int diff)
24{
rmistry@google.comd6176b02012-08-23 18:14:13 +000025 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
reed@android.com8a1c16f2008-12-17 15:59:43 +000030}
31
32/*virtual*/ void SkProgressBarView::onDraw(SkCanvas* canvas)
33{
rmistry@google.comd6176b02012-08-23 18:14:13 +000034 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 }
reed@android.com8a1c16f2008-12-17 15:59:43 +000045}
rmistry@google.comd6176b02012-08-23 18:14:13 +000046
reed@android.com8a1c16f2008-12-17 15:59:43 +000047/*virtual*/ bool SkProgressBarView::onEvent(const SkEvent& evt)
48{
rmistry@google.comd6176b02012-08-23 18:14:13 +000049 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);
reed@android.com8a1c16f2008-12-17 15:59:43 +000063}
64
65/*virtual*/ void SkProgressBarView::onInflate(const SkDOM& dom, const SkDOM::Node* node)
66{
rmistry@google.comd6176b02012-08-23 18:14:13 +000067 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);
reed@android.com8a1c16f2008-12-17 15:59:43 +000073}
74
75/*virtual*/ void SkProgressBarView::onSizeChange()
76{
rmistry@google.comd6176b02012-08-23 18:14:13 +000077 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);
reed@android.com8a1c16f2008-12-17 15:59:43 +000083}
84
85void SkProgressBarView::reset()
86{
rmistry@google.comd6176b02012-08-23 18:14:13 +000087 fProgress = 0;
88 SkEvent e("user");
89 e.setString("id", "reset");
90 fAnim.doUserEvent(e);
reed@android.com8a1c16f2008-12-17 15:59:43 +000091}
92
93void SkProgressBarView::setMax(int max)
94{
rmistry@google.comd6176b02012-08-23 18:14:13 +000095 fMax = max;
96 SkEvent e("user");
97 e.setString("id", "setMax");
98 e.setS32("newMax", max);
99 fAnim.doUserEvent(e);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000100}
101
102void SkProgressBarView::setProgress(int progress)
103{
rmistry@google.comd6176b02012-08-23 18:14:13 +0000104 fProgress = progress;
105 SkEvent e("user");
106 e.setString("id", "setProgress");
107 e.setS32("newProgress", progress);
108 fAnim.doUserEvent(e);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000109}