Home | History | Annotate | Download | only in views
      1 #include "SkBorderView.h"
      2 #include "SkAnimator.h"
      3 #include "SkWidgetViews.h"
      4 #include "SkSystemEventTypes.h"
      5 #include "SkTime.h"
      6 #include "SkStackViewLayout.h"
      7 
      8 SkBorderView::SkBorderView() : fLeft(SkIntToScalar(0)),
      9                                fRight(SkIntToScalar(0)),
     10                                fTop(SkIntToScalar(0)),
     11                                fBottom(SkIntToScalar(0))
     12 {
     13 	fAnim.setHostEventSink(this);
     14 	init_skin_anim(kBorder_SkinEnum, &fAnim);
     15 }
     16 
     17 SkBorderView::~SkBorderView()
     18 {
     19 
     20 }
     21 
     22 void SkBorderView::setSkin(const char skin[])
     23 {
     24 	init_skin_anim(skin, &fAnim);
     25 }
     26 
     27 /* virtual */ void SkBorderView::onInflate(const SkDOM& dom, const SkDOM::Node* node)
     28 {
     29 	this->INHERITED::onInflate(dom, node);
     30 }
     31 
     32 /*virtual*/ void SkBorderView::onSizeChange()
     33 {
     34 	this->INHERITED::onSizeChange();
     35 	SkEvent evt("user");
     36 	evt.setString("id", "setDim");
     37 	evt.setScalar("dimX", this->width());
     38 	evt.setScalar("dimY", this->height());
     39 	fAnim.doUserEvent(evt);
     40 }
     41 
     42 /*virtual*/ void SkBorderView::onDraw(SkCanvas* canvas)
     43 {
     44 	SkPaint						paint;
     45 	SkAnimator::DifferenceType	diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs());
     46 
     47 	if (diff == SkAnimator::kDifferent)
     48 		this->inval(NULL);
     49 	else if (diff == SkAnimator::kPartiallyDifferent)
     50 	{
     51 		SkRect	bounds;
     52 		fAnim.getInvalBounds(&bounds);
     53 		this->inval(&bounds);
     54 	}
     55 }
     56 
     57 /*virtual*/ bool SkBorderView::onEvent(const SkEvent& evt)
     58 {
     59 	if (evt.isType(SK_EventType_Inval))
     60 	{
     61 		this->inval(NULL);
     62 		return true;
     63 	}
     64 	if (evt.isType("recommendDim"))
     65 	{
     66 		evt.findScalar("leftMargin", &fLeft);
     67 		evt.findScalar("rightMargin", &fRight);
     68 		evt.findScalar("topMargin", &fTop);
     69 		evt.findScalar("bottomMargin", &fBottom);
     70 
     71 		//setup_views.cpp uses SkView::Layout instead of SkStackViewLayout
     72 		//but that gives me an error
     73 		SkStackViewLayout* layout;
     74 		fMargin.set(fLeft, fTop, fRight, fBottom);
     75 		if (this->getLayout())
     76 		{
     77 			layout = (SkStackViewLayout*)this->getLayout();
     78 			layout->setMargin(fMargin);
     79 		}
     80 		else
     81 		{
     82 			layout = new SkStackViewLayout;
     83 			layout->setMargin(fMargin);
     84 			this->setLayout(layout)->unref();
     85 		}
     86 		this->invokeLayout();
     87 	}
     88 	return this->INHERITED::onEvent(evt);
     89 }
     90