| |
| /* |
| * Copyright 2011 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| #include "SkProgressBarView.h" |
| #include "SkAnimator.h" |
| #include "SkWidgetViews.h" |
| #include "SkTime.h" |
| #include "SkSystemEventTypes.h" |
| |
| SkProgressBarView::SkProgressBarView() |
| { |
| init_skin_anim(kProgress_SkinEnum, &fAnim); |
| fAnim.setHostEventSink(this); |
| fProgress = 0; |
| fMax = 100; |
| |
| } |
| |
| void SkProgressBarView::changeProgress(int diff) |
| { |
| int newProg = fProgress + diff; |
| if (newProg > 0 && newProg < fMax) |
| this->setProgress(newProg); |
| //otherwise i'll just leave it as it is |
| //this implies that if a new max and progress are set, max must be set first |
| } |
| |
| /*virtual*/ void SkProgressBarView::onDraw(SkCanvas* canvas) |
| { |
| SkPaint paint; |
| SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs()); |
| |
| if (diff == SkAnimator::kDifferent) |
| this->inval(NULL); |
| else if (diff == SkAnimator::kPartiallyDifferent) |
| { |
| SkRect bounds; |
| fAnim.getInvalBounds(&bounds); |
| this->inval(&bounds); |
| } |
| } |
| |
| /*virtual*/ bool SkProgressBarView::onEvent(const SkEvent& evt) |
| { |
| if (evt.isType(SK_EventType_Inval)) |
| { |
| this->inval(NULL); |
| return true; |
| } |
| if (evt.isType("recommendDim")) |
| { |
| SkScalar height; |
| |
| if (evt.findScalar("y", &height)) |
| this->setHeight(height); |
| return true; |
| } |
| return this->INHERITED::onEvent(evt); |
| } |
| |
| /*virtual*/ void SkProgressBarView::onInflate(const SkDOM& dom, const SkDOM::Node* node) |
| { |
| this->INHERITED::onInflate(dom, node); |
| int32_t temp; |
| if (dom.findS32(node, "max", &temp)) |
| this->setMax(temp); |
| if (dom.findS32(node, "progress", &temp)) |
| this->setProgress(temp); |
| } |
| |
| /*virtual*/ void SkProgressBarView::onSizeChange() |
| { |
| this->INHERITED::onSizeChange(); |
| SkEvent evt("user"); |
| evt.setString("id", "setDim"); |
| evt.setScalar("dimX", this->width()); |
| evt.setScalar("dimY", this->height()); |
| fAnim.doUserEvent(evt); |
| } |
| |
| void SkProgressBarView::reset() |
| { |
| fProgress = 0; |
| SkEvent e("user"); |
| e.setString("id", "reset"); |
| fAnim.doUserEvent(e); |
| } |
| |
| void SkProgressBarView::setMax(int max) |
| { |
| fMax = max; |
| SkEvent e("user"); |
| e.setString("id", "setMax"); |
| e.setS32("newMax", max); |
| fAnim.doUserEvent(e); |
| } |
| |
| void SkProgressBarView::setProgress(int progress) |
| { |
| fProgress = progress; |
| SkEvent e("user"); |
| e.setString("id", "setProgress"); |
| e.setS32("newProgress", progress); |
| fAnim.doUserEvent(e); |
| } |