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