1333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com/*
2333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com * Copyright 2011 Google Inc. All Rights Reserved.
3333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com *
4333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com * Licensed under the Apache License, Version 2.0 (the "License");
5333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com * you may not use this file except in compliance with the License.
6333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com * You may obtain a copy of the License at
7333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com *
8333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com *      http://www.apache.org/licenses/LICENSE-2.0
9333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com *
10333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com * Unless required by applicable law or agreed to in writing, software
11333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com * distributed under the License is distributed on an "AS IS" BASIS,
12333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com * See the License for the specific language governing permissions and
14333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com * limitations under the License.
15333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com */
16333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
17333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com#include "sfntly/table/bitmap/big_glyph_metrics.h"
18333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
19333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comnamespace sfntly {
20333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com/******************************************************************************
21333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com * BigGlyphMetrics class
22333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com ******************************************************************************/
23333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comBigGlyphMetrics::BigGlyphMetrics(ReadableFontData* data)
24333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    : GlyphMetrics(data) {
25333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
26333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
27333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comBigGlyphMetrics::~BigGlyphMetrics() {
28333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
29333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
30333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::Height() {
31333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return data_->ReadByte(Offset::kHeight);
32333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
33333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
34333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::Width() {
35333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return data_->ReadByte(Offset::kWidth);
36333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
37333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
38333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::HoriBearingX() {
39333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return data_->ReadByte(Offset::kHoriBearingX);
40333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
41333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
42333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::HoriBearingY() {
43333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return data_->ReadByte(Offset::kHoriBearingY);
44333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
45333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
46333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::HoriAdvance() {
47333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return data_->ReadByte(Offset::kHoriAdvance);
48333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
49333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
50333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::VertBearingX() {
51333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return data_->ReadByte(Offset::kVertBearingX);
52333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
53333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
54333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::VertBearingY() {
55333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return data_->ReadByte(Offset::kVertBearingY);
56333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
57333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
58333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::VertAdvance() {
59333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return data_->ReadByte(Offset::kVertAdvance);
60333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
61333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
62333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com/******************************************************************************
63333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com * BigGlyphMetrics::Builder class
64333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com ******************************************************************************/
65333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comBigGlyphMetrics::Builder::Builder(WritableFontData* data)
66333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    : GlyphMetrics::Builder(data) {
67333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
68333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
69333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comBigGlyphMetrics::Builder::Builder(ReadableFontData* data)
70333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    : GlyphMetrics::Builder(data) {
71333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
72333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
73333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comBigGlyphMetrics::Builder::~Builder() {
74333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
75333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
76333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::Builder::Height() {
77333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return InternalReadData()->ReadByte(Offset::kHeight);
78333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
79333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
80333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comvoid BigGlyphMetrics::Builder::SetHeight(byte_t height) {
81333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  InternalWriteData()->WriteByte(Offset::kHeight, height);
82333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
83333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
84333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::Builder::Width() {
85333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return InternalReadData()->ReadByte(Offset::kWidth);
86333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
87333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
88333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comvoid BigGlyphMetrics::Builder::SetWidth(byte_t width) {
89333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  InternalWriteData()->WriteByte(Offset::kWidth, width);
90333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
91333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
92333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::Builder::HoriBearingX() {
93333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return InternalReadData()->ReadByte(Offset::kHoriBearingX);
94333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
95333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
96333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comvoid BigGlyphMetrics::Builder::SetHoriBearingX(byte_t bearing) {
97333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  InternalWriteData()->WriteByte(Offset::kHoriBearingX, bearing);
98333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
99333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
100333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::Builder::HoriBearingY() {
101333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return InternalReadData()->ReadByte(Offset::kHoriBearingY);
102333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
103333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
104333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comvoid BigGlyphMetrics::Builder::SetHoriBearingY(byte_t bearing) {
105333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  InternalWriteData()->WriteByte(Offset::kHoriBearingY, bearing);
106333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
107333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
108333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::Builder::HoriAdvance() {
109333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return InternalReadData()->ReadByte(Offset::kHoriAdvance);
110333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
111333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
112333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comvoid BigGlyphMetrics::Builder::SetHoriAdvance(byte_t advance) {
113333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  InternalWriteData()->WriteByte(Offset::kHoriAdvance, advance);
114333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
115333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
116333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::Builder::VertBearingX() {
117333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return InternalReadData()->ReadByte(Offset::kVertBearingX);
118333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
119333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
120333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comvoid BigGlyphMetrics::Builder::SetVertBearingX(byte_t bearing) {
121333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  InternalWriteData()->WriteByte(Offset::kVertBearingX, bearing);
122333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
123333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
124333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::Builder::VertBearingY() {
125333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return InternalReadData()->ReadByte(Offset::kVertBearingY);
126333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
127333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
128333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comvoid BigGlyphMetrics::Builder::SetVertBearingY(byte_t bearing) {
129333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  InternalWriteData()->WriteByte(Offset::kVertBearingY, bearing);
130333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
131333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
132333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::Builder::VertAdvance() {
133333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return InternalReadData()->ReadByte(Offset::kVertAdvance);
134333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
135333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
136333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comvoid BigGlyphMetrics::Builder::SetVertAdvance(byte_t advance) {
137333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  InternalWriteData()->WriteByte(Offset::kVertAdvance, advance);
138333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
139333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
140333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comCALLER_ATTACH FontDataTable*
141333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    BigGlyphMetrics::Builder::SubBuildTable(ReadableFontData* data) {
142333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  BigGlyphMetricsPtr output = new BigGlyphMetrics(data);
143333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return output.Detach();
144333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
145333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
146333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comvoid BigGlyphMetrics::Builder::SubDataSet() {
147333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  // NOP.
148333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
149333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
150333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::Builder::SubDataSizeToSerialize() {
151333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return 0;
152333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
153333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
154333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.combool BigGlyphMetrics::Builder::SubReadyToSerialize() {
155333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return false;
156333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
157333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
158333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comint32_t BigGlyphMetrics::Builder::SubSerialize(WritableFontData* new_data) {
159333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  return Data()->CopyTo(new_data);
160333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}
161333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
16253847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com// static
16353847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.comCALLER_ATTACH
16453847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.comBigGlyphMetrics::Builder* BigGlyphMetrics::Builder::CreateBuilder() {
16553847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com  WritableFontDataPtr data;
16653847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com  data.Attach(WritableFontData::CreateWritableFontData(Offset::kMetricsLength));
16753847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com  BigGlyphMetricsBuilderPtr output = new BigGlyphMetrics::Builder(data);
16853847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com  return output.Detach();
16953847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com}
17053847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com
171333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}  // namespace sfntly
172