SkProgressBarView.cpp revision 79377cbceeea970b663e7934d7cb1f27bb223d98
1#include "SkProgressBarView.h" 2#include "SkAnimator.h" 3#include "SkWidgetViews.h" 4#include "SkTime.h" 5#include "SkSystemEventTypes.h" 6 7SkProgressBarView::SkProgressBarView() 8{ 9 init_skin_anim(kProgress_SkinEnum, &fAnim); 10 fAnim.setHostEventSink(this); 11 fProgress = 0; 12 fMax = 100; 13 14} 15 16void SkProgressBarView::changeProgress(int diff) 17{ 18 int newProg = fProgress + diff; 19 if (newProg > 0 && newProg < fMax) 20 this->setProgress(newProg); 21 //otherwise i'll just leave it as it is 22 //this implies that if a new max and progress are set, max must be set first 23} 24 25/*virtual*/ void SkProgressBarView::onDraw(SkCanvas* canvas) 26{ 27 SkPaint paint; 28 SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs()); 29 30 if (diff == SkAnimator::kDifferent) 31 this->inval(NULL); 32 else if (diff == SkAnimator::kPartiallyDifferent) 33 { 34 SkRect bounds; 35 fAnim.getInvalBounds(&bounds); 36 this->inval(&bounds); 37 } 38} 39 40/*virtual*/ bool SkProgressBarView::onEvent(const SkEvent& evt) 41{ 42 if (evt.isType(SK_EventType_Inval)) 43 { 44 this->inval(NULL); 45 return true; 46 } 47 if (evt.isType("recommendDim")) 48 { 49 SkScalar height; 50 51 if (evt.findScalar("y", &height)) 52 this->setHeight(height); 53 return true; 54 } 55 return this->INHERITED::onEvent(evt); 56} 57 58/*virtual*/ void SkProgressBarView::onInflate(const SkDOM& dom, const SkDOM::Node* node) 59{ 60 this->INHERITED::onInflate(dom, node); 61 int32_t temp; 62 if (dom.findS32(node, "max", &temp)) 63 this->setMax(temp); 64 if (dom.findS32(node, "progress", &temp)) 65 this->setProgress(temp); 66} 67 68/*virtual*/ void SkProgressBarView::onSizeChange() 69{ 70 this->INHERITED::onSizeChange(); 71 SkEvent evt("user"); 72 evt.setString("id", "setDim"); 73 evt.setScalar("dimX", this->width()); 74 evt.setScalar("dimY", this->height()); 75 fAnim.doUserEvent(evt); 76} 77 78void SkProgressBarView::reset() 79{ 80 fProgress = 0; 81 SkEvent e("user"); 82 e.setString("id", "reset"); 83 fAnim.doUserEvent(e); 84} 85 86void SkProgressBarView::setMax(int max) 87{ 88 fMax = max; 89 SkEvent e("user"); 90 e.setString("id", "setMax"); 91 e.setS32("newMax", max); 92 fAnim.doUserEvent(e); 93} 94 95void SkProgressBarView::setProgress(int progress) 96{ 97 fProgress = progress; 98 SkEvent e("user"); 99 e.setString("id", "setProgress"); 100 e.setS32("newProgress", progress); 101 fAnim.doUserEvent(e); 102} 103