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 SkFontArguments_DEFINED
9#define SkFontArguments_DEFINED
10
11#include "include/core/SkScalar.h"
12#include "include/core/SkTypes.h"
13
14/** Represents a set of actual arguments for a font. */
15struct SkFontArguments {
16 struct VariationPosition {
17 struct Coordinate {
18 SkFourByteTag axis;
19 float value;
20 };
21 const Coordinate* coordinates;
22 int coordinateCount;
23 };
24
25 SkFontArguments() : fCollectionIndex(0), fVariationDesignPosition{nullptr, 0} {}
26
27 /** Specify the index of the desired font.
28 *
29 * Font formats like ttc, dfont, cff, cid, pfr, t42, t1, and fon may actually be indexed
30 * collections of fonts.
31 */
32 SkFontArguments& setCollectionIndex(int collectionIndex) {
33 fCollectionIndex = collectionIndex;
34 return *this;
35 }
36
37 /** Specify a position in the variation design space.
38 *
39 * Any axis not specified will use the default value.
40 * Any specified axis not actually present in the font will be ignored.
41 *
42 * @param position not copied. The value must remain valid for life of SkFontArguments.
43 */
44 SkFontArguments& setVariationDesignPosition(VariationPosition position) {
45 fVariationDesignPosition.coordinates = position.coordinates;
46 fVariationDesignPosition.coordinateCount = position.coordinateCount;
47 return *this;
48 }
49
50 int getCollectionIndex() const {
51 return fCollectionIndex;
52 }
53
54 VariationPosition getVariationDesignPosition() const {
55 return fVariationDesignPosition;
56 }
57private:
58 int fCollectionIndex;
59 VariationPosition fVariationDesignPosition;
60};
61
62#endif
63