blob: b426ade433b9a719852e0a3c866f43762a3c11f1 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001/*
2 * Copyright 2011 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
Hal Canary20de6152017-02-23 13:24:49 -05007
8#include "SkDOM.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +00009#include "SkViewPriv.h"
10
11//////////////////////////////////////////////////////////////////////
12
13void SkView::Artist::draw(SkView* view, SkCanvas* canvas)
14{
rmistry@google.comd6176b02012-08-23 18:14:13 +000015 SkASSERT(view && canvas);
16 this->onDraw(view, canvas);
reed@android.com8a1c16f2008-12-17 15:59:43 +000017}
18
19void SkView::Artist::inflate(const SkDOM& dom, const SkDOM::Node* node)
20{
caryclarka10742c2014-09-18 11:00:40 -070021 SkASSERT(node);
rmistry@google.comd6176b02012-08-23 18:14:13 +000022 this->onInflate(dom, node);
reed@android.com8a1c16f2008-12-17 15:59:43 +000023}
24
sugoi@google.com93c7ee32013-03-12 14:36:57 +000025void SkView::Artist::onInflate(const SkDOM&, const SkDOM::Node*)
reed@android.com8a1c16f2008-12-17 15:59:43 +000026{
rmistry@google.comd6176b02012-08-23 18:14:13 +000027 // subclass should override this as needed
reed@android.com8a1c16f2008-12-17 15:59:43 +000028}
29
30SkView::Artist* SkView::getArtist() const
31{
rmistry@google.comd6176b02012-08-23 18:14:13 +000032 Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList);
halcanary96fcdcc2015-08-27 07:41:13 -070033 SkASSERT(rec == nullptr || rec->fArtist != nullptr);
reed@android.com8a1c16f2008-12-17 15:59:43 +000034
halcanary96fcdcc2015-08-27 07:41:13 -070035 return rec ? rec->fArtist : nullptr;
reed@android.com8a1c16f2008-12-17 15:59:43 +000036}
37
38SkView::Artist* SkView::setArtist(Artist* obj)
39{
halcanary96fcdcc2015-08-27 07:41:13 -070040 if (obj == nullptr)
rmistry@google.comd6176b02012-08-23 18:14:13 +000041 {
42 this->removeTagList(kViewArtist_SkTagList);
43 }
44 else // add/replace
45 {
46 Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList);
reed@android.com8a1c16f2008-12-17 15:59:43 +000047
rmistry@google.comd6176b02012-08-23 18:14:13 +000048 if (rec)
49 SkRefCnt_SafeAssign(rec->fArtist, obj);
50 else
51 this->addTagList(new Artist_SkTagList(obj));
52 }
53 return obj;
reed@android.com8a1c16f2008-12-17 15:59:43 +000054}
55
56////////////////////////////////////////////////////////////////////////////////
57
58void SkView::Layout::layoutChildren(SkView* parent)
59{
rmistry@google.comd6176b02012-08-23 18:14:13 +000060 SkASSERT(parent);
61 if (parent->width() > 0 && parent->height() > 0)
62 this->onLayoutChildren(parent);
reed@android.com8a1c16f2008-12-17 15:59:43 +000063}
64
65void SkView::Layout::inflate(const SkDOM& dom, const SkDOM::Node* node)
66{
caryclarka10742c2014-09-18 11:00:40 -070067 SkASSERT(node);
rmistry@google.comd6176b02012-08-23 18:14:13 +000068 this->onInflate(dom, node);
reed@android.com8a1c16f2008-12-17 15:59:43 +000069}
70
sugoi@google.com93c7ee32013-03-12 14:36:57 +000071void SkView::Layout::onInflate(const SkDOM&, const SkDOM::Node*)
reed@android.com8a1c16f2008-12-17 15:59:43 +000072{
rmistry@google.comd6176b02012-08-23 18:14:13 +000073 // subclass should override this as needed
reed@android.com8a1c16f2008-12-17 15:59:43 +000074}
75
76SkView::Layout* SkView::getLayout() const
77{
rmistry@google.comd6176b02012-08-23 18:14:13 +000078 Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList);
halcanary96fcdcc2015-08-27 07:41:13 -070079 SkASSERT(rec == nullptr || rec->fLayout != nullptr);
reed@android.com8a1c16f2008-12-17 15:59:43 +000080
halcanary96fcdcc2015-08-27 07:41:13 -070081 return rec ? rec->fLayout : nullptr;
reed@android.com8a1c16f2008-12-17 15:59:43 +000082}
83
84SkView::Layout* SkView::setLayout(Layout* obj, bool invokeLayoutNow)
85{
halcanary96fcdcc2015-08-27 07:41:13 -070086 if (obj == nullptr)
rmistry@google.comd6176b02012-08-23 18:14:13 +000087 {
88 this->removeTagList(kViewLayout_SkTagList);
89 }
90 else // add/replace
91 {
92 Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList);
reed@android.com8a1c16f2008-12-17 15:59:43 +000093
rmistry@google.comd6176b02012-08-23 18:14:13 +000094 if (rec)
95 SkRefCnt_SafeAssign(rec->fLayout, obj);
96 else
97 this->addTagList(new Layout_SkTagList(obj));
98 }
reed@android.com8a1c16f2008-12-17 15:59:43 +000099
rmistry@google.comd6176b02012-08-23 18:14:13 +0000100 if (invokeLayoutNow)
101 this->invokeLayout();
102
103 return obj;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000104}