blob: 03541fd7ad29883adbed1cf485ec9dbc913b7fea [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{
caryclarka10742c2014-09-18 11:00:40 -070020 SkASSERT(node);
rmistry@google.comd6176b02012-08-23 18:14:13 +000021 this->onInflate(dom, node);
reed@android.com8a1c16f2008-12-17 15:59:43 +000022}
23
sugoi@google.com93c7ee32013-03-12 14:36:57 +000024void SkView::Artist::onInflate(const SkDOM&, const SkDOM::Node*)
reed@android.com8a1c16f2008-12-17 15:59:43 +000025{
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);
halcanary96fcdcc2015-08-27 07:41:13 -070032 SkASSERT(rec == nullptr || rec->fArtist != nullptr);
reed@android.com8a1c16f2008-12-17 15:59:43 +000033
halcanary96fcdcc2015-08-27 07:41:13 -070034 return rec ? rec->fArtist : nullptr;
reed@android.com8a1c16f2008-12-17 15:59:43 +000035}
36
37SkView::Artist* SkView::setArtist(Artist* obj)
38{
halcanary96fcdcc2015-08-27 07:41:13 -070039 if (obj == nullptr)
rmistry@google.comd6176b02012-08-23 18:14:13 +000040 {
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{
caryclarka10742c2014-09-18 11:00:40 -070066 SkASSERT(node);
rmistry@google.comd6176b02012-08-23 18:14:13 +000067 this->onInflate(dom, node);
reed@android.com8a1c16f2008-12-17 15:59:43 +000068}
69
sugoi@google.com93c7ee32013-03-12 14:36:57 +000070void SkView::Layout::onInflate(const SkDOM&, const SkDOM::Node*)
reed@android.com8a1c16f2008-12-17 15:59:43 +000071{
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);
halcanary96fcdcc2015-08-27 07:41:13 -070078 SkASSERT(rec == nullptr || rec->fLayout != nullptr);
reed@android.com8a1c16f2008-12-17 15:59:43 +000079
halcanary96fcdcc2015-08-27 07:41:13 -070080 return rec ? rec->fLayout : nullptr;
reed@android.com8a1c16f2008-12-17 15:59:43 +000081}
82
83SkView::Layout* SkView::setLayout(Layout* obj, bool invokeLayoutNow)
84{
halcanary96fcdcc2015-08-27 07:41:13 -070085 if (obj == nullptr)
rmistry@google.comd6176b02012-08-23 18:14:13 +000086 {
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}