Paint.h revision 1378a9d72cb4a9f7a939f0a28a78fcfb87fb7879
1/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ANDROID_GRAPHICS_PAINT_H_
18#define ANDROID_GRAPHICS_PAINT_H_
19
20#include <cutils/compiler.h>
21
22#include <SkPaint.h>
23#include <string>
24
25#include <minikin/FontFamily.h>
26
27namespace android {
28
29class ANDROID_API Paint : public SkPaint {
30public:
31    // Default values for underlined and strikethrough text,
32    // as defined by Skia in SkTextFormatParams.h.
33    constexpr static float kStdStrikeThru_Offset   = (-6.0f / 21.0f);
34    constexpr static float kStdUnderline_Offset    = (1.0f / 9.0f);
35    constexpr static float kStdUnderline_Thickness = (1.0f / 18.0f);
36
37    constexpr static float kStdUnderline_Top =
38            kStdUnderline_Offset - 0.5f * kStdUnderline_Thickness;
39
40    constexpr static float kStdStrikeThru_Thickness = kStdUnderline_Thickness;
41    constexpr static float kStdStrikeThru_Top =
42            kStdStrikeThru_Offset - 0.5f * kStdStrikeThru_Thickness;
43
44    Paint();
45    Paint(const Paint& paint);
46    Paint(const SkPaint& paint);  // NOLINT(implicit)
47    ~Paint();
48
49    Paint& operator=(const Paint& other);
50
51    friend bool operator==(const Paint& a, const Paint& b);
52    friend bool operator!=(const Paint& a, const Paint& b) {
53        return !(a == b);
54    }
55
56    void setLetterSpacing(float letterSpacing) {
57        mLetterSpacing = letterSpacing;
58    }
59
60    float getLetterSpacing() const {
61        return mLetterSpacing;
62    }
63
64    void setWordSpacing(float wordSpacing) {
65        mWordSpacing = wordSpacing;
66    }
67
68    float getWordSpacing() const {
69        return mWordSpacing;
70    }
71
72    void setFontFeatureSettings(const std::string& fontFeatureSettings) {
73        mFontFeatureSettings = fontFeatureSettings;
74    }
75
76    std::string getFontFeatureSettings() const {
77        return mFontFeatureSettings;
78    }
79
80    void setMinikinLangListId(uint32_t minikinLangListId) {
81        mMinikinLangListId = minikinLangListId;
82    }
83
84    uint32_t getMinikinLangListId() const {
85        return mMinikinLangListId;
86    }
87
88    void setFontVariant(minikin::FontVariant variant) {
89        mFontVariant = variant;
90    }
91
92    minikin::FontVariant getFontVariant() const {
93        return mFontVariant;
94    }
95
96    void setHyphenEdit(uint32_t hyphen) {
97        mHyphenEdit = hyphen;
98    }
99
100    uint32_t getHyphenEdit() const {
101        return mHyphenEdit;
102    }
103
104private:
105    float mLetterSpacing = 0;
106    float mWordSpacing = 0;
107    std::string mFontFeatureSettings;
108    uint32_t mMinikinLangListId;
109    minikin::FontVariant mFontVariant;
110    uint32_t mHyphenEdit = 0;
111};
112
113}  // namespace android
114
115#endif // ANDROID_GRAPHICS_PAINT_H_
116