SkFlattenable.h revision 9d0c6ecb8440e8e546881a4ff850eb6333f24541
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 69d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org * found in the LICENSE file. 79d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org */ 89d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 9fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org 10d537341e16524d1e22ac5e6c8b9c8f274ba1833crobertphillips#ifndef SkFlattenable_DEFINED 1169cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com#define SkFlattenable_DEFINED 129d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 1381712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com#include "SkRefCnt.h" 14b9086a026844e4cfd08b219e49ce3f12294cba98bsalomon@google.com#include "SkBitmap.h" 15fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org#include "SkReader32.h" 16181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com#include "SkTDArray.h" 171878651990d7c9da72cf43481432232bbef3550dcommit-bot@chromium.org#include "SkWriter32.h" 181878651990d7c9da72cf43481432232bbef3550dcommit-bot@chromium.org 1981712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.comclass SkFlattenableReadBuffer; 20181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.comclass SkFlattenableWriteBuffer; 21181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.comclass SkString; 22383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com 23383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com#if SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 24383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com 25b9086a026844e4cfd08b219e49ce3f12294cba98bsalomon@google.com#define SK_DECLARE_FLATTENABLE_REGISTRAR() 26383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com 27383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR(flattenable) \ 28383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com static SkFlattenable::Registrar g##flattenable##Reg(#flattenable, \ 29383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com flattenable::CreateProc); 30383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com 31181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(flattenable) 3281712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \ 33181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com static SkFlattenable::Registrar g##flattenable##Reg(#flattenable, \ 34181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com flattenable::CreateProc); 35181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 36b5b3168a645802f66233234a06dd5a3764f18018bsalomon@google.com 374b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org#else 389d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 39972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org#define SK_DECLARE_FLATTENABLE_REGISTRAR() static void Init(); 4081712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com 41c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR(flattenable) \ 42afec7ba75962517b17293799d3fc70d39fa7dbf2tomhudson@google.com void flattenable::Init() { \ 43c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com SkFlattenable::Registrar(#flattenable, CreateProc); \ 44f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org } 45c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com 4681712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(flattenable) \ 47c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com void flattenable::Init() { 489d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 499d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \ 509d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org SkFlattenable::Registrar(#flattenable, flattenable::CreateProc); 519d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 529d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END \ 539d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org } 54e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com 5561f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com#endif 5661f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com 5761f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com/** \class SkFlattenable 5861f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com 5961f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com SkFlattenable is the base class for objects that need to be flattened 6061f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com into a data stream for either transport or as part of the key to the 6161f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com font cache. 62972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org */ 639d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgclass SK_API SkFlattenable : public SkRefCnt { 649d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgpublic: 659d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org typedef SkFlattenable* (*Factory)(SkFlattenableReadBuffer&); 66972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org 67972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org SkFlattenable() {} 68972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org 6981712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com /** Implement this to return a factory function pointer that can be called 70972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org to recreate your class given a buffer (previously written to by your 71c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com override of flatten(). 729d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org */ 739d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org virtual Factory getFactory() = 0; 749d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org /** Override this to write data specific to your subclass into the buffer, 759d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org being sure to call your super-class' version first. This data will later 769d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org be passed to your Factory function, returned by getFactory(). 779d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org */ 789d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org virtual void flatten(SkFlattenableWriteBuffer&); 79972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org 8081712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com /** Set the string to describe the sublass and return true. If this is not 8181712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com overridden, ignore the string param and return false. 829d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org */ 83972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org virtual bool toDumpString(SkString*) const; 849d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 859d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org static Factory NameToFactory(const char name[]); 869d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org static const char* FactoryToName(Factory); 879d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org static void Register(const char name[], Factory); 889d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 899d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org class Registrar { 909d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org public: 91972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org Registrar(const char name[], Factory factory) { 9281712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com SkFlattenable::Register(name, factory); 93c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com } 94afec7ba75962517b17293799d3fc70d39fa7dbf2tomhudson@google.com }; 95c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com 96f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.orgprotected: 97c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com SkFlattenable(SkFlattenableReadBuffer&) {} 98972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org 99c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.comprivate: 100c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com#if !SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 1012047f00e4698f83499ab91911999a65c21a951c9epoger@google.com static void InitializeFlattenables(); 102c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com#endif 1039d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 1049d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org friend class SkGraphics; 105e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com}; 10661f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com 10761f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com// helpers for matrix and region 10861f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com 10961f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.comclass SkMatrix; 11061f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.comextern void SkReadMatrix(SkReader32*, SkMatrix*); 11161f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.comextern void SkWriteMatrix(SkWriter32*, const SkMatrix&); 11261f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com 113972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.orgclass SkRegion; 1149d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgextern void SkReadRegion(SkReader32*, SkRegion*); 1159d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgextern void SkWriteRegion(SkWriter32*, const SkRegion&); 1169d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 117972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org/////////////////////////////////////////////////////////////////////////////// 118972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org/////////////////////////////////////////////////////////////////////////////// 119972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org 120972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.orgclass SkTypeface; 12181712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com 122972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.orgclass SkFlattenableReadBuffer : public SkReader32 { 123c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.compublic: 1249d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org SkFlattenableReadBuffer(); 1259d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org explicit SkFlattenableReadBuffer(const void* data); 1269d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org SkFlattenableReadBuffer(const void* data, size_t size); 1279d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 1289d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org void setRefCntArray(SkRefCnt* array[], int count) { 1299d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org fRCArray = array; 1309d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org fRCCount = count; 131972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org } 13281712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com 13381712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com void setTypefaceArray(SkTypeface* array[], int count) { 13481712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com fTFArray = array; 1359d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org fTFCount = count; 136972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org } 13781712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com 13881712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com /** 1399d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org * Call this with a pre-loaded array of Factories, in the same order as 140972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org * were created/written by the writer. SkPicture uses this. 1419d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org */ 1429d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org void setFactoryPlayback(SkFlattenable::Factory array[], int count) { 1439d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org fFactoryTDArray = NULL; 1449d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org fFactoryArray = array; 1459d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org fFactoryCount = count; 1469d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org } 1478d033a1b125886c62906d975b5cc28a382064526bsalomon@google.com 14881712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com /** 149c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com * Call this with an initially empty array, so the reader can cache each 150afec7ba75962517b17293799d3fc70d39fa7dbf2tomhudson@google.com * factory it sees by name. Used by the pipe code in conjunction with 151c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com * the writer's kInlineFactoryNames_Flag. 152f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org */ 153c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com void setFactoryArray(SkTDArray<SkFlattenable::Factory>* array) { 1549d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org fFactoryTDArray = array; 1559d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org fFactoryArray = NULL; 1569d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org fFactoryCount = 0; 1579d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org } 1589d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 159129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org SkTypeface* readTypeface(); 16094b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com SkRefCnt* readRefCnt(); 1619d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org void* readFunctionPtr(); 162972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org SkFlattenable* readFlattenable(); 16394b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com 1649d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgprivate: 16594b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com SkRefCnt** fRCArray; 16694b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com int fRCCount; 1679d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 1689d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org SkTypeface** fTFArray; 16994b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com int fTFCount; 1709d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 1719d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org SkTDArray<SkFlattenable::Factory>* fFactoryTDArray; 17294b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com SkFlattenable::Factory* fFactoryArray; 1739d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org int fFactoryCount; 1749d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 17594b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com typedef SkReader32 INHERITED; 1769d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org}; 1779d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 1789d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org/////////////////////////////////////////////////////////////////////////////// 1799d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 1809d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#include "SkPtrRecorder.h" 1819d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 1829d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org/** 1839d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org * Subclass of SkTPtrSet specialed to call ref() and unref() when the 1849d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org * base class's incPtr() and decPtr() are called. This makes it a valid owner 1859d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org * of each ptr, which is released when the set is reset or destroyed. 1869d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org */ 1879d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgclass SkRefCntSet : public SkTPtrSet<SkRefCnt*> { 18869cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.compublic: 189972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org virtual ~SkRefCntSet(); 1901971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com 191dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.comprotected: 192dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com // overrides 193dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com virtual void incPtr(void*); 194dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com virtual void decPtr(void*); 195f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org}; 196f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org 197f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.orgclass SkFactorySet : public SkTPtrSet<SkFlattenable::Factory> {}; 198dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com 199f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.orgclass SkFlattenableWriteBuffer : public SkWriter32 { 200f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.orgpublic: 201f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org SkFlattenableWriteBuffer(size_t minSize); 202f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org virtual ~SkFlattenableWriteBuffer(); 203f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org 204f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org void writeTypeface(SkTypeface*); 205f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org void writeRefCnt(SkRefCnt*); 206f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org void writeFunctionPtr(void*); 207f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org void writeFlattenable(SkFlattenable* flattenable); 208f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org 209f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org SkRefCntSet* getTypefaceRecorder() const { return fTFSet; } 2108491d24bdc3f48f67475c12c60babb9f9dba8047skia.committer@gmail.com SkRefCntSet* setTypefaceRecorder(SkRefCntSet*); 211f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org 212dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com SkRefCntSet* getRefCntRecorder() const { return fRCSet; } 213dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com SkRefCntSet* setRefCntRecorder(SkRefCntSet*); 214dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com 215dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com SkFactorySet* getFactoryRecorder() const { return fFactorySet; } 216dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com SkFactorySet* setFactoryRecorder(SkFactorySet*); 217dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com 218dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com enum Flags { 219dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com kCrossProcess_Flag = 0x01, 220dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com /** 221dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com * Instructs the writer to inline Factory names as there are seen the 222dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com * first time (after that we store an index). The pipe code uses this. 223dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com */ 224dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com kInlineFactoryNames_Flag = 0x02, 225dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com }; 226dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com Flags getFlags() const { return (Flags)fFlags; } 227dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com void setFlags(Flags flags) { fFlags = flags; } 228dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com 229972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org bool isCrossProcess() const { 23020e542e00eccaf7b9e81964692a47086e6aaf568bsalomon@google.com return SkToBool(fFlags & kCrossProcess_Flag); 23120e542e00eccaf7b9e81964692a47086e6aaf568bsalomon@google.com } 23220e542e00eccaf7b9e81964692a47086e6aaf568bsalomon@google.com bool inlineFactoryNames() const { 233972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org return SkToBool(fFlags & kInlineFactoryNames_Flag); 234dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com } 2351971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com 2361971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com bool persistBitmapPixels() const { 2371971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com return (fFlags & kCrossProcess_Flag) != 0; 2381971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com } 2391971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com 2401971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com bool persistTypeface() const { return (fFlags & kCrossProcess_Flag) != 0; } 2411971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com 2421971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.comprivate: 243dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com uint32_t fFlags; 244dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com SkRefCntSet* fTFSet; 245dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com SkRefCntSet* fRCSet; 2461971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com SkFactorySet* fFactorySet; 2471971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com 248dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com typedef SkWriter32 INHERITED; 249dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com}; 250f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org 251f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org#endif 252f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org 253f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org