SkFlattenable.h revision ba28d03e94dc221d6a803bf2a84a420b9159255c
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 48a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.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. 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkFlattenable_DEFINED 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkFlattenable_DEFINED 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRefCnt.h" 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkBitmap.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkReader32.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTDArray.h" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkWriter32.h" 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkFlattenableReadBuffer; 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkFlattenableWriteBuffer; 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkString; 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 23d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#if SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 24d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 25d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR(flattenable) \ 26d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com static SkFlattenable::Registrar g##flattenable##Reg(#flattenable, \ 27a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com flattenable::CreateProc); 28d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \ 29d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com static SkFlattenable::Registrar g##flattenable##Reg(#flattenable, \ 30a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com flattenable::CreateProc); 31a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com 32a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com#define SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() 33a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(flattenable) 34d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 35d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 36d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#else 37d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 38a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR(flattenable) 39a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \ 40a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com SkFlattenable::Registrar(#flattenable, flattenable::CreateProc); 41d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 42a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com#define SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() static void InitializeFlattenables(); 43d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 44d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(flattenable) \ 45a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com void flattenable::InitializeFlattenables() { 46a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com 47d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END \ 48d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com } 49d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 50d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#endif 51d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 52ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com#define SK_DECLARE_UNFLATTENABLE_OBJECT() \ 53ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com virtual Factory getFactory() SK_OVERRIDE { return NULL; }; \ 54ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com 55ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com#define SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(flattenable) \ 56ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com virtual Factory getFactory() SK_OVERRIDE { return CreateProc; }; \ 57ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { \ 58ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com return SkNEW_ARGS(flattenable, (buffer)); \ 59ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com } 60ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** \class SkFlattenable 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenable is the base class for objects that need to be flattened 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com into a data stream for either transport or as part of the key to the 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com font cache. 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 677ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.orgclass SK_API SkFlattenable : public SkRefCnt { 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkFlattenable* (*Factory)(SkFlattenableReadBuffer&); 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenable() {} 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Implement this to return a factory function pointer that can be called 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com to recreate your class given a buffer (previously written to by your 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com override of flatten(). 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual Factory getFactory() = 0; 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Override this to write data specific to your subclass into the buffer, 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com being sure to call your super-class' version first. This data will later 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com be passed to your Factory function, returned by getFactory(). 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void flatten(SkFlattenableWriteBuffer&); 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static Factory NameToFactory(const char name[]); 858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static const char* FactoryToName(Factory); 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static void Register(const char name[], Factory); 87a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com class Registrar { 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com public: 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Registrar(const char name[], Factory factory) { 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenable::Register(name, factory); 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 94a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenable(SkFlattenableReadBuffer&) {} 97d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 98d26147adbbdca85f07dff432025afee0c8614387caryclark@google.comprivate: 99d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#if !SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 100d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com static void InitializeFlattenables(); 101d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#endif 1029d0c6ecb8440e8e546881a4ff850eb6333f24541caryclark@google.com 1039d0c6ecb8440e8e546881a4ff850eb6333f24541caryclark@google.com friend class SkGraphics; 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 106f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.com// helpers for matrix and region 107f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.com 108f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.comclass SkMatrix; 109f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.comextern void SkReadMatrix(SkReader32*, SkMatrix*); 110f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.comextern void SkWriteMatrix(SkWriter32*, const SkMatrix&); 111f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.com 112f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.comclass SkRegion; 113f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.comextern void SkReadRegion(SkReader32*, SkRegion*); 114f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.comextern void SkWriteRegion(SkWriter32*, const SkRegion&); 115f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.com 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkTypeface; 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkFlattenableReadBuffer : public SkReader32 { 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenableReadBuffer(); 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com explicit SkFlattenableReadBuffer(const void* data); 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenableReadBuffer(const void* data, size_t size); 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setRefCntArray(SkRefCnt* array[], int count) { 1288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fRCArray = array; 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fRCCount = count; 1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setTypefaceArray(SkTypeface* array[], int count) { 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fTFArray = array; 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fTFCount = count; 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1366bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com 1376bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com /** 1386bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * Call this with a pre-loaded array of Factories, in the same order as 1396bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * were created/written by the writer. SkPicture uses this. 1406bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com */ 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setFactoryPlayback(SkFlattenable::Factory array[], int count) { 1426bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com fFactoryTDArray = NULL; 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fFactoryArray = array; 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fFactoryCount = count; 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1466bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com 1476bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com /** 1486bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * Call this with an initially empty array, so the reader can cache each 1496bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * factory it sees by name. Used by the pipe code in conjunction with 1506bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * the writer's kInlineFactoryNames_Flag. 1516bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com */ 1526bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com void setFactoryArray(SkTDArray<SkFlattenable::Factory>* array) { 1536bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com fFactoryTDArray = array; 1546bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com fFactoryArray = NULL; 1556bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com fFactoryCount = 0; 1566bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com } 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTypeface* readTypeface(); 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRefCnt* readRefCnt(); 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void* readFunctionPtr(); 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenable* readFlattenable(); 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRefCnt** fRCArray; 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int fRCCount; 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTypeface** fTFArray; 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int fTFCount; 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1706bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com SkTDArray<SkFlattenable::Factory>* fFactoryTDArray; 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenable::Factory* fFactoryArray; 1728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int fFactoryCount; 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkReader32 INHERITED; 1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPtrRecorder.h" 1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 181e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org/** 182e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org * Subclass of SkTPtrSet specialed to call ref() and unref() when the 183e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org * base class's incPtr() and decPtr() are called. This makes it a valid owner 184e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org * of each ptr, which is released when the set is reset or destroyed. 185e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org */ 186e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.orgclass SkRefCntSet : public SkTPtrSet<SkRefCnt*> { 1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 188e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org virtual ~SkRefCntSet(); 189e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // overrides 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void incPtr(void*); 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void decPtr(void*); 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 196e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.orgclass SkFactorySet : public SkTPtrSet<SkFlattenable::Factory> {}; 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkFlattenableWriteBuffer : public SkWriter32 { 1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenableWriteBuffer(size_t minSize); 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkFlattenableWriteBuffer(); 2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void writeTypeface(SkTypeface*); 2048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void writeRefCnt(SkRefCnt*); 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void writeFunctionPtr(void*); 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void writeFlattenable(SkFlattenable* flattenable); 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 208e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org SkRefCntSet* getTypefaceRecorder() const { return fTFSet; } 209e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org SkRefCntSet* setTypefaceRecorder(SkRefCntSet*); 2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 211e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org SkRefCntSet* getRefCntRecorder() const { return fRCSet; } 212e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org SkRefCntSet* setRefCntRecorder(SkRefCntSet*); 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 214e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org SkFactorySet* getFactoryRecorder() const { return fFactorySet; } 215e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org SkFactorySet* setFactoryRecorder(SkFactorySet*); 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com enum Flags { 2186bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com kCrossProcess_Flag = 0x01, 2196bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com /** 2206bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * Instructs the writer to inline Factory names as there are seen the 2216bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * first time (after that we store an index). The pipe code uses this. 2226bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com */ 2236bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com kInlineFactoryNames_Flag = 0x02, 2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 2256bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com Flags getFlags() const { return (Flags)fFlags; } 2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setFlags(Flags flags) { fFlags = flags; } 2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2286bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com bool isCrossProcess() const { 2296bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com return SkToBool(fFlags & kCrossProcess_Flag); 2306bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com } 2316bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com bool inlineFactoryNames() const { 2326bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com return SkToBool(fFlags & kInlineFactoryNames_Flag); 2336bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com } 2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool persistBitmapPixels() const { 2368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return (fFlags & kCrossProcess_Flag) != 0; 2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool persistTypeface() const { return (fFlags & kCrossProcess_Flag) != 0; } 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 2426bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com uint32_t fFlags; 2436bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com SkRefCntSet* fTFSet; 2446bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com SkRefCntSet* fRCSet; 2456bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com SkFactorySet* fFactorySet; 2468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkWriter32 INHERITED; 2488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 252