SkFontArguments.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. #ifndef SkFontArguments_DEFINED
  8. #define SkFontArguments_DEFINED
  9. #include "include/core/SkScalar.h"
  10. #include "include/core/SkTypes.h"
  11. /** Represents a set of actual arguments for a font. */
  12. struct SkFontArguments {
  13. struct VariationPosition {
  14. struct Coordinate {
  15. SkFourByteTag axis;
  16. float value;
  17. };
  18. const Coordinate* coordinates;
  19. int coordinateCount;
  20. };
  21. // deprecated, use VariationPosition::Coordinate instead
  22. struct Axis {
  23. SkFourByteTag fTag;
  24. float fStyleValue;
  25. };
  26. SkFontArguments() : fCollectionIndex(0), fVariationDesignPosition{nullptr, 0} {}
  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. // deprecated, use setVariationDesignPosition instead.
  37. SkFontArguments& setAxes(const Axis* axes, int axisCount) {
  38. fVariationDesignPosition.coordinates =
  39. reinterpret_cast<const VariationPosition::Coordinate*>(axes);
  40. fVariationDesignPosition.coordinateCount = axisCount;
  41. return *this;
  42. }
  43. /** Specify a position in the variation design space.
  44. *
  45. * Any axis not specified will use the default value.
  46. * Any specified axis not actually present in the font will be ignored.
  47. *
  48. * @param position not copied. The value must remain valid for life of SkFontArguments.
  49. */
  50. SkFontArguments& setVariationDesignPosition(VariationPosition position) {
  51. fVariationDesignPosition.coordinates = position.coordinates;
  52. fVariationDesignPosition.coordinateCount = position.coordinateCount;
  53. return *this;
  54. }
  55. int getCollectionIndex() const {
  56. return fCollectionIndex;
  57. }
  58. // deprecated, use getVariationDesignPosition instead.
  59. const Axis* getAxes(int* axisCount) const {
  60. *axisCount = fVariationDesignPosition.coordinateCount;
  61. return reinterpret_cast<const Axis*>(fVariationDesignPosition.coordinates);
  62. }
  63. VariationPosition getVariationDesignPosition() const {
  64. return fVariationDesignPosition;
  65. }
  66. private:
  67. int fCollectionIndex;
  68. VariationPosition fVariationDesignPosition;
  69. };
  70. #endif