1 /* 2 * Copyright 2017 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkFontAgruments_DEFINED 9 #define SkFontAgruments_DEFINED 10 11 #include "SkScalar.h" 12 #include "SkTypes.h" 13 14 /** Represents a set of actual arguments for a font. */ 15 struct SkFontArguments { 16 struct VariationPosition { 17 struct Coordinate { 18 SkFourByteTag axis; 19 SkScalar value; 20 }; 21 const Coordinate* coordinates; 22 int coordinateCount; 23 }; 24 // deprecated, use VariationCoordinate instead 25 struct Axis { 26 SkFourByteTag fTag; 27 SkScalar fStyleValue; 28 }; 29 SkFontArgumentsSkFontArguments30 SkFontArguments() : fCollectionIndex(0), fVariationDesignPosition{nullptr, 0} {} 31 32 /** Specify the index of the desired font. 33 * 34 * Font formats like ttc, dfont, cff, cid, pfr, t42, t1, and fon may actually be indexed 35 * collections of fonts. 36 */ setCollectionIndexSkFontArguments37 SkFontArguments& setCollectionIndex(int collectionIndex) { 38 fCollectionIndex = collectionIndex; 39 return *this; 40 } 41 42 // deprecated, use setVariationDesignPosition instead. setAxesSkFontArguments43 SkFontArguments& setAxes(const Axis* axes, int axisCount) { 44 fVariationDesignPosition.coordinates = 45 reinterpret_cast<const VariationPosition::Coordinate*>(axes); 46 fVariationDesignPosition.coordinateCount = axisCount; 47 return *this; 48 } 49 50 /** Specify a position in the variation design space. 51 * 52 * Any axis not specified will use the default value. 53 * Any specified axis not actually present in the font will be ignored. 54 * 55 * @param position not copied. The value must remain valid for life of SkFontArguments. 56 */ setVariationDesignPositionSkFontArguments57 SkFontArguments& setVariationDesignPosition(VariationPosition position) { 58 fVariationDesignPosition.coordinates = position.coordinates; 59 fVariationDesignPosition.coordinateCount = position.coordinateCount; 60 return *this; 61 } 62 getCollectionIndexSkFontArguments63 int getCollectionIndex() const { 64 return fCollectionIndex; 65 } 66 // deprecated, use getVariationDesignPosition instead. getAxesSkFontArguments67 const Axis* getAxes(int* axisCount) const { 68 *axisCount = fVariationDesignPosition.coordinateCount; 69 return reinterpret_cast<const Axis*>(fVariationDesignPosition.coordinates); 70 } getVariationDesignPositionSkFontArguments71 VariationPosition getVariationDesignPosition() const { 72 return fVariationDesignPosition; 73 } 74 private: 75 int fCollectionIndex; 76 VariationPosition fVariationDesignPosition; 77 }; 78 79 #endif 80