Home | History | Annotate | Download | only in views
      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