Loading core/jni/android/graphics/MinikinUtils.cpp +3 −4 Original line number Diff line number Diff line Loading @@ -45,10 +45,9 @@ void MinikinUtils::doLayout(Layout* layout, const Paint* paint, int bidiFlags, T FontStyle resolved = resolvedFace->fStyle; /* Prepare minikin FontStyle */ SkString langStr = paint->getPaintOptionsAndroid().getLanguage().getTag(); FontLanguage minikinLang(langStr.c_str(), langStr.size()); SkPaintOptionsAndroid::FontVariant var = paint->getPaintOptionsAndroid().getFontVariant(); FontVariant minikinVariant = var == SkPaintOptionsAndroid::kElegant_Variant ? VARIANT_ELEGANT std::string lang = paint->getTextLocale(); FontLanguage minikinLang(lang.c_str(), lang.size()); FontVariant minikinVariant = (paint->getFontVariant() == VARIANT_ELEGANT) ? VARIANT_ELEGANT : VARIANT_COMPACT; FontStyle minikinStyle(minikinLang, minikinVariant, resolved.getWeight(), resolved.getItalic()); Loading core/jni/android/graphics/Paint.cpp +4 −13 Original line number Diff line number Diff line Loading @@ -365,27 +365,19 @@ public: char langTag[ULOC_FULLNAME_CAPACITY]; toLanguageTag(langTag, ULOC_FULLNAME_CAPACITY, localeChars.c_str()); SkPaintOptionsAndroid paintOpts = obj->getPaintOptionsAndroid(); paintOpts.setLanguage(langTag); obj->setPaintOptionsAndroid(paintOpts); obj->setTextLocale(langTag); } static jboolean isElegantTextHeight(JNIEnv* env, jobject paint) { NPE_CHECK_RETURN_ZERO(env, paint); Paint* obj = GraphicsJNI::getNativePaint(env, paint); SkPaintOptionsAndroid paintOpts = obj->getPaintOptionsAndroid(); return paintOpts.getFontVariant() == SkPaintOptionsAndroid::kElegant_Variant; return obj->getFontVariant() == VARIANT_ELEGANT; } static void setElegantTextHeight(JNIEnv* env, jobject paint, jboolean aa) { NPE_CHECK_RETURN_VOID(env, paint); Paint* obj = GraphicsJNI::getNativePaint(env, paint); SkPaintOptionsAndroid::FontVariant variant = aa ? SkPaintOptionsAndroid::kElegant_Variant : SkPaintOptionsAndroid::kDefault_Variant; SkPaintOptionsAndroid paintOpts = obj->getPaintOptionsAndroid(); paintOpts.setFontVariant(variant); obj->setPaintOptionsAndroid(paintOpts); obj->setFontVariant(aa ? VARIANT_ELEGANT : VARIANT_DEFAULT); } static jfloat getTextSize(JNIEnv* env, jobject paint) { Loading Loading @@ -457,8 +449,7 @@ public: // restore the original settings. paint->setTextSkewX(saveSkewX); paint->setFakeBoldText(savefakeBold); SkPaintOptionsAndroid paintOpts = paint->getPaintOptionsAndroid(); if (paintOpts.getFontVariant() == SkPaintOptionsAndroid::kElegant_Variant) { if (paint->getFontVariant() == VARIANT_ELEGANT) { SkScalar size = paint->getTextSize(); metrics->fTop = -size * kElegantTop / 2048; metrics->fBottom = -size * kElegantBottom / 2048; Loading core/jni/android/graphics/Paint.h +20 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ #include <SkPaint.h> #include <string> #include <minikin/FontFamily.h> namespace android { class Paint : public SkPaint { Loading Loading @@ -51,9 +53,27 @@ public: return mFontFeatureSettings; } void setTextLocale(const std::string &textLocale) { mTextLocale = textLocale; } std::string getTextLocale() const { return mTextLocale; } void setFontVariant(FontVariant variant) { mFontVariant = variant; } FontVariant getFontVariant() const { return mFontVariant; } private: float mLetterSpacing; std::string mFontFeatureSettings; std::string mTextLocale; FontVariant mFontVariant; }; } // namespace android Loading core/jni/android/graphics/PaintImpl.cpp +7 −3 Original line number Diff line number Diff line Loading @@ -23,11 +23,11 @@ namespace android { Paint::Paint() : SkPaint(), mLetterSpacing(0), mFontFeatureSettings() { mLetterSpacing(0), mFontFeatureSettings(), mTextLocale(), mFontVariant(VARIANT_DEFAULT) { } Paint::Paint(const Paint& paint) : SkPaint(paint), mLetterSpacing(0), mFontFeatureSettings() { mLetterSpacing(0), mFontFeatureSettings(), mTextLocale(), mFontVariant(VARIANT_DEFAULT) { } Paint::~Paint() { Loading @@ -37,13 +37,17 @@ Paint& Paint::operator=(const Paint& other) { SkPaint::operator=(other); mLetterSpacing = other.mLetterSpacing; mFontFeatureSettings = other.mFontFeatureSettings; mTextLocale = other.mTextLocale; mFontVariant = other.mFontVariant; return *this; } bool operator==(const Paint& a, const Paint& b) { return static_cast<const SkPaint&>(a) == static_cast<const SkPaint&>(b) && a.mLetterSpacing == b.mLetterSpacing && a.mFontFeatureSettings == b.mFontFeatureSettings; && a.mFontFeatureSettings == b.mFontFeatureSettings && a.mTextLocale == b.mTextLocale && a.mFontVariant == b.mFontVariant; } } Loading
core/jni/android/graphics/MinikinUtils.cpp +3 −4 Original line number Diff line number Diff line Loading @@ -45,10 +45,9 @@ void MinikinUtils::doLayout(Layout* layout, const Paint* paint, int bidiFlags, T FontStyle resolved = resolvedFace->fStyle; /* Prepare minikin FontStyle */ SkString langStr = paint->getPaintOptionsAndroid().getLanguage().getTag(); FontLanguage minikinLang(langStr.c_str(), langStr.size()); SkPaintOptionsAndroid::FontVariant var = paint->getPaintOptionsAndroid().getFontVariant(); FontVariant minikinVariant = var == SkPaintOptionsAndroid::kElegant_Variant ? VARIANT_ELEGANT std::string lang = paint->getTextLocale(); FontLanguage minikinLang(lang.c_str(), lang.size()); FontVariant minikinVariant = (paint->getFontVariant() == VARIANT_ELEGANT) ? VARIANT_ELEGANT : VARIANT_COMPACT; FontStyle minikinStyle(minikinLang, minikinVariant, resolved.getWeight(), resolved.getItalic()); Loading
core/jni/android/graphics/Paint.cpp +4 −13 Original line number Diff line number Diff line Loading @@ -365,27 +365,19 @@ public: char langTag[ULOC_FULLNAME_CAPACITY]; toLanguageTag(langTag, ULOC_FULLNAME_CAPACITY, localeChars.c_str()); SkPaintOptionsAndroid paintOpts = obj->getPaintOptionsAndroid(); paintOpts.setLanguage(langTag); obj->setPaintOptionsAndroid(paintOpts); obj->setTextLocale(langTag); } static jboolean isElegantTextHeight(JNIEnv* env, jobject paint) { NPE_CHECK_RETURN_ZERO(env, paint); Paint* obj = GraphicsJNI::getNativePaint(env, paint); SkPaintOptionsAndroid paintOpts = obj->getPaintOptionsAndroid(); return paintOpts.getFontVariant() == SkPaintOptionsAndroid::kElegant_Variant; return obj->getFontVariant() == VARIANT_ELEGANT; } static void setElegantTextHeight(JNIEnv* env, jobject paint, jboolean aa) { NPE_CHECK_RETURN_VOID(env, paint); Paint* obj = GraphicsJNI::getNativePaint(env, paint); SkPaintOptionsAndroid::FontVariant variant = aa ? SkPaintOptionsAndroid::kElegant_Variant : SkPaintOptionsAndroid::kDefault_Variant; SkPaintOptionsAndroid paintOpts = obj->getPaintOptionsAndroid(); paintOpts.setFontVariant(variant); obj->setPaintOptionsAndroid(paintOpts); obj->setFontVariant(aa ? VARIANT_ELEGANT : VARIANT_DEFAULT); } static jfloat getTextSize(JNIEnv* env, jobject paint) { Loading Loading @@ -457,8 +449,7 @@ public: // restore the original settings. paint->setTextSkewX(saveSkewX); paint->setFakeBoldText(savefakeBold); SkPaintOptionsAndroid paintOpts = paint->getPaintOptionsAndroid(); if (paintOpts.getFontVariant() == SkPaintOptionsAndroid::kElegant_Variant) { if (paint->getFontVariant() == VARIANT_ELEGANT) { SkScalar size = paint->getTextSize(); metrics->fTop = -size * kElegantTop / 2048; metrics->fBottom = -size * kElegantBottom / 2048; Loading
core/jni/android/graphics/Paint.h +20 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ #include <SkPaint.h> #include <string> #include <minikin/FontFamily.h> namespace android { class Paint : public SkPaint { Loading Loading @@ -51,9 +53,27 @@ public: return mFontFeatureSettings; } void setTextLocale(const std::string &textLocale) { mTextLocale = textLocale; } std::string getTextLocale() const { return mTextLocale; } void setFontVariant(FontVariant variant) { mFontVariant = variant; } FontVariant getFontVariant() const { return mFontVariant; } private: float mLetterSpacing; std::string mFontFeatureSettings; std::string mTextLocale; FontVariant mFontVariant; }; } // namespace android Loading
core/jni/android/graphics/PaintImpl.cpp +7 −3 Original line number Diff line number Diff line Loading @@ -23,11 +23,11 @@ namespace android { Paint::Paint() : SkPaint(), mLetterSpacing(0), mFontFeatureSettings() { mLetterSpacing(0), mFontFeatureSettings(), mTextLocale(), mFontVariant(VARIANT_DEFAULT) { } Paint::Paint(const Paint& paint) : SkPaint(paint), mLetterSpacing(0), mFontFeatureSettings() { mLetterSpacing(0), mFontFeatureSettings(), mTextLocale(), mFontVariant(VARIANT_DEFAULT) { } Paint::~Paint() { Loading @@ -37,13 +37,17 @@ Paint& Paint::operator=(const Paint& other) { SkPaint::operator=(other); mLetterSpacing = other.mLetterSpacing; mFontFeatureSettings = other.mFontFeatureSettings; mTextLocale = other.mTextLocale; mFontVariant = other.mFontVariant; return *this; } bool operator==(const Paint& a, const Paint& b) { return static_cast<const SkPaint&>(a) == static_cast<const SkPaint&>(b) && a.mLetterSpacing == b.mLetterSpacing && a.mFontFeatureSettings == b.mFontFeatureSettings; && a.mFontFeatureSettings == b.mFontFeatureSettings && a.mTextLocale == b.mTextLocale && a.mFontVariant == b.mFontVariant; } }