180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2011 Google Inc. 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkViewPriv.h" 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru////////////////////////////////////////////////////////////////////// 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkView::Artist::draw(SkView* view, SkCanvas* canvas) 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(view && canvas); 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->onDraw(view, canvas); 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkView::Artist::inflate(const SkDOM& dom, const SkDOM::Node* node) 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(&dom && node); 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->onInflate(dom, node); 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 24096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergervoid SkView::Artist::onInflate(const SkDOM&, const SkDOM::Node*) 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // subclass should override this as needed 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkView::Artist* SkView::getArtist() const 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList); 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(rec == NULL || rec->fArtist != NULL); 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return rec ? rec->fArtist : NULL; 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkView::Artist* SkView::setArtist(Artist* obj) 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (obj == NULL) 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->removeTagList(kViewArtist_SkTagList); 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru else // add/replace 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList); 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (rec) 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkRefCnt_SafeAssign(rec->fArtist, obj); 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru else 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->addTagList(new Artist_SkTagList(obj)); 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return obj; 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru//////////////////////////////////////////////////////////////////////////////// 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkView::Layout::layoutChildren(SkView* parent) 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(parent); 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (parent->width() > 0 && parent->height() > 0) 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->onLayoutChildren(parent); 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkView::Layout::inflate(const SkDOM& dom, const SkDOM::Node* node) 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(&dom && node); 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->onInflate(dom, node); 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 70096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergervoid SkView::Layout::onInflate(const SkDOM&, const SkDOM::Node*) 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // subclass should override this as needed 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkView::Layout* SkView::getLayout() const 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList); 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(rec == NULL || rec->fLayout != NULL); 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return rec ? rec->fLayout : NULL; 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkView::Layout* SkView::setLayout(Layout* obj, bool invokeLayoutNow) 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (obj == NULL) 8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->removeTagList(kViewLayout_SkTagList); 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru else // add/replace 9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList); 9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (rec) 9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkRefCnt_SafeAssign(rec->fLayout, obj); 9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru else 9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->addTagList(new Layout_SkTagList(obj)); 9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (invokeLayoutNow) 10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->invokeLayout(); 10180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return obj; 10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 104