michael@0: michael@0: /* michael@0: * Copyright 2011 Google Inc. michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: #include "SkBorderView.h" michael@0: #include "SkAnimator.h" michael@0: #include "SkWidgetViews.h" michael@0: #include "SkSystemEventTypes.h" michael@0: #include "SkTime.h" michael@0: #include "SkStackViewLayout.h" michael@0: michael@0: SkBorderView::SkBorderView() : fLeft(SkIntToScalar(0)), michael@0: fRight(SkIntToScalar(0)), michael@0: fTop(SkIntToScalar(0)), michael@0: fBottom(SkIntToScalar(0)) michael@0: { michael@0: fAnim.setHostEventSink(this); michael@0: init_skin_anim(kBorder_SkinEnum, &fAnim); michael@0: } michael@0: michael@0: SkBorderView::~SkBorderView() michael@0: { michael@0: michael@0: } michael@0: michael@0: void SkBorderView::setSkin(const char skin[]) michael@0: { michael@0: init_skin_anim(skin, &fAnim); michael@0: } michael@0: michael@0: /* virtual */ void SkBorderView::onInflate(const SkDOM& dom, const SkDOM::Node* node) michael@0: { michael@0: this->INHERITED::onInflate(dom, node); michael@0: } michael@0: michael@0: /*virtual*/ void SkBorderView::onSizeChange() michael@0: { michael@0: this->INHERITED::onSizeChange(); michael@0: SkEvent evt("user"); michael@0: evt.setString("id", "setDim"); michael@0: evt.setScalar("dimX", this->width()); michael@0: evt.setScalar("dimY", this->height()); michael@0: fAnim.doUserEvent(evt); michael@0: } michael@0: michael@0: /*virtual*/ void SkBorderView::onDraw(SkCanvas* canvas) michael@0: { michael@0: SkPaint paint; michael@0: SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs()); michael@0: michael@0: if (diff == SkAnimator::kDifferent) michael@0: this->inval(NULL); michael@0: else if (diff == SkAnimator::kPartiallyDifferent) michael@0: { michael@0: SkRect bounds; michael@0: fAnim.getInvalBounds(&bounds); michael@0: this->inval(&bounds); michael@0: } michael@0: } michael@0: michael@0: /*virtual*/ bool SkBorderView::onEvent(const SkEvent& evt) michael@0: { michael@0: if (evt.isType(SK_EventType_Inval)) michael@0: { michael@0: this->inval(NULL); michael@0: return true; michael@0: } michael@0: if (evt.isType("recommendDim")) michael@0: { michael@0: evt.findScalar("leftMargin", &fLeft); michael@0: evt.findScalar("rightMargin", &fRight); michael@0: evt.findScalar("topMargin", &fTop); michael@0: evt.findScalar("bottomMargin", &fBottom); michael@0: michael@0: //setup_views.cpp uses SkView::Layout instead of SkStackViewLayout michael@0: //but that gives me an error michael@0: SkStackViewLayout* layout; michael@0: fMargin.set(fLeft, fTop, fRight, fBottom); michael@0: if (this->getLayout()) michael@0: { michael@0: layout = (SkStackViewLayout*)this->getLayout(); michael@0: layout->setMargin(fMargin); michael@0: } michael@0: else michael@0: { michael@0: layout = new SkStackViewLayout; michael@0: layout->setMargin(fMargin); michael@0: this->setLayout(layout)->unref(); michael@0: } michael@0: this->invokeLayout(); michael@0: } michael@0: return this->INHERITED::onEvent(evt); michael@0: }