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