1 // Copyright (c) 2018 The OTS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef OTS_FVAR_H_ 6 #define OTS_FVAR_H_ 7 8 #include <vector> 9 10 #include "ots.h" 11 12 namespace ots { 13 14 // ----------------------------------------------------------------------------- 15 // OpenTypeFVAR Interface 16 // ----------------------------------------------------------------------------- 17 18 class OpenTypeFVAR : public Table { 19 public: OpenTypeFVAR(Font * font,uint32_t tag)20 explicit OpenTypeFVAR(Font* font, uint32_t tag) 21 : Table(font, tag, tag) { } 22 23 bool Parse(const uint8_t* data, size_t length); 24 bool Serialize(OTSStream* out); 25 AxisCount()26 uint16_t AxisCount() const { return axisCount; } 27 28 private: 29 uint16_t majorVersion; 30 uint16_t minorVersion; 31 uint16_t axesArrayOffset; 32 uint16_t reserved; 33 uint16_t axisCount; 34 uint16_t axisSize; 35 uint16_t instanceCount; 36 uint16_t instanceSize; 37 38 typedef int32_t Fixed; /* 16.16 fixed-point value */ 39 40 struct VariationAxisRecord { 41 uint32_t axisTag; 42 Fixed minValue; 43 Fixed defaultValue; 44 Fixed maxValue; 45 uint16_t flags; 46 uint16_t axisNameID; 47 }; 48 std::vector<VariationAxisRecord> axes; 49 50 struct InstanceRecord { 51 uint16_t subfamilyNameID; 52 uint16_t flags; 53 std::vector<Fixed> coordinates; 54 uint16_t postScriptNameID; // optional 55 }; 56 std::vector<InstanceRecord> instances; 57 58 bool instancesHavePostScriptNameID; 59 }; 60 61 } // namespace ots 62 63 #endif // OTS_FVAR_H_ 64