1cb93a386Sopenharmony_ci// Copyright 2019 Google LLC.
2cb93a386Sopenharmony_ci#ifndef FontArguments_DEFINED
3cb93a386Sopenharmony_ci#define FontArguments_DEFINED
4cb93a386Sopenharmony_ci
5cb93a386Sopenharmony_ci#include <functional>
6cb93a386Sopenharmony_ci#include <vector>
7cb93a386Sopenharmony_ci#include "include/core/SkFontArguments.h"
8cb93a386Sopenharmony_ci#include "include/core/SkTypeface.h"
9cb93a386Sopenharmony_ci#include "drawing.h"
10cb93a386Sopenharmony_ci
11cb93a386Sopenharmony_cinamespace skia {
12cb93a386Sopenharmony_cinamespace textlayout {
13cb93a386Sopenharmony_ci
14cb93a386Sopenharmony_ciclass FontArguments {
15cb93a386Sopenharmony_cipublic:
16cb93a386Sopenharmony_ci    FontArguments(const SkFontArguments&);
17cb93a386Sopenharmony_ci    FontArguments(const FontArguments&) = default;
18cb93a386Sopenharmony_ci    FontArguments(FontArguments&&) = default;
19cb93a386Sopenharmony_ci
20cb93a386Sopenharmony_ci    FontArguments& operator=(const FontArguments&) = default;
21cb93a386Sopenharmony_ci    FontArguments& operator=(FontArguments&&) = default;
22cb93a386Sopenharmony_ci
23cb93a386Sopenharmony_ci#ifndef USE_SKIA_TXT
24cb93a386Sopenharmony_ci    sk_sp<SkTypeface> CloneTypeface(sk_sp<SkTypeface> typeface) const;
25cb93a386Sopenharmony_ci#else
26cb93a386Sopenharmony_ci    std::shared_ptr<RSTypeface> CloneTypeface(std::shared_ptr<RSTypeface> typeface) const;
27cb93a386Sopenharmony_ci#endif
28cb93a386Sopenharmony_ci
29cb93a386Sopenharmony_ci    friend bool operator==(const FontArguments& a, const FontArguments& b);
30cb93a386Sopenharmony_ci    friend bool operator!=(const FontArguments& a, const FontArguments& b);
31cb93a386Sopenharmony_ci    friend struct std::hash<FontArguments>;
32cb93a386Sopenharmony_ci
33cb93a386Sopenharmony_ciprivate:
34cb93a386Sopenharmony_ci    FontArguments() = delete;
35cb93a386Sopenharmony_ci
36cb93a386Sopenharmony_ci    int fCollectionIndex;
37cb93a386Sopenharmony_ci    std::vector<SkFontArguments::VariationPosition::Coordinate> fCoordinates;
38cb93a386Sopenharmony_ci    int fPaletteIndex;
39cb93a386Sopenharmony_ci    std::vector<SkFontArguments::Palette::Override> fPaletteOverrides;
40cb93a386Sopenharmony_ci};
41cb93a386Sopenharmony_ci
42cb93a386Sopenharmony_ci}  // namespace textlayout
43cb93a386Sopenharmony_ci}  // namespace skia
44cb93a386Sopenharmony_ci
45cb93a386Sopenharmony_cinamespace std {
46cb93a386Sopenharmony_ci    template<> struct hash<skia::textlayout::FontArguments> {
47cb93a386Sopenharmony_ci        size_t operator()(const skia::textlayout::FontArguments& args) const;
48cb93a386Sopenharmony_ci    };
49cb93a386Sopenharmony_ci}
50cb93a386Sopenharmony_ci
51cb93a386Sopenharmony_ci#endif  // FontArguments_DEFINED
52