1
2/*
3 * Copyright 2006 The Android Open Source Project
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9
10#ifndef SkDrawGroup_DEFINED
11#define SkDrawGroup_DEFINED
12
13#include "SkADrawable.h"
14#include "SkIntArray.h"
15#include "SkMemberInfo.h"
16
17class SkGroup : public SkADrawable { //interface for schema element <g>
18public:
19    DECLARE_MEMBER_INFO(Group);
20    SkGroup();
21    virtual ~SkGroup();
22    bool addChild(SkAnimateMaker& , SkDisplayable* child) override;
23    bool contains(SkDisplayable* ) override;
24    SkGroup* copy();
25    SkBool copySet(int index);
26    SkDisplayable* deepCopy(SkAnimateMaker* ) override;
27    bool doEvent(SkDisplayEvent::Kind , SkEventState* state ) override;
28    bool draw(SkAnimateMaker& ) override;
29#ifdef SK_DUMP_ENABLED
30    void dump(SkAnimateMaker* ) override;
31    virtual void dumpDrawables(SkAnimateMaker* );
32    void dumpEvents() override;
33#endif
34    int findGroup(SkADrawable* drawable,  SkTDDrawableArray** list,
35        SkGroup** parent, SkGroup** found, SkTDDrawableArray** grandList);
36    bool enable(SkAnimateMaker& ) override;
37    SkTDDrawableArray* getChildren() { return &fChildren; }
38    SkGroup* getOriginal() { return fOriginal; }
39    bool hasEnable() const override;
40    void initialize() override;
41    SkBool isACopy() { return fOriginal != NULL; }
42    void markCopyClear(int index);
43    void markCopySet(int index);
44    void markCopySize(int index);
45    bool markedForDelete(int index) const { return (fCopies[index >> 5] & 1 << (index & 0x1f)) == 0; }
46    void reset();
47    bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* ) override;
48    void setSteps(int steps) override;
49#ifdef SK_DEBUG
50    void validate() override;
51#endif
52protected:
53    bool ifCondition(SkAnimateMaker& maker, SkADrawable* drawable,
54        SkString& conditionString);
55    SkString condition;
56    SkString enableCondition;
57    SkTDDrawableArray fChildren;
58    SkTDDrawableArray* fParentList;
59    SkTDIntArray fCopies;
60    SkGroup* fOriginal;
61private:
62    typedef SkADrawable INHERITED;
63};
64
65class SkSave: public SkGroup {
66    DECLARE_MEMBER_INFO(Save);
67    bool draw(SkAnimateMaker& ) override;
68private:
69    typedef SkGroup INHERITED;
70};
71
72#endif // SkDrawGroup_DEFINED
73