diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkColorTable.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/core/SkColorTable.h b/src/core/SkColorTable.h new file mode 100644 index 0000000000..ca5efd1fe1 --- /dev/null +++ b/src/core/SkColorTable.h @@ -0,0 +1,78 @@ + +/* + * Copyright 2012 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#ifndef SkColorTable_DEFINED +#define SkColorTable_DEFINED + +#include "../private/SkOnce.h" +#include "SkColor.h" +#include "SkFlattenable.h" +#include "SkImageInfo.h" + +/** \class SkColorTable + + SkColorTable holds an array SkPMColors (premultiplied 32-bit colors) used by + 8-bit bitmaps, where the bitmap bytes are interpreted as indices into the colortable. + + SkColorTable is thread-safe. +*/ +class SK_API SkColorTable : public SkRefCnt { +public: + static sk_sp<SkColorTable> Make(const SkPMColor colors[], int count); + + /** Copy up to 256 colors into a new SkColorTable. + */ + SkColorTable(const SkPMColor colors[], int count); + ~SkColorTable() override; + + /** Returns the number of colors in the table. + */ + int count() const { return fCount; } + + /** Returns the specified color from the table. In the debug build, this asserts that + * the index is in range (0 <= index < count). + */ + SkPMColor operator[](int index) const { + SkASSERT(fColors != NULL && (unsigned)index < (unsigned)fCount); + return fColors[index]; + } + + /** Return the array of colors for reading. + */ + const SkPMColor* readColors() const { return fColors; } + + /** read16BitCache() returns the array of RGB16 colors that mirror the 32bit colors. + */ + const uint16_t* read16BitCache() const; + + void writeToBuffer(SkWriteBuffer&) const; + + // may return null + static sk_sp<SkColorTable> Create(SkReadBuffer&); + +private: + enum AllocatedWithMalloc { + kAllocatedWithMalloc + }; + // assumes ownership of colors (assumes it was allocated w/ malloc) + SkColorTable(SkPMColor* colors, int count, AllocatedWithMalloc); + + SkPMColor* fColors; + mutable uint16_t* f16BitCache = nullptr; + mutable SkOnce f16BitCacheOnce; + int fCount; + + void init(const SkPMColor* colors, int count); + + friend class SkImageGenerator; + + typedef SkRefCnt INHERITED; +}; + +#endif |