diff --git a/include/c/sk_typeface.h b/include/c/sk_typeface.h index 4d3bf706c20f..e350129b8c34 100644 --- a/include/c/sk_typeface.h +++ b/include/c/sk_typeface.h @@ -55,9 +55,14 @@ typedef struct { bool isHidden; } sk_fontarguments_variation_axis_t; +typedef struct { + uint16_t index; + sk_color_t color; +} sk_fontarguments_palette_override_t; + SK_C_API int sk_typeface_get_variation_design_position(const sk_typeface_t* typeface, sk_fontarguments_variation_position_coordinate_t* coordinates, int coordinateCount); SK_C_API int sk_typeface_get_variation_design_parameters(const sk_typeface_t* typeface, sk_fontarguments_variation_axis_t* parameters, int parameterCount); -SK_C_API sk_typeface_t* sk_typeface_clone_with_arguments(const sk_typeface_t* typeface, const sk_fontarguments_variation_position_coordinate_t* coordinates, int coordinateCount, int collectionIndex); +SK_C_API sk_typeface_t* sk_typeface_clone_with_arguments(const sk_typeface_t* typeface, const sk_fontarguments_variation_position_coordinate_t* coordinates, int coordinateCount, int collectionIndex, int paletteIndex, const sk_fontarguments_palette_override_t* paletteOverrides, int paletteOverrideCount); // font manager diff --git a/src/c/sk_structs.cpp b/src/c/sk_structs.cpp index a4cfb7966852..78de8f5e6330 100644 --- a/src/c/sk_structs.cpp +++ b/src/c/sk_structs.cpp @@ -75,6 +75,7 @@ static_assert (sizeof (sk_runtimeeffect_uniform_t) == sizeof (SkRuntimeEffect::U static_assert (sizeof (sk_runtimeeffect_child_t) == sizeof (SkRuntimeEffect::Child), ASSERT_MSG(SkRuntimeEffect::Child, sk_runtimeeffect_child_t)); static_assert (sizeof (sk_matrix44_t) == sizeof (SkM44), ASSERT_MSG(SkM44, sk_matrix44_t)); static_assert (sizeof (sk_fontarguments_variation_position_coordinate_t) == sizeof (SkFontArguments::VariationPosition::Coordinate), ASSERT_MSG(SkFontArguments::VariationPosition::Coordinate, sk_fontarguments_variation_position_coordinate_t)); +static_assert (sizeof (sk_fontarguments_palette_override_t) == sizeof (SkFontArguments::Palette::Override), ASSERT_MSG(SkFontArguments::Palette::Override, sk_fontarguments_palette_override_t)); static_assert (sizeof (skottie_animation_builder_stats_t) == sizeof (skottie::Animation::Builder::Stats), ASSERT_MSG(skottie::Animation::Builder::Stats, skottie_animation_builder_stats_t)); diff --git a/src/c/sk_typeface.cpp b/src/c/sk_typeface.cpp index af1046652d49..cd17e4bbe963 100644 --- a/src/c/sk_typeface.cpp +++ b/src/c/sk_typeface.cpp @@ -152,8 +152,8 @@ int sk_typeface_get_variation_design_parameters(const sk_typeface_t* typeface, s return result; } -sk_typeface_t* sk_typeface_clone_with_arguments(const sk_typeface_t* typeface, const sk_fontarguments_variation_position_coordinate_t* coordinates, int coordinateCount, int collectionIndex) { - auto args = AsSkFontArguments(coordinates, coordinateCount, collectionIndex); +sk_typeface_t* sk_typeface_clone_with_arguments(const sk_typeface_t* typeface, const sk_fontarguments_variation_position_coordinate_t* coordinates, int coordinateCount, int collectionIndex, int paletteIndex, const sk_fontarguments_palette_override_t* paletteOverrides, int paletteOverrideCount) { + auto args = AsSkFontArguments(coordinates, coordinateCount, collectionIndex, paletteIndex, paletteOverrides, paletteOverrideCount); return ToTypeface(AsTypeface(typeface)->makeClone(args).release()); } diff --git a/src/c/sk_types_priv.h b/src/c/sk_types_priv.h index b2cd61abf1df..d7cae93de558 100644 --- a/src/c/sk_types_priv.h +++ b/src/c/sk_types_priv.h @@ -386,15 +386,17 @@ DEF_CLASS_MAP_WITH_NS(skresources, ExternalTrackAsset, skresources_external_trac #include "include/core/SkFontParameters.h" DEF_MAP(SkFontArguments::VariationPosition::Coordinate, sk_fontarguments_variation_position_coordinate_t, VariationPositionCoordinate) +DEF_MAP(SkFontArguments::Palette::Override, sk_fontarguments_palette_override_t, PaletteOverride) static inline sk_fontarguments_variation_axis_t ToVariationAxis(const SkFontParameters::Variation::Axis& axis) { return { axis.tag, axis.min, axis.def, axis.max, axis.isHidden() }; } -static inline SkFontArguments AsSkFontArguments(const sk_fontarguments_variation_position_coordinate_t* coordinates, int coordinateCount, int collectionIndex) { +static inline SkFontArguments AsSkFontArguments(const sk_fontarguments_variation_position_coordinate_t* coordinates, int coordinateCount, int collectionIndex, int paletteIndex, const sk_fontarguments_palette_override_t* paletteOverrides, int paletteOverrideCount) { SkFontArguments args; args.setCollectionIndex(collectionIndex); args.setVariationDesignPosition({AsVariationPositionCoordinate(coordinates), coordinateCount}); + args.setPalette({paletteIndex, AsPaletteOverride(paletteOverrides), paletteOverrideCount}); return args; }