diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/views/animated/SkProgressBarView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/views/animated/SkProgressBarView.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,109 @@ + +/* + * 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); +}