Home | History | Annotate | Download | only in core
      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 
     30     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      */
     37     SkFontArguments& setCollectionIndex(int collectionIndex) {
     38         fCollectionIndex = collectionIndex;
     39         return *this;
     40     }
     41 
     42     // deprecated, use setVariationDesignPosition instead.
     43     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      */
     57     SkFontArguments& setVariationDesignPosition(VariationPosition position) {
     58         fVariationDesignPosition.coordinates = position.coordinates;
     59         fVariationDesignPosition.coordinateCount = position.coordinateCount;
     60         return *this;
     61     }
     62 
     63     int getCollectionIndex() const {
     64         return fCollectionIndex;
     65     }
     66     // deprecated, use getVariationDesignPosition instead.
     67     const Axis* getAxes(int* axisCount) const {
     68         *axisCount = fVariationDesignPosition.coordinateCount;
     69         return reinterpret_cast<const Axis*>(fVariationDesignPosition.coordinates);
     70     }
     71     VariationPosition getVariationDesignPosition() const {
     72         return fVariationDesignPosition;
     73     }
     74 private:
     75     int fCollectionIndex;
     76     VariationPosition fVariationDesignPosition;
     77 };
     78 
     79 #endif
     80