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