blob: 7dbe5f1cae525fa65ff8da0a0c0fa71daab15922 [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 */
reed@android.com8a1c16f2008-12-17 15:59:43 +00007#include "SkViewPriv.h"
8
9//////////////////////////////////////////////////////////////////////
10
11void SkView::Artist::draw(SkView* view, SkCanvas* canvas)
12{
rmistry@google.comd6176b02012-08-23 18:14:13 +000013 SkASSERT(view && canvas);
14 this->onDraw(view, canvas);
reed@android.com8a1c16f2008-12-17 15:59:43 +000015}
16
17void SkView::Artist::inflate(const SkDOM& dom, const SkDOM::Node* node)
18{
caryclarka10742c2014-09-18 11:00:40 -070019 SkASSERT(node);
rmistry@google.comd6176b02012-08-23 18:14:13 +000020 this->onInflate(dom, node);
reed@android.com8a1c16f2008-12-17 15:59:43 +000021}
22
sugoi@google.com93c7ee32013-03-12 14:36:57 +000023void SkView::Artist::onInflate(const SkDOM&, const SkDOM::Node*)
reed@android.com8a1c16f2008-12-17 15:59:43 +000024{
rmistry@google.comd6176b02012-08-23 18:14:13 +000025 // subclass should override this as needed
reed@android.com8a1c16f2008-12-17 15:59:43 +000026}
27
28SkView::Artist* SkView::getArtist() const
29{
rmistry@google.comd6176b02012-08-23 18:14:13 +000030 Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList);
halcanary96fcdcc2015-08-27 07:41:13 -070031 SkASSERT(rec == nullptr || rec->fArtist != nullptr);
reed@android.com8a1c16f2008-12-17 15:59:43 +000032
halcanary96fcdcc2015-08-27 07:41:13 -070033 return rec ? rec->fArtist : nullptr;
reed@android.com8a1c16f2008-12-17 15:59:43 +000034}
35
36SkView::Artist* SkView::setArtist(Artist* obj)
37{
halcanary96fcdcc2015-08-27 07:41:13 -070038 if (obj == nullptr)
rmistry@google.comd6176b02012-08-23 18:14:13 +000039 {
40 this->removeTagList(kViewArtist_SkTagList);
41 }
42 else // add/replace
43 {
44 Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList);
reed@android.com8a1c16f2008-12-17 15:59:43 +000045
rmistry@google.comd6176b02012-08-23 18:14:13 +000046 if (rec)
47 SkRefCnt_SafeAssign(rec->fArtist, obj);
48 else
49 this->addTagList(new Artist_SkTagList(obj));
50 }
51 return obj;
reed@android.com8a1c16f2008-12-17 15:59:43 +000052}
53
54////////////////////////////////////////////////////////////////////////////////
55
56void SkView::Layout::layoutChildren(SkView* parent)
57{
rmistry@google.comd6176b02012-08-23 18:14:13 +000058 SkASSERT(parent);
59 if (parent->width() > 0 && parent->height() > 0)
60 this->onLayoutChildren(parent);
reed@android.com8a1c16f2008-12-17 15:59:43 +000061}
62
63void SkView::Layout::inflate(const SkDOM& dom, const SkDOM::Node* node)
64{
caryclarka10742c2014-09-18 11:00:40 -070065 SkASSERT(node);
rmistry@google.comd6176b02012-08-23 18:14:13 +000066 this->onInflate(dom, node);
reed@android.com8a1c16f2008-12-17 15:59:43 +000067}
68
sugoi@google.com93c7ee32013-03-12 14:36:57 +000069void SkView::Layout::onInflate(const SkDOM&, const SkDOM::Node*)
reed@android.com8a1c16f2008-12-17 15:59:43 +000070{
rmistry@google.comd6176b02012-08-23 18:14:13 +000071 // subclass should override this as needed
reed@android.com8a1c16f2008-12-17 15:59:43 +000072}
73
74SkView::Layout* SkView::getLayout() const
75{
rmistry@google.comd6176b02012-08-23 18:14:13 +000076 Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList);
halcanary96fcdcc2015-08-27 07:41:13 -070077 SkASSERT(rec == nullptr || rec->fLayout != nullptr);
reed@android.com8a1c16f2008-12-17 15:59:43 +000078
halcanary96fcdcc2015-08-27 07:41:13 -070079 return rec ? rec->fLayout : nullptr;
reed@android.com8a1c16f2008-12-17 15:59:43 +000080}
81
82SkView::Layout* SkView::setLayout(Layout* obj, bool invokeLayoutNow)
83{
halcanary96fcdcc2015-08-27 07:41:13 -070084 if (obj == nullptr)
rmistry@google.comd6176b02012-08-23 18:14:13 +000085 {
86 this->removeTagList(kViewLayout_SkTagList);
87 }
88 else // add/replace
89 {
90 Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList);
reed@android.com8a1c16f2008-12-17 15:59:43 +000091
rmistry@google.comd6176b02012-08-23 18:14:13 +000092 if (rec)
93 SkRefCnt_SafeAssign(rec->fLayout, obj);
94 else
95 this->addTagList(new Layout_SkTagList(obj));
96 }
reed@android.com8a1c16f2008-12-17 15:59:43 +000097
rmistry@google.comd6176b02012-08-23 18:14:13 +000098 if (invokeLayoutNow)
99 this->invokeLayout();
100
101 return obj;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000102}