1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project
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 */
8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkDrawGroup_DEFINED
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkDrawGroup_DEFINED
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
13986ca61cf7be3ec590f8820e9b7ba042ac2948fereed#include "SkADrawable.h"
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkIntArray.h"
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkMemberInfo.h"
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
17986ca61cf7be3ec590f8820e9b7ba042ac2948fereedclass SkGroup : public SkADrawable { //interface for schema element <g>
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    DECLARE_MEMBER_INFO(Group);
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkGroup();
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual ~SkGroup();
2236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool addChild(SkAnimateMaker& , SkDisplayable* child) override;
2336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool contains(SkDisplayable* ) override;
248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkGroup* copy();
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkBool copySet(int index);
2636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkDisplayable* deepCopy(SkAnimateMaker* ) override;
2736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool doEvent(SkDisplayEvent::Kind , SkEventState* state ) override;
2836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool draw(SkAnimateMaker& ) override;
298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DUMP_ENABLED
3036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void dump(SkAnimateMaker* ) override;
318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void dumpDrawables(SkAnimateMaker* );
3236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void dumpEvents() override;
338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
34986ca61cf7be3ec590f8820e9b7ba042ac2948fereed    int findGroup(SkADrawable* drawable,  SkTDDrawableArray** list,
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        SkGroup** parent, SkGroup** found, SkTDDrawableArray** grandList);
3636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool enable(SkAnimateMaker& ) override;
378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkTDDrawableArray* getChildren() { return &fChildren; }
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkGroup* getOriginal() { return fOriginal; }
3936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool hasEnable() const override;
4036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void initialize() override;
418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkBool isACopy() { return fOriginal != NULL; }
428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void markCopyClear(int index);
438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void markCopySet(int index);
448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void markCopySize(int index);
458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool markedForDelete(int index) const { return (fCopies[index >> 5] & 1 << (index & 0x1f)) == 0; }
468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void reset();
4736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* ) override;
4836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void setSteps(int steps) override;
498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DEBUG
5036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void validate() override;
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
53986ca61cf7be3ec590f8820e9b7ba042ac2948fereed    bool ifCondition(SkAnimateMaker& maker, SkADrawable* drawable,
548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        SkString& conditionString);
558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkString condition;
568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkString enableCondition;
578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkTDDrawableArray fChildren;
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkTDDrawableArray* fParentList;
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkTDIntArray fCopies;
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkGroup* fOriginal;
618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
62986ca61cf7be3ec590f8820e9b7ba042ac2948fereed    typedef SkADrawable INHERITED;
638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkSave: public SkGroup {
668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    DECLARE_MEMBER_INFO(Save);
6736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool draw(SkAnimateMaker& ) override;
688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkGroup INHERITED;
708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif // SkDrawGroup_DEFINED
73