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