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_GLYPH_INFO_H_ 1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_GLYPH_INFO_H_ 1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <vector> 2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <map> 2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/subtable.h" 2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace sfntly { 2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// An immutable class holding bitmap glyph information. 2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunclass BitmapGlyphInfo : public RefCounted<BitmapGlyphInfo> { 2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public: 3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Constructor for a relative located glyph. The glyph's position in the EBDT 3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // table is a combination of it's block offset and it's own start offset. 3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param glyphId the glyph id 3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param blockOffset the offset of the block to which the glyph belongs 3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param startOffset the offset of the glyph within the block 3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the byte length 3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param format the glyph image format 3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun BitmapGlyphInfo(int32_t glyph_id, 3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t block_offset, 3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t start_offset, 4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t length, 4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t format); 4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Constructor for an absolute located glyph. The glyph's position in the EBDT 4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // table is only given by it's own start offset. 4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param glyphId the glyph id 4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param startOffset the offset of the glyph within the block 4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the byte length 4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param format the glyph image format 4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun BitmapGlyphInfo(int32_t glyph_id, 5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t start_offset, 5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t length, 5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t format); 5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t glyph_id() const { return glyph_id_; } 5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun bool relative() const { return relative_; } 5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t block_offset() const { return block_offset_; } 5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t offset() const { return block_offset() + start_offset(); } 5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t start_offset() const { return start_offset_; } 5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t length() const { return length_; } 6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t format() const { return format_; } 6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // UNIMPLEMENTED: hashCode() 6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun bool operator==(const BitmapGlyphInfo& rhs) const; 6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun bool operator==(BitmapGlyphInfo* rhs); 6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun private: 6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t glyph_id_; 6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun bool relative_; 6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t block_offset_; 7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t start_offset_; 7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t length_; 7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t format_; 7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}; 7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Guruntypedef Ptr<BitmapGlyphInfo> BitmapGlyphInfoPtr; 7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Guruntypedef std::map<int32_t, BitmapGlyphInfoPtr> BitmapGlyphInfoMap; 7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Guruntypedef std::vector<BitmapGlyphInfoMap> BitmapLocaList; 7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunclass StartOffsetComparator { 7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public: 8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun bool operator()(BitmapGlyphInfo* lhs, BitmapGlyphInfo* rhs); 8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}; 8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} // namespace sfntly 8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif // SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_GLYPH_INFO_H_ 86