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_BITMAP_GLYPH_H_
     18 #define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_BITMAP_GLYPH_H_
     19 
     20 #include <vector>
     21 #include <map>
     22 
     23 #include "sfntly/table/subtable.h"
     24 
     25 namespace sfntly {
     26 
     27 class BitmapGlyph : public SubTable {
     28  public:
     29   struct Offset {
     30     enum {
     31       // header
     32       kVersion = 0,
     33 
     34       kSmallGlyphMetricsLength = 5,
     35       kBigGlyphMetricsLength = 8,
     36       // format 1
     37       kGlyphFormat1_imageData = kSmallGlyphMetricsLength,
     38 
     39       // format 2
     40       kGlyphFormat2_imageData = kSmallGlyphMetricsLength,
     41 
     42       // format 3
     43 
     44       // format 4
     45 
     46       // format 5
     47       kGlyphFormat5_imageData = 0,
     48 
     49       // format 6
     50       kGlyphFormat6_imageData = kBigGlyphMetricsLength,
     51 
     52       // format 7
     53       kGlyphFormat7_imageData = kBigGlyphMetricsLength,
     54 
     55       // format 8
     56       kGlyphFormat8_numComponents = kSmallGlyphMetricsLength + 1,
     57       kGlyphFormat8_componentArray = kGlyphFormat8_numComponents +
     58                                      DataSize::kUSHORT,
     59 
     60       // format 9
     61       kGlyphFormat9_numComponents = kBigGlyphMetricsLength,
     62       kGlyphFormat9_componentArray = kGlyphFormat9_numComponents +
     63                                      DataSize::kUSHORT,
     64 
     65       // ebdtComponent
     66       kEbdtComponentLength = DataSize::kUSHORT + 2 * DataSize::kCHAR,
     67       kEbdtComponent_glyphCode = 0,
     68       kEbdtComponent_xOffset = 2,
     69       kEbdtComponent_yOffset = 3,
     70     };
     71   };
     72 
     73   // TODO(stuartg): builder is not functional at all
     74   // - need to add subclasses for each type of bitmap glyph
     75   class Builder : public SubTable::Builder {
     76    public:
     77     virtual ~Builder();
     78 
     79     virtual CALLER_ATTACH FontDataTable* SubBuildTable(ReadableFontData* data);
     80     virtual void SubDataSet();
     81     virtual int32_t SubDataSizeToSerialize();
     82     virtual bool SubReadyToSerialize();
     83     virtual int32_t SubSerialize(WritableFontData* new_data);
     84 
     85     int32_t format() { return format_; }
     86 
     87     static CALLER_ATTACH Builder* CreateGlyphBuilder(ReadableFontData* data,
     88                                                      int32_t format);
     89 
     90    protected:
     91     Builder(WritableFontData* data, int32_t format);
     92     Builder(ReadableFontData* data, int32_t format);
     93 
     94    private:
     95     int32_t format_;
     96   };
     97 
     98   virtual ~BitmapGlyph();
     99 
    100   static CALLER_ATTACH BitmapGlyph* CreateGlyph(ReadableFontData* data,
    101                                                 int32_t format);
    102   int32_t format() { return format_; }
    103 
    104   // UNIMPLEMENTED: toString()
    105 
    106  protected:
    107   BitmapGlyph(ReadableFontData* data, int32_t format);
    108 
    109  private:
    110   int32_t format_;
    111 };
    112 typedef Ptr<BitmapGlyph> BitmapGlyphPtr;
    113 typedef Ptr<BitmapGlyph::Builder> BitmapGlyphBuilderPtr;
    114 typedef std::map<int32_t, BitmapGlyphBuilderPtr> BitmapGlyphBuilderMap;
    115 typedef std::vector<BitmapGlyphBuilderMap> BitmapGlyphBuilderList;
    116 
    117 }  // namespace sfntly
    118 
    119 #endif  // SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_BITMAP_GLYPH_H_
    120