Line data Source code
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 0 : 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_
|