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