11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkFlattenable_DEFINED 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkFlattenable_DEFINED 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkRefCnt.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkBitmap.h" 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkReader32.h" 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTDArray.h" 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkWriter32.h" 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkFlattenableReadBuffer; 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkFlattenableWriteBuffer; 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkString; 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#if SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SK_DECLARE_FLATTENABLE_REGISTRAR() 261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SK_DEFINE_FLATTENABLE_REGISTRAR(flattenable) \ 281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static SkFlattenable::Registrar g##flattenable##Reg(#flattenable, \ 291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger flattenable::CreateProc); 301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(flattenable) 321cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \ 331cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static SkFlattenable::Registrar g##flattenable##Reg(#flattenable, \ 341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger flattenable::CreateProc); 351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#else 381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SK_DECLARE_FLATTENABLE_REGISTRAR() static void Init(); 401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SK_DEFINE_FLATTENABLE_REGISTRAR(flattenable) \ 421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger void flattenable::Init() { \ 431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkFlattenable::Registrar(#flattenable, CreateProc); \ 441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(flattenable) \ 471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger void flattenable::Init() { 481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \ 501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkFlattenable::Registrar(#flattenable, flattenable::CreateProc); 511cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END \ 531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif 561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** \class SkFlattenable 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFlattenable is the base class for objects that need to be flattened 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project into a data stream for either transport or as part of the key to the 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project font cache. 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 63137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenbergerclass SK_API SkFlattenable : public SkRefCnt { 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkFlattenable* (*Factory)(SkFlattenableReadBuffer&); 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFlattenable() {} 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Implement this to return a factory function pointer that can be called 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project to recreate your class given a buffer (previously written to by your 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project override of flatten(). 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual Factory getFactory() = 0; 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Override this to write data specific to your subclass into the buffer, 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project being sure to call your super-class' version first. This data will later 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project be passed to your Factory function, returned by getFactory(). 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void flatten(SkFlattenableWriteBuffer&); 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Set the string to describe the sublass and return true. If this is not 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project overridden, ignore the string param and return false. 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool toDumpString(SkString*) const; 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static Factory NameToFactory(const char name[]); 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static const char* FactoryToName(Factory); 870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static void Register(const char name[], Factory); 880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project class Registrar { 900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project public: 910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Registrar(const char name[], Factory factory) { 920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFlattenable::Register(name, factory); 930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project }; 950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected: 970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFlattenable(SkFlattenableReadBuffer&) {} 981cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 991cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprivate: 1001cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#if !SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 1011cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static void InitializeFlattenables(); 1021cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif 1031cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1041cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger friend class SkGraphics; 1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 10735e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger// helpers for matrix and region 10835e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger 10935e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenbergerclass SkMatrix; 11035e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenbergerextern void SkReadMatrix(SkReader32*, SkMatrix*); 11135e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenbergerextern void SkWriteMatrix(SkWriter32*, const SkMatrix&); 11235e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger 11335e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenbergerclass SkRegion; 11435e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenbergerextern void SkReadRegion(SkReader32*, SkRegion*); 11535e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenbergerextern void SkWriteRegion(SkWriter32*, const SkRegion&); 11635e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger 1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkTypeface; 1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkFlattenableReadBuffer : public SkReader32 { 1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFlattenableReadBuffer(); 1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project explicit SkFlattenableReadBuffer(const void* data); 1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFlattenableReadBuffer(const void* data, size_t size); 1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void setRefCntArray(SkRefCnt* array[], int count) { 1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fRCArray = array; 1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fRCCount = count; 1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void setTypefaceArray(SkTypeface* array[], int count) { 1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fTFArray = array; 1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fTFCount = count; 1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger /** 1391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Call this with a pre-loaded array of Factories, in the same order as 1401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * were created/written by the writer. SkPicture uses this. 1411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void setFactoryPlayback(SkFlattenable::Factory array[], int count) { 1431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger fFactoryTDArray = NULL; 1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fFactoryArray = array; 1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fFactoryCount = count; 1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger /** 1491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Call this with an initially empty array, so the reader can cache each 1501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * factory it sees by name. Used by the pipe code in conjunction with 1511cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * the writer's kInlineFactoryNames_Flag. 1521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 1531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger void setFactoryArray(SkTDArray<SkFlattenable::Factory>* array) { 1541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger fFactoryTDArray = array; 1551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger fFactoryArray = NULL; 1561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger fFactoryCount = 0; 1571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTypeface* readTypeface(); 1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkRefCnt* readRefCnt(); 1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* readFunctionPtr(); 1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFlattenable* readFlattenable(); 1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 164341c93bd153d8fcc55114b0148301e98e34bc13cDerek Sollenberger void setPictureVersion(uint32_t version) { fPictureVersion = version; } 165341c93bd153d8fcc55114b0148301e98e34bc13cDerek Sollenberger uint32_t getPictureVersion() { return fPictureVersion; } 166341c93bd153d8fcc55114b0148301e98e34bc13cDerek Sollenberger 1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkRefCnt** fRCArray; 1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int fRCCount; 1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTypeface** fTFArray; 1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int fTFCount; 1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkTDArray<SkFlattenable::Factory>* fFactoryTDArray; 1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFlattenable::Factory* fFactoryArray; 1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int fFactoryCount; 1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 178341c93bd153d8fcc55114b0148301e98e34bc13cDerek Sollenberger uint32_t fPictureVersion; 179341c93bd153d8fcc55114b0148301e98e34bc13cDerek Sollenberger 1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkReader32 INHERITED; 1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPtrRecorder.h" 1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 18735e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger/** 18835e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger * Subclass of SkTPtrSet specialed to call ref() and unref() when the 18935e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger * base class's incPtr() and decPtr() are called. This makes it a valid owner 19035e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger * of each ptr, which is released when the set is reset or destroyed. 19135e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger */ 19235e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenbergerclass SkRefCntSet : public SkTPtrSet<SkRefCnt*> { 1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 19435e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger virtual ~SkRefCntSet(); 19535e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger 1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected: 1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // overrides 1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void incPtr(void*); 1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void decPtr(void*); 2000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 2010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 20235e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenbergerclass SkFactorySet : public SkTPtrSet<SkFlattenable::Factory> {}; 2030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkFlattenableWriteBuffer : public SkWriter32 { 2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFlattenableWriteBuffer(size_t minSize); 2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual ~SkFlattenableWriteBuffer(); 2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void writeTypeface(SkTypeface*); 2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void writeRefCnt(SkRefCnt*); 2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void writeFunctionPtr(void*); 2120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void writeFlattenable(SkFlattenable* flattenable); 2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 21435e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger SkRefCntSet* getTypefaceRecorder() const { return fTFSet; } 21535e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger SkRefCntSet* setTypefaceRecorder(SkRefCntSet*); 2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 21735e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger SkRefCntSet* getRefCntRecorder() const { return fRCSet; } 21835e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger SkRefCntSet* setRefCntRecorder(SkRefCntSet*); 2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 22035e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger SkFactorySet* getFactoryRecorder() const { return fFactorySet; } 22135e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger SkFactorySet* setFactoryRecorder(SkFactorySet*); 2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project enum Flags { 2241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger kCrossProcess_Flag = 0x01, 2251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger /** 2261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Instructs the writer to inline Factory names as there are seen the 2271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * first time (after that we store an index). The pipe code uses this. 2281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 2291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger kInlineFactoryNames_Flag = 0x02, 2300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project }; 2311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger Flags getFlags() const { return (Flags)fFlags; } 2320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void setFlags(Flags flags) { fFlags = flags; } 2330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger bool isCrossProcess() const { 2351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return SkToBool(fFlags & kCrossProcess_Flag); 2361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 2371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger bool inlineFactoryNames() const { 2381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return SkToBool(fFlags & kInlineFactoryNames_Flag); 2391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 2400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool persistBitmapPixels() const { 2420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return (fFlags & kCrossProcess_Flag) != 0; 2430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool persistTypeface() const { return (fFlags & kCrossProcess_Flag) != 0; } 2460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 2481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger uint32_t fFlags; 2491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkRefCntSet* fTFSet; 2501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkRefCntSet* fRCSet; 2511cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkFactorySet* fFactorySet; 2520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkWriter32 INHERITED; 2540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 2550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 2570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 258