1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkViewPriv.h" 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////// 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkView::Artist::draw(SkView* view, SkCanvas* canvas) 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 14d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com SkASSERT(view && canvas); 15d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com this->onDraw(view, canvas); 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkView::Artist::inflate(const SkDOM& dom, const SkDOM::Node* node) 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 20a10742c69ce47d346e3cf23e7be909c9f29b401ecaryclark SkASSERT(node); 21d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com this->onInflate(dom, node); 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2493c7ee34dc5c8f6bfad65809f4b39f8d00d7f0d4sugoi@google.comvoid SkView::Artist::onInflate(const SkDOM&, const SkDOM::Node*) 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 26d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com // subclass should override this as needed 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkView::Artist* SkView::getArtist() const 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 31d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList); 32d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com SkASSERT(rec == NULL || rec->fArtist != NULL); 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 34d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com return rec ? rec->fArtist : NULL; 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkView::Artist* SkView::setArtist(Artist* obj) 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 39d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com if (obj == NULL) 40d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com { 41d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com this->removeTagList(kViewArtist_SkTagList); 42d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com } 43d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com else // add/replace 44d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com { 45d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList); 46d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 47d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com if (rec) 48d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com SkRefCnt_SafeAssign(rec->fArtist, obj); 49d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com else 50d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com this->addTagList(new Artist_SkTagList(obj)); 51d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com } 52d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com return obj; 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////////////////////////////////////////////////////////////////////////// 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkView::Layout::layoutChildren(SkView* parent) 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 59d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com SkASSERT(parent); 60d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com if (parent->width() > 0 && parent->height() > 0) 61d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com this->onLayoutChildren(parent); 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkView::Layout::inflate(const SkDOM& dom, const SkDOM::Node* node) 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 66a10742c69ce47d346e3cf23e7be909c9f29b401ecaryclark SkASSERT(node); 67d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com this->onInflate(dom, node); 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 7093c7ee34dc5c8f6bfad65809f4b39f8d00d7f0d4sugoi@google.comvoid SkView::Layout::onInflate(const SkDOM&, const SkDOM::Node*) 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 72d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com // subclass should override this as needed 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkView::Layout* SkView::getLayout() const 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 77d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList); 78d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com SkASSERT(rec == NULL || rec->fLayout != NULL); 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 80d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com return rec ? rec->fLayout : NULL; 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkView::Layout* SkView::setLayout(Layout* obj, bool invokeLayoutNow) 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 85d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com if (obj == NULL) 86d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com { 87d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com this->removeTagList(kViewLayout_SkTagList); 88d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com } 89d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com else // add/replace 90d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com { 91d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList); 92d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 93d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com if (rec) 94d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com SkRefCnt_SafeAssign(rec->fLayout, obj); 95d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com else 96d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com this->addTagList(new Layout_SkTagList(obj)); 97d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com } 98d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 99d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com if (invokeLayoutNow) 100d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com this->invokeLayout(); 101d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 102d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com return obj; 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 104