/* * Copyright 2011 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkPictureFlat_DEFINED #define SkPictureFlat_DEFINED #include "SkChecksum.h" #include "SkChunkAlloc.h" #include "SkReadBuffer.h" #include "SkWriteBuffer.h" #include "SkPaint.h" #include "SkPicture.h" #include "SkPtrRecorder.h" #include "SkTDynamicHash.h" enum DrawType { UNUSED, CLIP_PATH, CLIP_REGION, CLIP_RECT, CLIP_RRECT, CONCAT, DRAW_BITMAP, DRAW_BITMAP_MATRIX, // deprecated, M41 was last Chromium version to write this to an .skp DRAW_BITMAP_NINE, DRAW_BITMAP_RECT, DRAW_CLEAR, DRAW_DATA, DRAW_OVAL, DRAW_PAINT, DRAW_PATH, DRAW_PICTURE, DRAW_POINTS, DRAW_POS_TEXT, DRAW_POS_TEXT_TOP_BOTTOM, // fast variant of DRAW_POS_TEXT DRAW_POS_TEXT_H, DRAW_POS_TEXT_H_TOP_BOTTOM, // fast variant of DRAW_POS_TEXT_H DRAW_RECT, DRAW_RRECT, DRAW_SPRITE, DRAW_TEXT, DRAW_TEXT_ON_PATH, DRAW_TEXT_TOP_BOTTOM, // fast variant of DRAW_TEXT DRAW_VERTICES, RESTORE, ROTATE, SAVE, SAVE_LAYER_SAVEFLAGS_DEPRECATED, SCALE, SET_MATRIX, SKEW, TRANSLATE, NOOP, BEGIN_COMMENT_GROUP, // deprecated (M44) COMMENT, // deprecated (M44) END_COMMENT_GROUP, // deprecated (M44) // new ops -- feel free to re-alphabetize on next version bump DRAW_DRRECT, PUSH_CULL, // deprecated, M41 was last Chromium version to write this to an .skp POP_CULL, // deprecated, M41 was last Chromium version to write this to an .skp DRAW_PATCH, // could not add in aphabetical order DRAW_PICTURE_MATRIX_PAINT, DRAW_TEXT_BLOB, DRAW_IMAGE, DRAW_IMAGE_RECT_STRICT, // deprecated (M45) DRAW_ATLAS, DRAW_IMAGE_NINE, DRAW_IMAGE_RECT, SAVE_LAYER_SAVELAYERFLAGS_DEPRECATED_JAN_2016, SAVE_LAYER_SAVELAYERREC, DRAW_ANNOTATION, DRAW_DRAWABLE, DRAW_DRAWABLE_MATRIX, LAST_DRAWTYPE_ENUM = DRAW_DRAWABLE_MATRIX, }; // In the 'match' method, this constant will match any flavor of DRAW_BITMAP* static const int kDRAW_BITMAP_FLAVOR = LAST_DRAWTYPE_ENUM+1; enum DrawVertexFlags { DRAW_VERTICES_HAS_TEXS = 0x01, DRAW_VERTICES_HAS_COLORS = 0x02, DRAW_VERTICES_HAS_INDICES = 0x04, DRAW_VERTICES_HAS_XFER = 0x08, }; enum DrawAtlasFlags { DRAW_ATLAS_HAS_COLORS = 1 << 0, DRAW_ATLAS_HAS_CULL = 1 << 1, }; enum SaveLayerRecFlatFlags { SAVELAYERREC_HAS_BOUNDS = 1 << 0, SAVELAYERREC_HAS_PAINT = 1 << 1, SAVELAYERREC_HAS_BACKDROP = 1 << 2, SAVELAYERREC_HAS_FLAGS = 1 << 3, }; /////////////////////////////////////////////////////////////////////////////// // clipparams are packed in 5 bits // doAA:1 | regionOp:4 static inline uint32_t ClipParams_pack(SkRegion::Op op, bool doAA) { unsigned doAABit = doAA ? 1 : 0; return (doAABit << 4) | op; } static inline SkRegion::Op ClipParams_unpackRegionOp(uint32_t packed) { return (SkRegion::Op)(packed & 0xF); } static inline bool ClipParams_unpackDoAA(uint32_t packed) { return SkToBool((packed >> 4) & 1); } /////////////////////////////////////////////////////////////////////////////// class SkTypefacePlayback { public: SkTypefacePlayback(); virtual ~SkTypefacePlayback(); int count() const { return fCount; } void reset(const SkRefCntSet*); void setCount(int count); SkRefCnt* set(int index, SkRefCnt*); void setupBuffer(SkReadBuffer& buffer) const { buffer.setTypefaceArray((SkTypeface**)fArray, fCount); } protected: int fCount; SkRefCnt** fArray; }; class SkFactoryPlayback { public: SkFactoryPlayback(int count) : fCount(count) { fArray = new SkFlattenable::Factory[count]; } ~SkFactoryPlayback() { delete[] fArray; } SkFlattenable::Factory* base() const { return fArray; } void setupBuffer(SkReadBuffer& buffer) const { buffer.setFactoryPlayback(fArray, fCount); } private: int fCount; SkFlattenable::Factory* fArray; }; #endif