1 /* 2 * Copyright 2011 Google Inc. All Rights Reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBDT_TABLE_H_ 18 #define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBDT_TABLE_H_ 19 20 #include "sfntly/table/bitmap/bitmap_glyph.h" 21 #include "sfntly/table/bitmap/bitmap_glyph_info.h" 22 #include "sfntly/table/subtable_container_table.h" 23 24 namespace sfntly { 25 26 class EbdtTable : public SubTableContainerTable, 27 public RefCounted<EbdtTable> { 28 public: 29 struct Offset { 30 enum { 31 kVersion = 0, 32 kHeaderLength = DataSize::kFixed, 33 }; 34 }; 35 36 class Builder : public SubTableContainerTable::Builder, 37 public RefCounted<Builder> { 38 public: 39 // Constructor scope altered to public because C++ does not allow base 40 // class to instantiate derived class with protected constructors. 41 Builder(Header* header, WritableFontData* data); 42 Builder(Header* header, ReadableFontData* data); 43 virtual ~Builder(); 44 45 virtual int32_t SubSerialize(WritableFontData* new_data); 46 virtual bool SubReadyToSerialize(); 47 virtual int32_t SubDataSizeToSerialize(); 48 virtual void SubDataSet(); 49 virtual CALLER_ATTACH FontDataTable* SubBuildTable(ReadableFontData* data); 50 51 void SetLoca(BitmapLocaList* loca_list); 52 void GenerateLocaList(BitmapLocaList* output); 53 54 // Gets the List of glyph builders for the glyph table builder. These may be 55 // manipulated in any way by the caller and the changes will be reflected in 56 // the final glyph table produced. 57 // If there is no current data for the glyph builder or the glyph builders 58 // have not been previously set then this will return an empty glyph builder 59 // List. If there is current data (i.e. data read from an existing font) and 60 // the loca list has not been set or is null, empty, or invalid, then an 61 // empty glyph builder List will be returned. 62 // @return the list of glyph builders 63 BitmapGlyphBuilderList* GlyphBuilders(); 64 65 // Replace the internal glyph builders with the one provided. The provided 66 // list and all contained objects belong to this builder. 67 // This call is only required if the entire set of glyphs in the glyph 68 // table builder are being replaced. If the glyph builder list provided from 69 // the {@link EbdtTable.Builder#glyphBuilders()} is being used and modified 70 // then those changes will already be reflected in the glyph table builder. 71 // @param glyphBuilders the new glyph builders 72 void SetGlyphBuilders(BitmapGlyphBuilderList* glyph_builders); 73 74 void Revert(); 75 76 // Create a new builder using the header information and data provided. 77 // @param header the header information 78 // @param data the data holding the table 79 static CALLER_ATTACH Builder* CreateBuilder(Header* header, 80 WritableFontData* data); 81 static CALLER_ATTACH Builder* CreateBuilder(Header* header, 82 ReadableFontData* data); 83 84 private: 85 BitmapGlyphBuilderList* GetGlyphBuilders(); 86 static void Initialize(ReadableFontData* data, 87 BitmapLocaList* loca_list, 88 BitmapGlyphBuilderList* output); 89 90 static const int32_t kVersion = 0x00020000; // TODO(stuartg): const/enum 91 BitmapLocaList glyph_loca_; 92 BitmapGlyphBuilderList glyph_builders_; 93 }; 94 95 virtual ~EbdtTable(); 96 int32_t Version(); 97 CALLER_ATTACH BitmapGlyph* Glyph(int32_t offset, 98 int32_t length, 99 int32_t format); 100 protected: 101 EbdtTable(Header* header, ReadableFontData* data); 102 }; 103 typedef Ptr<EbdtTable> EbdtTablePtr; 104 typedef Ptr<EbdtTable::Builder> EbdtTableBuilderPtr; 105 106 } // namespace sfntly 107 108 #endif // SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBDT_TABLE_H_ 109