130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/* 230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Copyright 2011 Google Inc. All Rights Reserved. 330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Licensed under the Apache License, Version 2.0 (the "License"); 530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * you may not use this file except in compliance with the License. 630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * You may obtain a copy of the License at 730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * http://www.apache.org/licenses/LICENSE-2.0 930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 1030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Unless required by applicable law or agreed to in writing, software 1130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * distributed under the License is distributed on an "AS IS" BASIS, 1230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * See the License for the specific language governing permissions and 1430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * limitations under the License. 1530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun */ 1630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 1730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifndef SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBLC_TABLE_H_ 1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBLC_TABLE_H_ 1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/port/lock.h" 2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/bitmap/big_glyph_metrics.h" 2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/bitmap/bitmap_glyph.h" 2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/bitmap/bitmap_size_table.h" 2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/subtable_container_table.h" 2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace sfntly { 2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunclass EblcTable : public SubTableContainerTable, 2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public RefCounted<EblcTable> { 3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public: 3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun struct Offset { 3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun enum { 3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // header 3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kVersion = 0, 3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kNumSizes = 4, 3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kHeaderLength = kNumSizes + DataSize::kULONG, 3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // bitmapSizeTable 3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTableArrayStart = kHeaderLength, 4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTableLength = 48, 4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTable_indexSubTableArrayOffset = 0, 4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTable_indexTableSize = 4, 4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTable_numberOfIndexSubTables = 8, 4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTable_colorRef = 12, 4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTable_hori = 16, 4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTable_vert = 28, 4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTable_startGlyphIndex = 40, 4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTable_endGlyphIndex = 42, 4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTable_ppemX = 44, 5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTable_ppemY = 45, 5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTable_bitDepth = 46, 5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kBitmapSizeTable_flags = 47, 5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // sbitLineMetrics 5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetricsLength = 12, 5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetrics_ascender = 0, 5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetrics_descender = 1, 5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetrics_widthMax = 2, 5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetrics_caretSlopeNumerator = 3, 6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetrics_caretSlopeDenominator = 4, 6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetrics_caretOffset = 5, 6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetrics_minOriginSB = 6, 6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetrics_minAdvanceSB = 7, 6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetrics_maxBeforeBL = 8, 6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetrics_minAfterBL = 9, 6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetrics_pad1 = 10, 6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kSbitLineMetrics_pad2 = 11, 6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // indexSubTable 7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTableEntryLength = 8, 7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTableEntry_firstGlyphIndex = 0, 7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTableEntry_lastGlyphIndex = 2, 7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTableEntry_additionalOffsetToIndexSubTable = 4, 7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // indexSubHeader 7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubHeaderLength = 8, 7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubHeader_indexFormat = 0, 7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubHeader_imageFormat = 2, 7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubHeader_imageDataOffset = 4, 8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // indexSubTable - all offset relative to the subtable start 8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // indexSubTable1 8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable1_offsetArray = kIndexSubHeaderLength, 8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable1_builderDataSize = kIndexSubHeaderLength, 8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // kIndexSubTable2 8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable2Length = kIndexSubHeaderLength + 8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DataSize::kULONG + 9030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun BitmapGlyph::Offset::kBigGlyphMetricsLength, 9130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable2_imageSize = kIndexSubHeaderLength, 9230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable2_bigGlyphMetrics = kIndexSubTable2_imageSize + 9330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DataSize::kULONG, 9430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable2_builderDataSize = kIndexSubTable2_bigGlyphMetrics + 9530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun BigGlyphMetrics::Offset::kMetricsLength, 9630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 9730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // kIndexSubTable3 9830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable3_offsetArray = kIndexSubHeaderLength, 9930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable3_builderDataSize = kIndexSubTable3_offsetArray, 10030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 10130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // kIndexSubTable4 10230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable4_numGlyphs = kIndexSubHeaderLength, 10330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable4_glyphArray = kIndexSubTable4_numGlyphs + 10430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DataSize::kULONG, 10530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable4_codeOffsetPairLength = 2 * DataSize::kUSHORT, 10630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable4_codeOffsetPair_glyphCode = 0, 10730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable4_codeOffsetPair_offset = DataSize::kUSHORT, 10830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable4_builderDataSize = kIndexSubTable4_glyphArray, 10930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 11030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // kIndexSubTable5 11130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable5_imageSize = kIndexSubHeaderLength, 11230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable5_bigGlyphMetrics = kIndexSubTable5_imageSize + 11330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DataSize::kULONG, 11430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable5_numGlyphs = kIndexSubTable5_bigGlyphMetrics + 11530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun BitmapGlyph::Offset::kBigGlyphMetricsLength, 11630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable5_glyphArray = kIndexSubTable5_numGlyphs + 11730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DataSize::kULONG, 11830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kIndexSubTable5_builderDataSize = kIndexSubTable5_glyphArray, 11930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 12030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // codeOffsetPair 12130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kCodeOffsetPairLength = 2 * DataSize::kUSHORT, 12230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kCodeOffsetPair_glyphCode = 0, 12330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun kCodeOffsetPair_offset = DataSize::kUSHORT, 12430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun }; 12530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun }; 12630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 12730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun class Builder : public SubTableContainerTable::Builder, 12830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public RefCounted<Builder> { 12930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public: 13030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Constructor scope altered to public because C++ does not allow base 13130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // class to instantiate derived class with protected constructors. 13230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Builder(Header* header, WritableFontData* data); 13330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Builder(Header* header, ReadableFontData* data); 13430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual ~Builder(); 13530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 13630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t SubSerialize(WritableFontData* new_data); 13730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual bool SubReadyToSerialize(); 13830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t SubDataSizeToSerialize(); 13930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual void SubDataSet(); 14030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual CALLER_ATTACH FontDataTable* SubBuildTable(ReadableFontData* data); 14130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 14230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun BitmapSizeTableBuilderList* BitmapSizeBuilders(); 14330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun void Revert(); 14430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 14530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Generates the loca list for the EBDT table. The list is intended to be 14630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // used by the EBDT to allow it to parse the glyph data and generate glyph 14730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // objects. After returning from this method the list belongs to the caller. 14830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // The list entries are in the same order as the size table builders are at 14930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // the time of this call. 15030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the list of loca maps with one for each size table builder 15130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun void GenerateLocaList(BitmapLocaList* output); 15230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 15330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Create a new builder using the header information and data provided. 15430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param header the header information 15530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param data the data holding the table 15630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static CALLER_ATTACH Builder* CreateBuilder(Header* header, 15730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WritableFontData* data); 15830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static CALLER_ATTACH Builder* CreateBuilder(Header* header, 15930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ReadableFontData* data); 16030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 16130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun private: 16230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun BitmapSizeTableBuilderList* GetSizeList(); 16330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun void Initialize(ReadableFontData* data, BitmapSizeTableBuilderList* output); 16430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 16530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t kVersion = 0x00020000; 16630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun BitmapSizeTableBuilderList size_table_builders_; 16730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun }; 16830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 16930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t Version(); 17030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t NumSizes(); 17130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // UNIMPLEMENTED: toString() 17230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 17330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun BitmapSizeTable* GetBitmapSizeTable(int32_t index); 17430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 17530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t NOTDEF = -1; 17630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 17730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun protected: 17830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EblcTable(Header* header, ReadableFontData* data); 17930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun private: 18130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun BitmapSizeTableList* GetBitmapSizeTableList(); 18230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static void CreateBitmapSizeTable(ReadableFontData* data, 18430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t num_sizes, 18530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun BitmapSizeTableList* output); 18630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Lock bitmap_size_table_lock_; 18830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun BitmapSizeTableList bitmap_size_table_; 18930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}; 19030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Guruntypedef Ptr<EblcTable> EblcTablePtr; 19130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Guruntypedef Ptr<EblcTable::Builder> EblcTableBuilderPtr; 19230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 19330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 19430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif // SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBLC_TABLE_H_ 195