Home | History | Annotate | Download | only in animator
      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 SkDisplayXMLParser_DEFINED
     11 #define SkDisplayXMLParser_DEFINED
     12 
     13 #include "SkIntArray.h"
     14 #include "SkTDict.h"
     15 #include "SkDisplayType.h"
     16 #include "SkXMLParser.h"
     17 
     18 class SkAnimateMaker;
     19 class SkDisplayable;
     20 
     21 class SkDisplayXMLParserError : public SkXMLParserError {
     22 public:
     23     enum ErrorCode {
     24         kApplyScopesItself = kUnknownError + 1,
     25         kDisplayTreeTooDeep,
     26         kElementMissingParent,
     27         kElementTypeNotAllowedInParent,
     28         kErrorAddingDataToPost,
     29         kErrorAddingToMatrix,
     30         kErrorAddingToPaint,
     31         kErrorAddingToPath,
     32         kErrorInAttributeValue,
     33         kErrorInScript,
     34         kExpectedMovie,
     35         kFieldNotInTarget,
     36         kGradientOffsetsDontMatchColors,
     37         kGradientOffsetsMustBeNoMoreThanOne,
     38         kGradientOffsetsMustEndWithOne,
     39         kGradientOffsetsMustIncrease,
     40         kGradientOffsetsMustStartWithZero,
     41         kGradientPointsLengthMustBeFour,
     42         kInInclude,
     43         kInMovie,
     44         kIncludeNameUnknownOrMissing,
     45         kIndexOutOfRange,
     46         kMovieNameUnknownOrMissing,
     47         kNoParentAvailable,
     48         kParentElementCantContain,
     49         kSaveLayerNeedsBounds,
     50         kTargetIDNotFound,
     51         kUnexpectedType
     52     };
     53     virtual ~SkDisplayXMLParserError();
     54     virtual void getErrorString(SkString* str) const;
     55     void setCode(ErrorCode code) { INHERITED::setCode((INHERITED::ErrorCode) code); }
     56     void setInnerError(SkAnimateMaker* maker, const SkString& str);
     57     typedef SkXMLParserError INHERITED;
     58     friend class SkDisplayXMLParser;
     59 };
     60 
     61 class SkDisplayXMLParser : public SkXMLParser {
     62 public:
     63     SkDisplayXMLParser(SkAnimateMaker& maker);
     64     virtual ~SkDisplayXMLParser();
     65 protected:
     66     virtual bool onAddAttribute(const char name[], const char value[]);
     67     bool onAddAttributeLen(const char name[], const char value[], size_t len);
     68     virtual bool onEndElement(const char elem[]);
     69     virtual bool onStartElement(const char elem[]);
     70     bool onStartElementLen(const char elem[], size_t len);
     71 private:
     72     struct Parent {
     73         SkDisplayable* fDisplayable;
     74         SkDisplayTypes fType;
     75     };
     76     SkTDArray<Parent> fParents;
     77     SkDisplayXMLParser& operator= (const SkDisplayXMLParser& );
     78     SkDisplayXMLParserError* getError() { return (SkDisplayXMLParserError*) fError; }
     79     const SkMemberInfo* searchContainer(const SkMemberInfo* ,
     80         int infoCount);
     81     SkAnimateMaker& fMaker;
     82     SkBool fInInclude;
     83     SkBool fInSkia;
     84     // local state between onStartElement and onAddAttribute
     85     SkDisplayable*  fCurrDisplayable;
     86     SkDisplayTypes  fCurrType;
     87     friend class SkXMLAnimatorWriter;
     88     typedef SkXMLParser INHERITED;
     89 };
     90 
     91 #endif // SkDisplayXMLParser_DEFINED
     92