1 /* 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 */ 7 8 #include "SkDOM.h" 9 #include "SkViewPriv.h" 10 11 ////////////////////////////////////////////////////////////////////// 12 13 void SkView::Artist::draw(SkView* view, SkCanvas* canvas) 14 { 15 SkASSERT(view && canvas); 16 this->onDraw(view, canvas); 17 } 18 19 void SkView::Artist::inflate(const SkDOM& dom, const SkDOM::Node* node) 20 { 21 SkASSERT(node); 22 this->onInflate(dom, node); 23 } 24 25 void SkView::Artist::onInflate(const SkDOM&, const SkDOM::Node*) 26 { 27 // subclass should override this as needed 28 } 29 30 SkView::Artist* SkView::getArtist() const 31 { 32 Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList); 33 SkASSERT(rec == nullptr || rec->fArtist != nullptr); 34 35 return rec ? rec->fArtist : nullptr; 36 } 37 38 SkView::Artist* SkView::setArtist(Artist* obj) 39 { 40 if (obj == nullptr) 41 { 42 this->removeTagList(kViewArtist_SkTagList); 43 } 44 else // add/replace 45 { 46 Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList); 47 48 if (rec) 49 SkRefCnt_SafeAssign(rec->fArtist, obj); 50 else 51 this->addTagList(new Artist_SkTagList(obj)); 52 } 53 return obj; 54 } 55 56 //////////////////////////////////////////////////////////////////////////////// 57 58 void SkView::Layout::layoutChildren(SkView* parent) 59 { 60 SkASSERT(parent); 61 if (parent->width() > 0 && parent->height() > 0) 62 this->onLayoutChildren(parent); 63 } 64 65 void SkView::Layout::inflate(const SkDOM& dom, const SkDOM::Node* node) 66 { 67 SkASSERT(node); 68 this->onInflate(dom, node); 69 } 70 71 void SkView::Layout::onInflate(const SkDOM&, const SkDOM::Node*) 72 { 73 // subclass should override this as needed 74 } 75 76 SkView::Layout* SkView::getLayout() const 77 { 78 Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList); 79 SkASSERT(rec == nullptr || rec->fLayout != nullptr); 80 81 return rec ? rec->fLayout : nullptr; 82 } 83 84 SkView::Layout* SkView::setLayout(Layout* obj, bool invokeLayoutNow) 85 { 86 if (obj == nullptr) 87 { 88 this->removeTagList(kViewLayout_SkTagList); 89 } 90 else // add/replace 91 { 92 Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList); 93 94 if (rec) 95 SkRefCnt_SafeAssign(rec->fLayout, obj); 96 else 97 this->addTagList(new Layout_SkTagList(obj)); 98 } 99 100 if (invokeLayoutNow) 101 this->invokeLayout(); 102 103 return obj; 104 } 105