blob: ba40c1e3602ccb712db2ffdccb3393c923626f44 [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 "SkViewPriv.h"
9
10//////////////////////////////////////////////////////////////////////
11
12void SkView::Artist::draw(SkView* view, SkCanvas* canvas)
13{
rmistry@google.comd6176b02012-08-23 18:14:13 +000014 SkASSERT(view && canvas);
15 this->onDraw(view, canvas);
reed@android.com8a1c16f2008-12-17 15:59:43 +000016}
17
18void SkView::Artist::inflate(const SkDOM& dom, const SkDOM::Node* node)
19{
rmistry@google.comd6176b02012-08-23 18:14:13 +000020 SkASSERT(&dom && node);
21 this->onInflate(dom, node);
reed@android.com8a1c16f2008-12-17 15:59:43 +000022}
23
24void SkView::Artist::onInflate(const SkDOM& dom, const SkDOM::Node* node)
25{
rmistry@google.comd6176b02012-08-23 18:14:13 +000026 // subclass should override this as needed
reed@android.com8a1c16f2008-12-17 15:59:43 +000027}
28
29SkView::Artist* SkView::getArtist() const
30{
rmistry@google.comd6176b02012-08-23 18:14:13 +000031 Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList);
32 SkASSERT(rec == NULL || rec->fArtist != NULL);
reed@android.com8a1c16f2008-12-17 15:59:43 +000033
rmistry@google.comd6176b02012-08-23 18:14:13 +000034 return rec ? rec->fArtist : NULL;
reed@android.com8a1c16f2008-12-17 15:59:43 +000035}
36
37SkView::Artist* SkView::setArtist(Artist* obj)
38{
rmistry@google.comd6176b02012-08-23 18:14:13 +000039 if (obj == NULL)
40 {
41 this->removeTagList(kViewArtist_SkTagList);
42 }
43 else // add/replace
44 {
45 Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList);
reed@android.com8a1c16f2008-12-17 15:59:43 +000046
rmistry@google.comd6176b02012-08-23 18:14:13 +000047 if (rec)
48 SkRefCnt_SafeAssign(rec->fArtist, obj);
49 else
50 this->addTagList(new Artist_SkTagList(obj));
51 }
52 return obj;
reed@android.com8a1c16f2008-12-17 15:59:43 +000053}
54
55////////////////////////////////////////////////////////////////////////////////
56
57void SkView::Layout::layoutChildren(SkView* parent)
58{
rmistry@google.comd6176b02012-08-23 18:14:13 +000059 SkASSERT(parent);
60 if (parent->width() > 0 && parent->height() > 0)
61 this->onLayoutChildren(parent);
reed@android.com8a1c16f2008-12-17 15:59:43 +000062}
63
64void SkView::Layout::inflate(const SkDOM& dom, const SkDOM::Node* node)
65{
rmistry@google.comd6176b02012-08-23 18:14:13 +000066 SkASSERT(&dom && node);
67 this->onInflate(dom, node);
reed@android.com8a1c16f2008-12-17 15:59:43 +000068}
69
70void SkView::Layout::onInflate(const SkDOM& dom, const SkDOM::Node* node)
71{
rmistry@google.comd6176b02012-08-23 18:14:13 +000072 // subclass should override this as needed
reed@android.com8a1c16f2008-12-17 15:59:43 +000073}
74
75SkView::Layout* SkView::getLayout() const
76{
rmistry@google.comd6176b02012-08-23 18:14:13 +000077 Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList);
78 SkASSERT(rec == NULL || rec->fLayout != NULL);
reed@android.com8a1c16f2008-12-17 15:59:43 +000079
rmistry@google.comd6176b02012-08-23 18:14:13 +000080 return rec ? rec->fLayout : NULL;
reed@android.com8a1c16f2008-12-17 15:59:43 +000081}
82
83SkView::Layout* SkView::setLayout(Layout* obj, bool invokeLayoutNow)
84{
rmistry@google.comd6176b02012-08-23 18:14:13 +000085 if (obj == NULL)
86 {
87 this->removeTagList(kViewLayout_SkTagList);
88 }
89 else // add/replace
90 {
91 Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList);
reed@android.com8a1c16f2008-12-17 15:59:43 +000092
rmistry@google.comd6176b02012-08-23 18:14:13 +000093 if (rec)
94 SkRefCnt_SafeAssign(rec->fLayout, obj);
95 else
96 this->addTagList(new Layout_SkTagList(obj));
97 }
reed@android.com8a1c16f2008-12-17 15:59:43 +000098
rmistry@google.comd6176b02012-08-23 18:14:13 +000099 if (invokeLayoutNow)
100 this->invokeLayout();
101
102 return obj;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000103}
104