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 } 110