blob: 3eff6056f9396fdf2ade49df1ef372a2382cdc40 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
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 */
reed@android.com8a1c16f2008-12-17 15:59:43 +00008#include "SkBorderView.h"
9#include "SkAnimator.h"
10#include "SkWidgetViews.h"
11#include "SkSystemEventTypes.h"
12#include "SkTime.h"
13#include "SkStackViewLayout.h"
14
senorblanco@chromium.org64cc5792011-05-19 19:58:58 +000015SkBorderView::SkBorderView() : fLeft(SkIntToScalar(0)),
16 fRight(SkIntToScalar(0)),
17 fTop(SkIntToScalar(0)),
18 fBottom(SkIntToScalar(0))
reed@android.com8a1c16f2008-12-17 15:59:43 +000019{
rmistry@google.comd6176b02012-08-23 18:14:13 +000020 fAnim.setHostEventSink(this);
21 init_skin_anim(kBorder_SkinEnum, &fAnim);
reed@android.com8a1c16f2008-12-17 15:59:43 +000022}
23
24SkBorderView::~SkBorderView()
25{
rmistry@google.comd6176b02012-08-23 18:14:13 +000026
reed@android.com8a1c16f2008-12-17 15:59:43 +000027}
28
29void SkBorderView::setSkin(const char skin[])
30{
rmistry@google.comd6176b02012-08-23 18:14:13 +000031 init_skin_anim(skin, &fAnim);
reed@android.com8a1c16f2008-12-17 15:59:43 +000032}
33
34/* virtual */ void SkBorderView::onInflate(const SkDOM& dom, const SkDOM::Node* node)
35{
rmistry@google.comd6176b02012-08-23 18:14:13 +000036 this->INHERITED::onInflate(dom, node);
reed@android.com8a1c16f2008-12-17 15:59:43 +000037}
38
39/*virtual*/ void SkBorderView::onSizeChange()
40{
rmistry@google.comd6176b02012-08-23 18:14:13 +000041 this->INHERITED::onSizeChange();
42 SkEvent evt("user");
43 evt.setString("id", "setDim");
44 evt.setScalar("dimX", this->width());
45 evt.setScalar("dimY", this->height());
46 fAnim.doUserEvent(evt);
reed@android.com8a1c16f2008-12-17 15:59:43 +000047}
48
49/*virtual*/ void SkBorderView::onDraw(SkCanvas* canvas)
50{
rmistry@google.comd6176b02012-08-23 18:14:13 +000051 SkPaint paint;
52 SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs());
53
54 if (diff == SkAnimator::kDifferent)
55 this->inval(NULL);
56 else if (diff == SkAnimator::kPartiallyDifferent)
57 {
58 SkRect bounds;
59 fAnim.getInvalBounds(&bounds);
60 this->inval(&bounds);
61 }
reed@android.com8a1c16f2008-12-17 15:59:43 +000062}
63
64/*virtual*/ bool SkBorderView::onEvent(const SkEvent& evt)
65{
rmistry@google.comd6176b02012-08-23 18:14:13 +000066 if (evt.isType(SK_EventType_Inval))
67 {
68 this->inval(NULL);
69 return true;
70 }
71 if (evt.isType("recommendDim"))
72 {
73 evt.findScalar("leftMargin", &fLeft);
74 evt.findScalar("rightMargin", &fRight);
75 evt.findScalar("topMargin", &fTop);
76 evt.findScalar("bottomMargin", &fBottom);
77
78 //setup_views.cpp uses SkView::Layout instead of SkStackViewLayout
79 //but that gives me an error
80 SkStackViewLayout* layout;
81 fMargin.set(fLeft, fTop, fRight, fBottom);
82 if (this->getLayout())
83 {
84 layout = (SkStackViewLayout*)this->getLayout();
85 layout->setMargin(fMargin);
86 }
87 else
88 {
89 layout = new SkStackViewLayout;
90 layout->setMargin(fMargin);
91 this->setLayout(layout)->unref();
92 }
93 this->invokeLayout();
94 }
95 return this->INHERITED::onEvent(evt);
reed@android.com8a1c16f2008-12-17 15:59:43 +000096}