| /* |
| * Copyright 2011 Google Inc. All Rights Reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBSC_TABLE_H_ |
| #define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBSC_TABLE_H_ |
| |
| #include "sfntly/table/bitmap/eblc_table.h" |
| |
| namespace sfntly { |
| |
| class EbscTable : public Table, |
| public RefCounted<EbscTable> { |
| public: |
| struct Offset { |
| enum { |
| // header |
| kVersion = 0, |
| kNumSizes = DataSize::kFixed, |
| kHeaderLength = kNumSizes + DataSize::kULONG, |
| kBitmapScaleTableStart = kHeaderLength, |
| |
| // bitmapScaleTable |
| kBitmapScaleTable_hori = 0, |
| kBitmapScaleTable_vert = EblcTable::Offset::kSbitLineMetricsLength, |
| kBitmapScaleTable_ppemX = kBitmapScaleTable_vert + |
| EblcTable::Offset::kSbitLineMetricsLength, |
| kBitmapScaleTable_ppemY = kBitmapScaleTable_ppemX + DataSize::kBYTE, |
| kBitmapScaleTable_substitutePpemX = kBitmapScaleTable_ppemY + |
| DataSize::kBYTE, |
| kBitmapScaleTable_substitutePpemY = kBitmapScaleTable_substitutePpemX + |
| DataSize::kBYTE, |
| kBitmapScaleTableLength = kBitmapScaleTable_substitutePpemY + |
| DataSize::kBYTE, |
| }; |
| }; |
| |
| class BitmapScaleTable : public SubTable, |
| public RefCounted<BitmapScaleTable> { |
| public: |
| virtual ~BitmapScaleTable(); |
| int32_t PpemX(); |
| int32_t PpemY(); |
| int32_t SubstitutePpemX(); |
| int32_t SubstitutePpemY(); |
| |
| protected: |
| // Note: caller to do data->Slice(offset, Offset::kBitmapScaleTableLength) |
| explicit BitmapScaleTable(ReadableFontData* data); |
| }; |
| |
| // TODO(stuartg): currently the builder just builds from initial data |
| // - need to make fully working but few if any examples to test with |
| class Builder : public Table::Builder, |
| public RefCounted<Builder> { |
| public: |
| virtual ~Builder(); |
| |
| static CALLER_ATTACH Builder* CreateBuilder(Header* header, |
| WritableFontData* data); |
| |
| protected: |
| Builder(Header* header, WritableFontData* data); |
| Builder(Header* header, ReadableFontData* data); |
| |
| virtual CALLER_ATTACH FontDataTable* SubBuildTable(ReadableFontData* data); |
| virtual void SubDataSet(); |
| virtual int32_t SubDataSizeToSerialize(); |
| virtual bool SubReadyToSerialize(); |
| virtual int32_t SubSerialize(WritableFontData* new_data); |
| }; |
| |
| virtual ~EbscTable(); |
| |
| int32_t Version(); |
| int32_t NumSizes(); |
| // Note: renamed from bitmapScaleTable |
| CALLER_ATTACH BitmapScaleTable* GetBitmapScaleTable(int32_t index); |
| |
| private: |
| EbscTable(Header* header, ReadableFontData* data); |
| friend class Builder; |
| }; |
| typedef Ptr<EbscTable> EbscTablePtr; |
| typedef Ptr<EbscTable::Builder> EbscTableBuilderPtr; |
| |
| } // namespace sfntly |
| |
| #endif // SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBSC_TABLE_H_ |