michael@0: michael@0: /* michael@0: * Copyright 2012 The Android Open Source Project michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: michael@0: michael@0: #ifndef SkPaintOptionsAndroid_DEFINED michael@0: #define SkPaintOptionsAndroid_DEFINED michael@0: michael@0: #include "SkTypes.h" michael@0: #include "SkString.h" michael@0: michael@0: class SkReadBuffer; michael@0: class SkWriteBuffer; michael@0: michael@0: /** \class SkLanguage michael@0: michael@0: The SkLanguage class represents a human written language, and is used by michael@0: text draw operations to determine which glyph to draw when drawing michael@0: characters with variants (ie Han-derived characters). michael@0: */ michael@0: class SkLanguage { michael@0: public: michael@0: SkLanguage() { } michael@0: SkLanguage(const SkString& tag) : fTag(tag) { } michael@0: SkLanguage(const char* tag) : fTag(tag) { } michael@0: SkLanguage(const char* tag, size_t len) : fTag(tag, len) { } michael@0: SkLanguage(const SkLanguage& b) : fTag(b.fTag) { } michael@0: michael@0: /** Gets a BCP 47 language identifier for this SkLanguage. michael@0: @return a BCP 47 language identifier representing this language michael@0: */ michael@0: const SkString& getTag() const { return fTag; } michael@0: michael@0: /** Performs BCP 47 fallback to return an SkLanguage one step more general. michael@0: @return an SkLanguage one step more general michael@0: */ michael@0: SkLanguage getParent() const; michael@0: michael@0: bool operator==(const SkLanguage& b) const { michael@0: return fTag == b.fTag; michael@0: } michael@0: bool operator!=(const SkLanguage& b) const { michael@0: return fTag != b.fTag; michael@0: } michael@0: SkLanguage& operator=(const SkLanguage& b) { michael@0: fTag = b.fTag; michael@0: return *this; michael@0: } michael@0: michael@0: private: michael@0: //! BCP 47 language identifier michael@0: SkString fTag; michael@0: }; michael@0: michael@0: class SkPaintOptionsAndroid { michael@0: public: michael@0: SkPaintOptionsAndroid() { michael@0: fFontVariant = kDefault_Variant; michael@0: fUseFontFallbacks = false; michael@0: } michael@0: michael@0: SkPaintOptionsAndroid& operator=(const SkPaintOptionsAndroid& b) { michael@0: fLanguage = b.fLanguage; michael@0: fFontVariant = b.fFontVariant; michael@0: fUseFontFallbacks = b.fUseFontFallbacks; michael@0: return *this; michael@0: } michael@0: michael@0: bool operator==(const SkPaintOptionsAndroid& b) const { michael@0: return !(*this != b); michael@0: } michael@0: michael@0: bool operator!=(const SkPaintOptionsAndroid& b) const { michael@0: return fLanguage != b.fLanguage || michael@0: fFontVariant != b.fFontVariant || michael@0: fUseFontFallbacks != b.fUseFontFallbacks; michael@0: } michael@0: michael@0: void flatten(SkWriteBuffer&) const; michael@0: void unflatten(SkReadBuffer&); michael@0: michael@0: /** Return the paint's language value used for drawing text. michael@0: @return the paint's language value used for drawing text. michael@0: */ michael@0: const SkLanguage& getLanguage() const { return fLanguage; } michael@0: michael@0: /** Set the paint's language value used for drawing text. michael@0: @param language set the paint's language value for drawing text. michael@0: */ michael@0: void setLanguage(const SkLanguage& language) { fLanguage = language; } michael@0: void setLanguage(const char* languageTag) { fLanguage = SkLanguage(languageTag); } michael@0: michael@0: michael@0: enum FontVariant { michael@0: kDefault_Variant = 0x01, michael@0: kCompact_Variant = 0x02, michael@0: kElegant_Variant = 0x04, michael@0: kLast_Variant = kElegant_Variant, michael@0: }; michael@0: michael@0: /** Return the font variant michael@0: @return the font variant used by this paint object michael@0: */ michael@0: FontVariant getFontVariant() const { return fFontVariant; } michael@0: michael@0: /** Set the font variant michael@0: @param fontVariant set the paint's font variant for choosing fonts michael@0: */ michael@0: void setFontVariant(FontVariant fontVariant) { michael@0: SkASSERT((unsigned)fontVariant <= kLast_Variant); michael@0: fFontVariant = fontVariant; michael@0: } michael@0: michael@0: bool isUsingFontFallbacks() const { return fUseFontFallbacks; } michael@0: michael@0: void setUseFontFallbacks(bool useFontFallbacks) { michael@0: fUseFontFallbacks = useFontFallbacks; michael@0: } michael@0: michael@0: private: michael@0: SkLanguage fLanguage; michael@0: FontVariant fFontVariant; michael@0: bool fUseFontFallbacks; michael@0: }; michael@0: michael@0: #endif // #ifndef SkPaintOptionsAndroid_DEFINED