xref: /aosp_15_r20/external/skia/modules/skparagraph/src/FontArguments.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker // Copyright 2019 Google LLC.
2*c8dee2aaSAndroid Build Coastguard Worker 
3*c8dee2aaSAndroid Build Coastguard Worker #include "modules/skparagraph/include/FontArguments.h"
4*c8dee2aaSAndroid Build Coastguard Worker 
operator ==(const SkFontArguments::VariationPosition::Coordinate & a,const SkFontArguments::VariationPosition::Coordinate & b)5*c8dee2aaSAndroid Build Coastguard Worker static bool operator==(const SkFontArguments::VariationPosition::Coordinate& a,
6*c8dee2aaSAndroid Build Coastguard Worker                        const SkFontArguments::VariationPosition::Coordinate& b) {
7*c8dee2aaSAndroid Build Coastguard Worker    return a.axis == b.axis && a.value == b.value;
8*c8dee2aaSAndroid Build Coastguard Worker }
9*c8dee2aaSAndroid Build Coastguard Worker 
operator ==(const SkFontArguments::Palette::Override & a,const SkFontArguments::Palette::Override & b)10*c8dee2aaSAndroid Build Coastguard Worker static bool operator==(const SkFontArguments::Palette::Override& a,
11*c8dee2aaSAndroid Build Coastguard Worker                        const SkFontArguments::Palette::Override& b) {
12*c8dee2aaSAndroid Build Coastguard Worker    return a.index == b.index && a.color == b.color;
13*c8dee2aaSAndroid Build Coastguard Worker }
14*c8dee2aaSAndroid Build Coastguard Worker 
15*c8dee2aaSAndroid Build Coastguard Worker namespace std {
16*c8dee2aaSAndroid Build Coastguard Worker 
operator ()(const skia::textlayout::FontArguments & args) const17*c8dee2aaSAndroid Build Coastguard Worker size_t hash<skia::textlayout::FontArguments>::operator()(const skia::textlayout::FontArguments& args) const {
18*c8dee2aaSAndroid Build Coastguard Worker     size_t hash = 0;
19*c8dee2aaSAndroid Build Coastguard Worker     hash ^= std::hash<int>()(args.fCollectionIndex);
20*c8dee2aaSAndroid Build Coastguard Worker     for (const auto& coord : args.fCoordinates) {
21*c8dee2aaSAndroid Build Coastguard Worker         hash ^= std::hash<SkFourByteTag>()(coord.axis);
22*c8dee2aaSAndroid Build Coastguard Worker         hash ^= std::hash<float>()(coord.value);
23*c8dee2aaSAndroid Build Coastguard Worker     }
24*c8dee2aaSAndroid Build Coastguard Worker     hash ^= std::hash<int>()(args.fPaletteIndex);
25*c8dee2aaSAndroid Build Coastguard Worker     for (const auto& override : args.fPaletteOverrides) {
26*c8dee2aaSAndroid Build Coastguard Worker         hash ^= std::hash<int>()(override.index);
27*c8dee2aaSAndroid Build Coastguard Worker         hash ^= std::hash<SkColor>()(override.color);
28*c8dee2aaSAndroid Build Coastguard Worker     }
29*c8dee2aaSAndroid Build Coastguard Worker     return hash;
30*c8dee2aaSAndroid Build Coastguard Worker }
31*c8dee2aaSAndroid Build Coastguard Worker 
32*c8dee2aaSAndroid Build Coastguard Worker }  // namespace std
33*c8dee2aaSAndroid Build Coastguard Worker 
34*c8dee2aaSAndroid Build Coastguard Worker namespace skia {
35*c8dee2aaSAndroid Build Coastguard Worker namespace textlayout {
36*c8dee2aaSAndroid Build Coastguard Worker 
FontArguments(const SkFontArguments & args)37*c8dee2aaSAndroid Build Coastguard Worker FontArguments::FontArguments(const SkFontArguments& args)
38*c8dee2aaSAndroid Build Coastguard Worker         : fCollectionIndex(args.getCollectionIndex()),
39*c8dee2aaSAndroid Build Coastguard Worker           fCoordinates(args.getVariationDesignPosition().coordinates,
40*c8dee2aaSAndroid Build Coastguard Worker                        args.getVariationDesignPosition().coordinates +
41*c8dee2aaSAndroid Build Coastguard Worker                        args.getVariationDesignPosition().coordinateCount),
42*c8dee2aaSAndroid Build Coastguard Worker           fPaletteIndex(args.getPalette().index),
43*c8dee2aaSAndroid Build Coastguard Worker           fPaletteOverrides(args.getPalette().overrides,
44*c8dee2aaSAndroid Build Coastguard Worker                             args.getPalette().overrides +
45*c8dee2aaSAndroid Build Coastguard Worker                             args.getPalette().overrideCount) {}
46*c8dee2aaSAndroid Build Coastguard Worker 
operator ==(const FontArguments & a,const FontArguments & b)47*c8dee2aaSAndroid Build Coastguard Worker bool operator==(const FontArguments& a, const FontArguments& b) {
48*c8dee2aaSAndroid Build Coastguard Worker     return a.fCollectionIndex == b.fCollectionIndex &&
49*c8dee2aaSAndroid Build Coastguard Worker            a.fCoordinates == b.fCoordinates &&
50*c8dee2aaSAndroid Build Coastguard Worker            a.fPaletteIndex == b.fPaletteIndex &&
51*c8dee2aaSAndroid Build Coastguard Worker            a.fPaletteOverrides == b.fPaletteOverrides;
52*c8dee2aaSAndroid Build Coastguard Worker }
53*c8dee2aaSAndroid Build Coastguard Worker 
operator !=(const skia::textlayout::FontArguments & a,const skia::textlayout::FontArguments & b)54*c8dee2aaSAndroid Build Coastguard Worker bool operator!=(const skia::textlayout::FontArguments& a, const skia::textlayout::FontArguments& b) {
55*c8dee2aaSAndroid Build Coastguard Worker     return !(a == b);
56*c8dee2aaSAndroid Build Coastguard Worker }
57*c8dee2aaSAndroid Build Coastguard Worker 
CloneTypeface(const sk_sp<SkTypeface> & typeface) const58*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> FontArguments::CloneTypeface(const sk_sp<SkTypeface>& typeface) const {
59*c8dee2aaSAndroid Build Coastguard Worker     SkFontArguments::VariationPosition position{
60*c8dee2aaSAndroid Build Coastguard Worker         fCoordinates.data(),
61*c8dee2aaSAndroid Build Coastguard Worker         static_cast<int>(fCoordinates.size())
62*c8dee2aaSAndroid Build Coastguard Worker     };
63*c8dee2aaSAndroid Build Coastguard Worker 
64*c8dee2aaSAndroid Build Coastguard Worker     SkFontArguments::Palette palette{
65*c8dee2aaSAndroid Build Coastguard Worker         fPaletteIndex,
66*c8dee2aaSAndroid Build Coastguard Worker         fPaletteOverrides.data(),
67*c8dee2aaSAndroid Build Coastguard Worker         static_cast<int>(fPaletteOverrides.size())
68*c8dee2aaSAndroid Build Coastguard Worker     };
69*c8dee2aaSAndroid Build Coastguard Worker 
70*c8dee2aaSAndroid Build Coastguard Worker     SkFontArguments args;
71*c8dee2aaSAndroid Build Coastguard Worker     args.setCollectionIndex(fCollectionIndex);
72*c8dee2aaSAndroid Build Coastguard Worker     args.setVariationDesignPosition(position);
73*c8dee2aaSAndroid Build Coastguard Worker     args.setPalette(palette);
74*c8dee2aaSAndroid Build Coastguard Worker 
75*c8dee2aaSAndroid Build Coastguard Worker     return typeface->makeClone(args);
76*c8dee2aaSAndroid Build Coastguard Worker }
77*c8dee2aaSAndroid Build Coastguard Worker 
78*c8dee2aaSAndroid Build Coastguard Worker }  // namespace textlayout
79*c8dee2aaSAndroid Build Coastguard Worker }  // namespace skia
80