#include "SkBorderView.h" #include "SkAnimator.h" #include "SkWidgetViews.h" #include "SkSystemEventTypes.h" #include "SkTime.h" #include "SkStackViewLayout.h" SkBorderView::SkBorderView() : fLeft(SkIntToScalar(0)), fRight(SkIntToScalar(0)), fTop(SkIntToScalar(0)), fBottom(SkIntToScalar(0)) { fAnim.setHostEventSink(this); init_skin_anim(kBorder_SkinEnum, &fAnim); } SkBorderView::~SkBorderView() { } void SkBorderView::setSkin(const char skin[]) { init_skin_anim(skin, &fAnim); } /* virtual */ void SkBorderView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { this->INHERITED::onInflate(dom, node); } /*virtual*/ void SkBorderView::onSizeChange() { this->INHERITED::onSizeChange(); SkEvent evt("user"); evt.setString("id", "setDim"); evt.setScalar("dimX", this->width()); evt.setScalar("dimY", this->height()); fAnim.doUserEvent(evt); } /*virtual*/ void SkBorderView::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 SkBorderView::onEvent(const SkEvent& evt) { if (evt.isType(SK_EventType_Inval)) { this->inval(NULL); return true; } if (evt.isType("recommendDim")) { evt.findScalar("leftMargin", &fLeft); evt.findScalar("rightMargin", &fRight); evt.findScalar("topMargin", &fTop); evt.findScalar("bottomMargin", &fBottom); //setup_views.cpp uses SkView::Layout instead of SkStackViewLayout //but that gives me an error SkStackViewLayout* layout; fMargin.set(fLeft, fTop, fRight, fBottom); if (this->getLayout()) { layout = (SkStackViewLayout*)this->getLayout(); layout->setMargin(fMargin); } else { layout = new SkStackViewLayout; layout->setMargin(fMargin); this->setLayout(layout)->unref(); } this->invokeLayout(); } return this->INHERITED::onEvent(evt); }