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 #include "sfntly/table/core/horizontal_header_table.h" 18 19 namespace sfntly { 20 /****************************************************************************** 21 * HorizontalHeaderTable class 22 ******************************************************************************/ 23 HorizontalHeaderTable:: ~HorizontalHeaderTable() {} 24 25 int32_t HorizontalHeaderTable::TableVersion() { 26 return data_->ReadFixed(Offset::kVersion); 27 } 28 29 int32_t HorizontalHeaderTable::Ascender() { 30 return data_->ReadShort(Offset::kAscender); 31 } 32 33 int32_t HorizontalHeaderTable::Descender() { 34 return data_->ReadShort(Offset::kDescender); 35 } 36 37 int32_t HorizontalHeaderTable::LineGap() { 38 return data_->ReadShort(Offset::kLineGap); 39 } 40 41 int32_t HorizontalHeaderTable::AdvanceWidthMax() { 42 return data_->ReadUShort(Offset::kAdvanceWidthMax); 43 } 44 45 int32_t HorizontalHeaderTable::MinLeftSideBearing() { 46 return data_->ReadShort(Offset::kMinLeftSideBearing); 47 } 48 49 int32_t HorizontalHeaderTable::MinRightSideBearing() { 50 return data_->ReadShort(Offset::kMinRightSideBearing); 51 } 52 53 int32_t HorizontalHeaderTable::XMaxExtent() { 54 return data_->ReadShort(Offset::kXMaxExtent); 55 } 56 57 int32_t HorizontalHeaderTable::CaretSlopeRise() { 58 return data_->ReadShort(Offset::kCaretSlopeRise); 59 } 60 61 int32_t HorizontalHeaderTable::CaretSlopeRun() { 62 return data_->ReadShort(Offset::kCaretSlopeRun); 63 } 64 65 int32_t HorizontalHeaderTable::CaretOffset() { 66 return data_->ReadShort(Offset::kCaretOffset); 67 } 68 69 int32_t HorizontalHeaderTable::MetricDataFormat() { 70 return data_->ReadShort(Offset::kMetricDataFormat); 71 } 72 73 int32_t HorizontalHeaderTable::NumberOfHMetrics() { 74 return data_->ReadUShort(Offset::kNumberOfHMetrics); 75 } 76 77 HorizontalHeaderTable:: HorizontalHeaderTable(Header* header, 78 ReadableFontData* data) 79 : Table(header, data) { 80 } 81 82 /****************************************************************************** 83 * HorizontalHeaderTable::Builder class 84 ******************************************************************************/ 85 HorizontalHeaderTable::Builder::Builder(Header* header, WritableFontData* data) 86 : TableBasedTableBuilder(header, data) { 87 } 88 89 HorizontalHeaderTable::Builder::Builder(Header* header, ReadableFontData* data) 90 : TableBasedTableBuilder(header, data) { 91 } 92 93 HorizontalHeaderTable::Builder::~Builder() {} 94 95 CALLER_ATTACH FontDataTable* 96 HorizontalHeaderTable::Builder::SubBuildTable(ReadableFontData* data) { 97 FontDataTablePtr table = new HorizontalHeaderTable(header(), data); 98 return table.Detach(); 99 } 100 101 CALLER_ATTACH HorizontalHeaderTable::Builder* 102 HorizontalHeaderTable::Builder::CreateBuilder(Header* header, 103 WritableFontData* data) { 104 Ptr<HorizontalHeaderTable::Builder> builder; 105 builder = new HorizontalHeaderTable::Builder(header, data); 106 return builder.Detach(); 107 } 108 109 int32_t HorizontalHeaderTable::Builder::TableVersion() { 110 return InternalReadData()->ReadFixed(Offset::kVersion); 111 } 112 113 void HorizontalHeaderTable::Builder::SetTableVersion(int32_t version) { 114 InternalWriteData()->WriteFixed(Offset::kVersion, version); 115 } 116 117 int32_t HorizontalHeaderTable::Builder::Ascender() { 118 return InternalReadData()->ReadShort(Offset::kAscender); 119 } 120 121 void HorizontalHeaderTable::Builder::SetAscender(int32_t ascender) { 122 InternalWriteData()->WriteShort(Offset::kVersion, ascender); 123 } 124 125 int32_t HorizontalHeaderTable::Builder::Descender() { 126 return InternalReadData()->ReadShort(Offset::kDescender); 127 } 128 129 void HorizontalHeaderTable::Builder::SetDescender(int32_t descender) { 130 InternalWriteData()->WriteShort(Offset::kDescender, descender); 131 } 132 133 int32_t HorizontalHeaderTable::Builder::LineGap() { 134 return InternalReadData()->ReadShort(Offset::kLineGap); 135 } 136 137 void HorizontalHeaderTable::Builder::SetLineGap(int32_t line_gap) { 138 InternalWriteData()->WriteShort(Offset::kLineGap, line_gap); 139 } 140 141 int32_t HorizontalHeaderTable::Builder::AdvanceWidthMax() { 142 return InternalReadData()->ReadUShort(Offset::kAdvanceWidthMax); 143 } 144 145 void HorizontalHeaderTable::Builder::SetAdvanceWidthMax(int32_t value) { 146 InternalWriteData()->WriteUShort(Offset::kAdvanceWidthMax, value); 147 } 148 149 int32_t HorizontalHeaderTable::Builder::MinLeftSideBearing() { 150 return InternalReadData()->ReadShort(Offset::kMinLeftSideBearing); 151 } 152 153 void HorizontalHeaderTable::Builder::SetMinLeftSideBearing(int32_t value) { 154 InternalWriteData()->WriteShort(Offset::kMinLeftSideBearing, value); 155 } 156 157 int32_t HorizontalHeaderTable::Builder::MinRightSideBearing() { 158 return InternalReadData()->ReadShort(Offset::kMinRightSideBearing); 159 } 160 161 void HorizontalHeaderTable::Builder::SetMinRightSideBearing(int32_t value) { 162 InternalWriteData()->WriteShort(Offset::kMinRightSideBearing, value); 163 } 164 165 int32_t HorizontalHeaderTable::Builder::XMaxExtent() { 166 return InternalReadData()->ReadShort(Offset::kXMaxExtent); 167 } 168 169 void HorizontalHeaderTable::Builder::SetXMaxExtent(int32_t value) { 170 InternalWriteData()->WriteShort(Offset::kXMaxExtent, value); 171 } 172 173 int32_t HorizontalHeaderTable::Builder::CaretSlopeRise() { 174 return InternalReadData()->ReadUShort(Offset::kCaretSlopeRise); 175 } 176 177 void HorizontalHeaderTable::Builder::SetCaretSlopeRise(int32_t value) { 178 InternalWriteData()->WriteUShort(Offset::kCaretSlopeRise, value); 179 } 180 181 int32_t HorizontalHeaderTable::Builder::CaretSlopeRun() { 182 return InternalReadData()->ReadUShort(Offset::kCaretSlopeRun); 183 } 184 185 void HorizontalHeaderTable::Builder::SetCaretSlopeRun(int32_t value) { 186 InternalWriteData()->WriteUShort(Offset::kCaretSlopeRun, value); 187 } 188 189 int32_t HorizontalHeaderTable::Builder::CaretOffset() { 190 return InternalReadData()->ReadUShort(Offset::kCaretOffset); 191 } 192 193 void HorizontalHeaderTable::Builder::SetCaretOffset(int32_t value) { 194 InternalWriteData()->WriteUShort(Offset::kCaretOffset, value); 195 } 196 197 int32_t HorizontalHeaderTable::Builder::MetricDataFormat() { 198 return InternalReadData()->ReadUShort(Offset::kMetricDataFormat); 199 } 200 201 void HorizontalHeaderTable::Builder::SetMetricDataFormat(int32_t value) { 202 InternalWriteData()->WriteUShort(Offset::kMetricDataFormat, value); 203 } 204 205 int32_t HorizontalHeaderTable::Builder::NumberOfHMetrics() { 206 return InternalReadData()->ReadUShort(Offset::kNumberOfHMetrics); 207 } 208 209 void HorizontalHeaderTable::Builder::SetNumberOfHMetrics(int32_t value) { 210 InternalWriteData()->WriteUShort(Offset::kNumberOfHMetrics, value); 211 } 212 213 } // namespace sfntly 214