Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / include / core / SkPaintOptionsAndroid.h
1
2 /*
3  * Copyright 2012 The Android Open Source Project
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8
9
10 #ifndef SkPaintOptionsAndroid_DEFINED
11 #define SkPaintOptionsAndroid_DEFINED
12
13 #include "SkTypes.h"
14 #include "SkString.h"
15
16 class SkReadBuffer;
17 class SkWriteBuffer;
18
19 /** \class SkLanguage
20
21     The SkLanguage class represents a human written language, and is used by
22     text draw operations to determine which glyph to draw when drawing
23     characters with variants (ie Han-derived characters).
24 */
25 class SkLanguage {
26 public:
27     SkLanguage() { }
28     SkLanguage(const SkString& tag) : fTag(tag) { }
29     SkLanguage(const char* tag) : fTag(tag) { }
30     SkLanguage(const char* tag, size_t len) : fTag(tag, len) { }
31     SkLanguage(const SkLanguage& b) : fTag(b.fTag) { }
32
33     /** Gets a BCP 47 language identifier for this SkLanguage.
34         @return a BCP 47 language identifier representing this language
35     */
36     const SkString& getTag() const { return fTag; }
37
38     /** Performs BCP 47 fallback to return an SkLanguage one step more general.
39         @return an SkLanguage one step more general
40     */
41     SkLanguage getParent() const;
42
43     bool operator==(const SkLanguage& b) const {
44         return fTag == b.fTag;
45     }
46     bool operator!=(const SkLanguage& b) const {
47         return fTag != b.fTag;
48     }
49     SkLanguage& operator=(const SkLanguage& b) {
50         fTag = b.fTag;
51         return *this;
52     }
53
54 private:
55     //! BCP 47 language identifier
56     SkString fTag;
57 };
58
59 class SkPaintOptionsAndroid {
60 public:
61     SkPaintOptionsAndroid() {
62         fFontVariant = kDefault_Variant;
63         fUseFontFallbacks = false;
64     }
65
66     SkPaintOptionsAndroid& operator=(const SkPaintOptionsAndroid& b) {
67         fLanguage = b.fLanguage;
68         fFontVariant = b.fFontVariant;
69         fUseFontFallbacks = b.fUseFontFallbacks;
70         return *this;
71     }
72
73     bool operator==(const SkPaintOptionsAndroid& b) const {
74         return !(*this != b);
75     }
76
77     bool operator!=(const SkPaintOptionsAndroid& b) const {
78         return fLanguage != b.fLanguage ||
79                fFontVariant != b.fFontVariant ||
80                fUseFontFallbacks != b.fUseFontFallbacks;
81     }
82
83     void flatten(SkWriteBuffer&) const;
84     void unflatten(SkReadBuffer&);
85
86     /** Return the paint's language value used for drawing text.
87         @return the paint's language value used for drawing text.
88     */
89     const SkLanguage& getLanguage() const { return fLanguage; }
90
91     /** Set the paint's language value used for drawing text.
92         @param language set the paint's language value for drawing text.
93     */
94     void setLanguage(const SkLanguage& language) { fLanguage = language; }
95     void setLanguage(const char* languageTag) { fLanguage = SkLanguage(languageTag); }
96
97
98     enum FontVariant {
99        kDefault_Variant = 0x01,
100        kCompact_Variant = 0x02,
101        kElegant_Variant = 0x04,
102        kLast_Variant = kElegant_Variant,
103     };
104
105     /** Return the font variant
106         @return the font variant used by this paint object
107     */
108     FontVariant getFontVariant() const { return fFontVariant; }
109
110     /** Set the font variant
111       @param fontVariant set the paint's font variant for choosing fonts
112     */
113     void setFontVariant(FontVariant fontVariant) {
114         SkASSERT((unsigned)fontVariant <= kLast_Variant);
115         fFontVariant = fontVariant;
116     }
117
118     bool isUsingFontFallbacks() const { return fUseFontFallbacks; }
119
120     void setUseFontFallbacks(bool useFontFallbacks) {
121         fUseFontFallbacks = useFontFallbacks;
122     }
123
124 private:
125     SkLanguage fLanguage;
126     FontVariant fFontVariant;
127     bool fUseFontFallbacks;
128 };
129
130 #endif // #ifndef SkPaintOptionsAndroid_DEFINED