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