Home | History | Annotate | Download | only in bitmap
      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_GLYPH_INFO_H_
     18 #define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_GLYPH_INFO_H_
     19 
     20 #include <vector>
     21 #include <map>
     22 
     23 #include "sfntly/table/subtable.h"
     24 
     25 namespace sfntly {
     26 
     27 // An immutable class holding bitmap glyph information.
     28 class BitmapGlyphInfo : public RefCounted<BitmapGlyphInfo> {
     29  public:
     30   // Constructor for a relative located glyph. The glyph's position in the EBDT
     31   // table is a combination of it's block offset and it's own start offset.
     32   // @param glyphId the glyph id
     33   // @param blockOffset the offset of the block to which the glyph belongs
     34   // @param startOffset the offset of the glyph within the block
     35   // @param length the byte length
     36   // @param format the glyph image format
     37   BitmapGlyphInfo(int32_t glyph_id,
     38                   int32_t block_offset,
     39                   int32_t start_offset,
     40                   int32_t length,
     41                   int32_t format);
     42 
     43   // Constructor for an absolute located glyph. The glyph's position in the EBDT
     44   // table is only given by it's own start offset.
     45   // @param glyphId the glyph id
     46   // @param startOffset the offset of the glyph within the block
     47   // @param length the byte length
     48   // @param format the glyph image format
     49   BitmapGlyphInfo(int32_t glyph_id,
     50                   int32_t start_offset,
     51                   int32_t length,
     52                   int32_t format);
     53 
     54   int32_t glyph_id() const { return glyph_id_; }
     55   bool relative() const { return relative_; }
     56   int32_t block_offset() const { return block_offset_; }
     57   int32_t offset() const { return block_offset() + start_offset(); }
     58   int32_t start_offset() const { return start_offset_; }
     59   int32_t length() const { return length_; }
     60   int32_t format() const { return format_; }
     61 
     62   // UNIMPLEMENTED: hashCode()
     63   bool operator==(const BitmapGlyphInfo& rhs) const;
     64   bool operator==(BitmapGlyphInfo* rhs);
     65 
     66  private:
     67   int32_t glyph_id_;
     68   bool relative_;
     69   int32_t block_offset_;
     70   int32_t start_offset_;
     71   int32_t length_;
     72   int32_t format_;
     73 };
     74 typedef Ptr<BitmapGlyphInfo> BitmapGlyphInfoPtr;
     75 typedef std::map<int32_t, BitmapGlyphInfoPtr> BitmapGlyphInfoMap;
     76 typedef std::vector<BitmapGlyphInfoMap> BitmapLocaList;
     77 
     78 class StartOffsetComparator {
     79  public:
     80   bool operator()(BitmapGlyphInfo* lhs, BitmapGlyphInfo* rhs);
     81 };
     82 
     83 }  // namespace sfntly
     84 
     85 #endif  // SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_GLYPH_INFO_H_
     86