2012-04-19 14:35:52 +08:00
|
|
|
/* libs/graphics/animator/SkDisplayXMLParser.h
|
|
|
|
**
|
|
|
|
** Copyright 2006, The Android Open Source Project
|
|
|
|
**
|
|
|
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
** you may not use this file except in compliance with the License.
|
|
|
|
** You may obtain a copy of the License at
|
|
|
|
**
|
|
|
|
** http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
**
|
|
|
|
** Unless required by applicable law or agreed to in writing, software
|
|
|
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
** See the License for the specific language governing permissions and
|
|
|
|
** limitations under the License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef SkDisplayXMLParser_DEFINED
|
|
|
|
#define SkDisplayXMLParser_DEFINED
|
|
|
|
|
|
|
|
#include "SkIntArray.h"
|
|
|
|
#include "SkTDict.h"
|
|
|
|
#include "SkDisplayType.h"
|
|
|
|
#include "SkXMLParser.h"
|
|
|
|
|
|
|
|
class SkAnimateMaker;
|
|
|
|
class SkDisplayable;
|
|
|
|
|
|
|
|
class SkDisplayXMLParserError : public SkXMLParserError {
|
|
|
|
public:
|
|
|
|
enum ErrorCode {
|
|
|
|
kApplyScopesItself = kUnknownError + 1,
|
|
|
|
kDisplayTreeTooDeep,
|
|
|
|
kElementMissingParent,
|
|
|
|
kElementTypeNotAllowedInParent,
|
|
|
|
kErrorAddingDataToPost,
|
|
|
|
kErrorAddingToMatrix,
|
|
|
|
kErrorAddingToPaint,
|
|
|
|
kErrorAddingToPath,
|
|
|
|
kErrorInAttributeValue,
|
|
|
|
kErrorInScript,
|
|
|
|
kExpectedMovie,
|
|
|
|
kFieldNotInTarget,
|
|
|
|
kGradientOffsetsDontMatchColors,
|
|
|
|
kGradientOffsetsMustBeNoMoreThanOne,
|
|
|
|
kGradientOffsetsMustEndWithOne,
|
|
|
|
kGradientOffsetsMustIncrease,
|
|
|
|
kGradientOffsetsMustStartWithZero,
|
|
|
|
kGradientPointsLengthMustBeFour,
|
|
|
|
kInInclude,
|
|
|
|
kInMovie,
|
|
|
|
kIncludeNameUnknownOrMissing,
|
|
|
|
kIndexOutOfRange,
|
|
|
|
kMovieNameUnknownOrMissing,
|
|
|
|
kNoParentAvailable,
|
|
|
|
kParentElementCantContain,
|
|
|
|
kSaveLayerNeedsBounds,
|
|
|
|
kTargetIDNotFound,
|
|
|
|
kUnexpectedType
|
|
|
|
};
|
|
|
|
virtual ~SkDisplayXMLParserError();
|
|
|
|
virtual void getErrorString(SkString* str) const;
|
|
|
|
void setCode(ErrorCode code) { INHERITED::setCode((INHERITED::ErrorCode) code); }
|
|
|
|
void setInnerError(SkAnimateMaker* maker, const SkString& str);
|
|
|
|
typedef SkXMLParserError INHERITED;
|
|
|
|
friend class SkDisplayXMLParser;
|
|
|
|
};
|
|
|
|
|
|
|
|
class SkDisplayXMLParser : public SkXMLParser {
|
|
|
|
public:
|
|
|
|
SkDisplayXMLParser(SkAnimateMaker& maker);
|
|
|
|
virtual ~SkDisplayXMLParser();
|
|
|
|
protected:
|
|
|
|
virtual bool onAddAttribute(const char name[], const char value[]);
|
|
|
|
bool onAddAttributeLen(const char name[], const char value[], size_t len);
|
|
|
|
virtual bool onEndElement(const char elem[]);
|
|
|
|
virtual bool onStartElement(const char elem[]);
|
|
|
|
bool onStartElementLen(const char elem[], size_t len);
|
|
|
|
private:
|
|
|
|
struct Parent {
|
|
|
|
SkDisplayable* fDisplayable;
|
|
|
|
SkDisplayTypes fType;
|
|
|
|
};
|
|
|
|
SkTDArray<Parent> fParents;
|
|
|
|
SkDisplayXMLParser& operator= (const SkDisplayXMLParser& );
|
|
|
|
SkDisplayXMLParserError* getError() { return (SkDisplayXMLParserError*) fError; }
|
|
|
|
const SkMemberInfo* searchContainer(const SkMemberInfo* ,
|
|
|
|
int infoCount);
|
|
|
|
SkAnimateMaker& fMaker;
|
|
|
|
SkBool fInInclude;
|
|
|
|
SkBool fInSkia;
|
|
|
|
// local state between onStartElement and onAddAttribute
|
|
|
|
SkDisplayable* fCurrDisplayable;
|
|
|
|
SkDisplayTypes fCurrType;
|
|
|
|
friend class SkXMLAnimatorWriter;
|
|
|
|
typedef SkXMLParser INHERITED;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // SkDisplayXMLParser_DEFINED
|
|
|
|
|
|
|
|
|