SkFlattenable.h revision a2ca41e3afdd8fad5e0e924dec029f33918e0a67
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 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** \class SkFlattenable 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenable is the base class for objects that need to be flattened 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com into a data stream for either transport or as part of the key to the 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com font cache. 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 587ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.orgclass SK_API SkFlattenable : public SkRefCnt { 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkFlattenable* (*Factory)(SkFlattenableReadBuffer&); 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenable() {} 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Implement this to return a factory function pointer that can be called 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com to recreate your class given a buffer (previously written to by your 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com override of flatten(). 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual Factory getFactory() = 0; 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Override this to write data specific to your subclass into the buffer, 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com being sure to call your super-class' version first. This data will later 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com be passed to your Factory function, returned by getFactory(). 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void flatten(SkFlattenableWriteBuffer&); 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static Factory NameToFactory(const char name[]); 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static const char* FactoryToName(Factory); 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static void Register(const char name[], Factory); 78a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com class Registrar { 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com public: 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Registrar(const char name[], Factory factory) { 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenable::Register(name, factory); 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 85a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenable(SkFlattenableReadBuffer&) {} 88d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 89d26147adbbdca85f07dff432025afee0c8614387caryclark@google.comprivate: 90d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#if !SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 91d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com static void InitializeFlattenables(); 92d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#endif 939d0c6ecb8440e8e546881a4ff850eb6333f24541caryclark@google.com 949d0c6ecb8440e8e546881a4ff850eb6333f24541caryclark@google.com friend class SkGraphics; 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 97f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.com// helpers for matrix and region 98f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.com 99f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.comclass SkMatrix; 100f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.comextern void SkReadMatrix(SkReader32*, SkMatrix*); 101f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.comextern void SkWriteMatrix(SkWriter32*, const SkMatrix&); 102f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.com 103f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.comclass SkRegion; 104f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.comextern void SkReadRegion(SkReader32*, SkRegion*); 105f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.comextern void SkWriteRegion(SkWriter32*, const SkRegion&); 106f2eb5ab7806a62e89b8cb572b1b33b70b83b13abreed@google.com 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkTypeface; 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkFlattenableReadBuffer : public SkReader32 { 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenableReadBuffer(); 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com explicit SkFlattenableReadBuffer(const void* data); 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenableReadBuffer(const void* data, size_t size); 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setRefCntArray(SkRefCnt* array[], int count) { 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fRCArray = array; 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fRCCount = count; 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setTypefaceArray(SkTypeface* array[], int count) { 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fTFArray = array; 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fTFCount = count; 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1276bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com 1286bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com /** 1296bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * Call this with a pre-loaded array of Factories, in the same order as 1306bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * were created/written by the writer. SkPicture uses this. 1316bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com */ 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setFactoryPlayback(SkFlattenable::Factory array[], int count) { 1336bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com fFactoryTDArray = NULL; 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fFactoryArray = array; 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fFactoryCount = count; 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1376bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com 1386bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com /** 1396bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * Call this with an initially empty array, so the reader can cache each 1406bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * factory it sees by name. Used by the pipe code in conjunction with 1416bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * the writer's kInlineFactoryNames_Flag. 1426bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com */ 1436bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com void setFactoryArray(SkTDArray<SkFlattenable::Factory>* array) { 1446bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com fFactoryTDArray = array; 1456bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com fFactoryArray = NULL; 1466bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com fFactoryCount = 0; 1476bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com } 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTypeface* readTypeface(); 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRefCnt* readRefCnt(); 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void* readFunctionPtr(); 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenable* readFlattenable(); 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRefCnt** fRCArray; 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int fRCCount; 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTypeface** fTFArray; 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int fTFCount; 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1616bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com SkTDArray<SkFlattenable::Factory>* fFactoryTDArray; 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenable::Factory* fFactoryArray; 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int fFactoryCount; 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkReader32 INHERITED; 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPtrRecorder.h" 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 172e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org/** 173e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org * Subclass of SkTPtrSet specialed to call ref() and unref() when the 174e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org * base class's incPtr() and decPtr() are called. This makes it a valid owner 175e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org * of each ptr, which is released when the set is reset or destroyed. 176e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org */ 177e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.orgclass SkRefCntSet : public SkTPtrSet<SkRefCnt*> { 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 179e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org virtual ~SkRefCntSet(); 180e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org 1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // overrides 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void incPtr(void*); 1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void decPtr(void*); 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 187e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.orgclass SkFactorySet : public SkTPtrSet<SkFlattenable::Factory> {}; 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkFlattenableWriteBuffer : public SkWriter32 { 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFlattenableWriteBuffer(size_t minSize); 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkFlattenableWriteBuffer(); 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void writeTypeface(SkTypeface*); 1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void writeRefCnt(SkRefCnt*); 1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void writeFunctionPtr(void*); 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void writeFlattenable(SkFlattenable* flattenable); 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 199e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org SkRefCntSet* getTypefaceRecorder() const { return fTFSet; } 200e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org SkRefCntSet* setTypefaceRecorder(SkRefCntSet*); 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 202e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org SkRefCntSet* getRefCntRecorder() const { return fRCSet; } 203e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org SkRefCntSet* setRefCntRecorder(SkRefCntSet*); 2048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 205e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org SkFactorySet* getFactoryRecorder() const { return fFactorySet; } 206e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org SkFactorySet* setFactoryRecorder(SkFactorySet*); 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com enum Flags { 2096bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com kCrossProcess_Flag = 0x01, 2106bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com /** 2116bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * Instructs the writer to inline Factory names as there are seen the 2126bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com * first time (after that we store an index). The pipe code uses this. 2136bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com */ 2146bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com kInlineFactoryNames_Flag = 0x02, 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 2166bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com Flags getFlags() const { return (Flags)fFlags; } 2178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setFlags(Flags flags) { fFlags = flags; } 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2196bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com bool isCrossProcess() const { 2206bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com return SkToBool(fFlags & kCrossProcess_Flag); 2216bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com } 2226bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com bool inlineFactoryNames() const { 2236bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com return SkToBool(fFlags & kInlineFactoryNames_Flag); 2246bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com } 2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool persistBitmapPixels() const { 2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return (fFlags & kCrossProcess_Flag) != 0; 2288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool persistTypeface() const { return (fFlags & kCrossProcess_Flag) != 0; } 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 2336bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com uint32_t fFlags; 2346bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com SkRefCntSet* fTFSet; 2356bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com SkRefCntSet* fRCSet; 2366bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com SkFactorySet* fFactorySet; 2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkWriter32 INHERITED; 2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 243