16b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com/* 26b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * Copyright 2011 Google Inc. All Rights Reserved. 36b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * 46b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * Licensed under the Apache License, Version 2.0 (the "License"); 56b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * you may not use this file except in compliance with the License. 66b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * You may obtain a copy of the License at 76b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * 86b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * http://www.apache.org/licenses/LICENSE-2.0 96b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * 106b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * Unless required by applicable law or agreed to in writing, software 116b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * distributed under the License is distributed on an "AS IS" BASIS, 126b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * See the License for the specific language governing permissions and 146b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * limitations under the License. 156b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com */ 166b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 176b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com#ifndef SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBDT_TABLE_H_ 186b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com#define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBDT_TABLE_H_ 196b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 206b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com#include "sfntly/table/bitmap/bitmap_glyph.h" 21333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com#include "sfntly/table/bitmap/bitmap_glyph_info.h" 226b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com#include "sfntly/table/subtable_container_table.h" 236b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 246b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comnamespace sfntly { 256b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 266b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comclass EbdtTable : public SubTableContainerTable, 276b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com public RefCounted<EbdtTable> { 286b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com public: 2953847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com struct Offset { 3053847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com enum { 3153847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com kVersion = 0, 3253847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com kHeaderLength = DataSize::kFixed, 3353847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com }; 3453847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com }; 3553847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com 366b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com class Builder : public SubTableContainerTable::Builder, 376b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com public RefCounted<Builder> { 386b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com public: 396b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com // Constructor scope altered to public because C++ does not allow base 406b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com // class to instantiate derived class with protected constructors. 416b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com Builder(Header* header, WritableFontData* data); 426b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com Builder(Header* header, ReadableFontData* data); 436b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com virtual ~Builder(); 446b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 456b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com virtual int32_t SubSerialize(WritableFontData* new_data); 466b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com virtual bool SubReadyToSerialize(); 476b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com virtual int32_t SubDataSizeToSerialize(); 486b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com virtual void SubDataSet(); 496b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com virtual CALLER_ATTACH FontDataTable* SubBuildTable(ReadableFontData* data); 506b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 51333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com void SetLoca(BitmapLocaList* loca_list); 52333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com void GenerateLocaList(BitmapLocaList* output); 53be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com 54be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // Gets the List of glyph builders for the glyph table builder. These may be 55be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // manipulated in any way by the caller and the changes will be reflected in 56be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // the final glyph table produced. 57be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // If there is no current data for the glyph builder or the glyph builders 58be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // have not been previously set then this will return an empty glyph builder 59be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // List. If there is current data (i.e. data read from an existing font) and 60be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // the loca list has not been set or is null, empty, or invalid, then an 61be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // empty glyph builder List will be returned. 62333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com // @return the list of glyph builders 63333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com BitmapGlyphBuilderList* GlyphBuilders(); 64333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 65be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // Replace the internal glyph builders with the one provided. The provided 66be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // list and all contained objects belong to this builder. 67be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // This call is only required if the entire set of glyphs in the glyph 68be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // table builder are being replaced. If the glyph builder list provided from 69be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // the {@link EbdtTable.Builder#glyphBuilders()} is being used and modified 70be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com // then those changes will already be reflected in the glyph table builder. 71333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com // @param glyphBuilders the new glyph builders 72333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com void SetGlyphBuilders(BitmapGlyphBuilderList* glyph_builders); 73333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 74333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com void Revert(); 75333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 76333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com // Create a new builder using the header information and data provided. 77333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com // @param header the header information 78333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com // @param data the data holding the table 796b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com static CALLER_ATTACH Builder* CreateBuilder(Header* header, 806b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com WritableFontData* data); 81333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com static CALLER_ATTACH Builder* CreateBuilder(Header* header, 82333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com ReadableFontData* data); 83333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 84333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com private: 85333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com BitmapGlyphBuilderList* GetGlyphBuilders(); 86333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com static void Initialize(ReadableFontData* data, 87333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com BitmapLocaList* loca_list, 88333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com BitmapGlyphBuilderList* output); 89333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 90333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com static const int32_t kVersion = 0x00020000; // TODO(stuartg): const/enum 91333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com BitmapLocaList glyph_loca_; 92333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com BitmapGlyphBuilderList glyph_builders_; 936b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com }; 946b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 956b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com virtual ~EbdtTable(); 966b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com int32_t Version(); 976b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com CALLER_ATTACH BitmapGlyph* Glyph(int32_t offset, 986b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com int32_t length, 996b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com int32_t format); 1006b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com protected: 101333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com EbdtTable(Header* header, ReadableFontData* data); 1026b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com}; 1036b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comtypedef Ptr<EbdtTable> EbdtTablePtr; 104be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.comtypedef Ptr<EbdtTable::Builder> EbdtTableBuilderPtr; 1056b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 1066b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com} // namespace sfntly 1076b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 1086b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com#endif // SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBDT_TABLE_H_ 109