blob: f1b7bb6e28c4ac17376c93c8bd94900f29b29fdf [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
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
reed@android.com8a1c16f2008-12-17 15:59:43 +00009
10#ifndef SkDrawGroup_DEFINED
11#define SkDrawGroup_DEFINED
12
reed986ca612014-11-26 08:50:45 -080013#include "SkADrawable.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000014#include "SkIntArray.h"
15#include "SkMemberInfo.h"
16
reed986ca612014-11-26 08:50:45 -080017class SkGroup : public SkADrawable { //interface for schema element <g>
reed@android.com8a1c16f2008-12-17 15:59:43 +000018public:
19 DECLARE_MEMBER_INFO(Group);
20 SkGroup();
21 virtual ~SkGroup();
mtklein36352bf2015-03-25 18:17:31 -070022 bool addChild(SkAnimateMaker& , SkDisplayable* child) override;
23 bool contains(SkDisplayable* ) override;
reed@android.com8a1c16f2008-12-17 15:59:43 +000024 SkGroup* copy();
25 SkBool copySet(int index);
mtklein36352bf2015-03-25 18:17:31 -070026 SkDisplayable* deepCopy(SkAnimateMaker* ) override;
27 bool doEvent(SkDisplayEvent::Kind , SkEventState* state ) override;
28 bool draw(SkAnimateMaker& ) override;
reed@android.com8a1c16f2008-12-17 15:59:43 +000029#ifdef SK_DUMP_ENABLED
mtklein36352bf2015-03-25 18:17:31 -070030 void dump(SkAnimateMaker* ) override;
reed@android.com8a1c16f2008-12-17 15:59:43 +000031 virtual void dumpDrawables(SkAnimateMaker* );
mtklein36352bf2015-03-25 18:17:31 -070032 void dumpEvents() override;
reed@android.com8a1c16f2008-12-17 15:59:43 +000033#endif
reed986ca612014-11-26 08:50:45 -080034 int findGroup(SkADrawable* drawable, SkTDDrawableArray** list,
reed@android.com8a1c16f2008-12-17 15:59:43 +000035 SkGroup** parent, SkGroup** found, SkTDDrawableArray** grandList);
mtklein36352bf2015-03-25 18:17:31 -070036 bool enable(SkAnimateMaker& ) override;
reed@android.com8a1c16f2008-12-17 15:59:43 +000037 SkTDDrawableArray* getChildren() { return &fChildren; }
38 SkGroup* getOriginal() { return fOriginal; }
mtklein36352bf2015-03-25 18:17:31 -070039 bool hasEnable() const override;
40 void initialize() override;
halcanary96fcdcc2015-08-27 07:41:13 -070041 SkBool isACopy() { return fOriginal != nullptr; }
reed@android.com8a1c16f2008-12-17 15:59:43 +000042 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();
mtklein36352bf2015-03-25 18:17:31 -070047 bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* ) override;
48 void setSteps(int steps) override;
reed@android.com8a1c16f2008-12-17 15:59:43 +000049#ifdef SK_DEBUG
mtklein36352bf2015-03-25 18:17:31 -070050 void validate() override;
reed@android.com8a1c16f2008-12-17 15:59:43 +000051#endif
52protected:
reed986ca612014-11-26 08:50:45 -080053 bool ifCondition(SkAnimateMaker& maker, SkADrawable* drawable,
reed@android.com8a1c16f2008-12-17 15:59:43 +000054 SkString& conditionString);
55 SkString condition;
56 SkString enableCondition;
57 SkTDDrawableArray fChildren;
58 SkTDDrawableArray* fParentList;
59 SkTDIntArray fCopies;
60 SkGroup* fOriginal;
61private:
reed986ca612014-11-26 08:50:45 -080062 typedef SkADrawable INHERITED;
reed@android.com8a1c16f2008-12-17 15:59:43 +000063};
64
65class SkSave: public SkGroup {
66 DECLARE_MEMBER_INFO(Save);
mtklein36352bf2015-03-25 18:17:31 -070067 bool draw(SkAnimateMaker& ) override;
reed@android.com8a1c16f2008-12-17 15:59:43 +000068private:
69 typedef SkGroup INHERITED;
70};
71
72#endif // SkDrawGroup_DEFINED