180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project
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
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef SkDrawGroup_DEFINED
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define SkDrawGroup_DEFINED
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDrawable.h"
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkIntArray.h"
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkMemberInfo.h"
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkGroup : public SkDrawable { //interface for schema element <g>
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DECLARE_MEMBER_INFO(Group);
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkGroup();
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual ~SkGroup();
22363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual bool contains(SkDisplayable* );
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkGroup* copy();
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkBool copySet(int index);
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual SkDisplayable* deepCopy(SkAnimateMaker* );
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual bool doEvent(SkDisplayEvent::Kind , SkEventState* state );
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual bool draw(SkAnimateMaker& );
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DUMP_ENABLED
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void dump(SkAnimateMaker* );
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void dumpDrawables(SkAnimateMaker* );
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void dumpEvents();
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    int findGroup(SkDrawable* drawable,  SkTDDrawableArray** list,
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkGroup** parent, SkGroup** found, SkTDDrawableArray** grandList);
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual bool enable(SkAnimateMaker& );
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkTDDrawableArray* getChildren() { return &fChildren; }
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkGroup* getOriginal() { return fOriginal; }
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual bool hasEnable() const;
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void initialize();
4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkBool isACopy() { return fOriginal != NULL; }
4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    void markCopyClear(int index);
4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    void markCopySet(int index);
4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    void markCopySize(int index);
4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool markedForDelete(int index) const { return (fCopies[index >> 5] & 1 << (index & 0x1f)) == 0; }
4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    void reset();
4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* );
4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void setSteps(int steps);
4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DEBUG
5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void validate();
5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected:
5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool ifCondition(SkAnimateMaker& maker, SkDrawable* drawable,
5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkString& conditionString);
5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkString condition;
5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkString enableCondition;
5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkTDDrawableArray fChildren;
5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkTDDrawableArray* fParentList;
5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkTDIntArray fCopies;
6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkGroup* fOriginal;
6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    typedef SkDrawable INHERITED;
6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkSave: public SkGroup {
6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DECLARE_MEMBER_INFO(Save);
6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual bool draw(SkAnimateMaker& );
6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    typedef SkGroup INHERITED;
7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif // SkDrawGroup_DEFINED
73