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