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#ifndef SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_BIG_GLYPH_METRICS_H_
18333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com#define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_BIG_GLYPH_METRICS_H_
19333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
20333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com#include "sfntly/table/bitmap/glyph_metrics.h"
21333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
22333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comnamespace sfntly {
23333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
24333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comclass BigGlyphMetrics : public GlyphMetrics,
25333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com                        public RefCounted<BigGlyphMetrics> {
26333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com public:
27333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  struct Offset {
28333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    enum {
29333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com      kMetricsLength = 8,
30333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
31333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com      kHeight = 0,
32333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com      kWidth = 1,
33333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com      kHoriBearingX = 2,
34333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com      kHoriBearingY = 3,
35333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com      kHoriAdvance = 4,
36333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com      kVertBearingX = 5,
37333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com      kVertBearingY = 6,
38333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com      kVertAdvance = 7,
39333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    };
40333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  };
41333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
42333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  class Builder : public GlyphMetrics::Builder,
43333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com                  public RefCounted<Builder> {
44333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com   public:
45333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    // Constructor scope altered to public because C++ does not allow base
46333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    // class to instantiate derived class with protected constructors.
47333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    explicit Builder(WritableFontData* data);
48333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    explicit Builder(ReadableFontData* data);
4953847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com
50333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    virtual ~Builder();
51333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
52333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    int32_t Height();
53333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    void SetHeight(byte_t height);
54333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    int32_t Width();
55333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    void SetWidth(byte_t width);
56333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    int32_t HoriBearingX();
57333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    void SetHoriBearingX(byte_t bearing);
58333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    int32_t HoriBearingY();
59333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    void SetHoriBearingY(byte_t bearing);
60333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    int32_t HoriAdvance();
61333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    void SetHoriAdvance(byte_t advance);
62333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    int32_t VertBearingX();
63333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    void SetVertBearingX(byte_t bearing);
64333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    int32_t VertBearingY();
65333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    void SetVertBearingY(byte_t bearing);
66333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    int32_t VertAdvance();
67333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    void SetVertAdvance(byte_t advance);
68333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
69333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    virtual CALLER_ATTACH FontDataTable* SubBuildTable(ReadableFontData* data);
70333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    virtual void SubDataSet();
71333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    virtual int32_t SubDataSizeToSerialize();
72333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    virtual bool SubReadyToSerialize();
73333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com    virtual int32_t SubSerialize(WritableFontData* new_data);
7453847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com
7553847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com    // Static instantiation function.
7653847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com    static CALLER_ATTACH Builder* CreateBuilder();
77333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  };
78333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
79333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  explicit BigGlyphMetrics(ReadableFontData* data);
80333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  virtual ~BigGlyphMetrics();
81333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
82333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  int32_t Height();
83333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  int32_t Width();
84333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  int32_t HoriBearingX();
85333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  int32_t HoriBearingY();
86333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  int32_t HoriAdvance();
87333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  int32_t VertBearingX();
88333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  int32_t VertBearingY();
89333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com  int32_t VertAdvance();
90333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com};
91333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comtypedef Ptr<BigGlyphMetrics> BigGlyphMetricsPtr;
92333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comtypedef Ptr<BigGlyphMetrics::Builder> BigGlyphMetricsBuilderPtr;
93333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
94333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com}  // namespace sfntly
95333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com
96333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com#endif  // SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_BIG_GLYPH_METRICS_H_
97