diff options
author | Ang Li <ihcinihsdk@google.com> | 2023-11-09 01:07:49 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2023-11-09 01:07:49 +0000 |
commit | 8a35fbc5a0daf2375df0498e976f0d7d34ecaeb0 (patch) | |
tree | d7c84ecc94c612a76d4d77b3d70b2184d5228da8 | |
parent | dc672075990d0476c88af89b382f4974960ac6c1 (diff) | |
parent | 7493107b70ef15c48a3f8fea77b377105ab1dab0 (diff) | |
download | base-8a35fbc5a0daf2375df0498e976f0d7d34ecaeb0.tar.gz |
Merge "Change default value of setElegantTextFlag" into android12-hostruntime-dev
-rw-r--r-- | libs/hwui/hwui/MinikinUtils.cpp | 21 | ||||
-rw-r--r-- | libs/hwui/hwui/Paint.h | 5 | ||||
-rw-r--r-- | libs/hwui/jni/Paint.cpp | 38 |
3 files changed, 51 insertions, 13 deletions
diff --git a/libs/hwui/hwui/MinikinUtils.cpp b/libs/hwui/hwui/MinikinUtils.cpp index e359145feef7..efadb3788a02 100644 --- a/libs/hwui/hwui/MinikinUtils.cpp +++ b/libs/hwui/hwui/MinikinUtils.cpp @@ -16,12 +16,14 @@ #include "MinikinUtils.h" -#include <string> - #include <log/log.h> - +#include <minikin/FamilyVariant.h> #include <minikin/MeasuredText.h> #include <minikin/Measurement.h> + +#include <optional> +#include <string> + #include "Paint.h" #include "SkPathMeasure.h" #include "Typeface.h" @@ -35,17 +37,22 @@ minikin::MinikinPaint MinikinUtils::prepareMinikinPaint(const Paint* paint, minikin::MinikinPaint minikinPaint(resolvedFace->fFontCollection); /* Prepare minikin Paint */ - minikinPaint.size = - font.isLinearMetrics() ? font.getSize() : static_cast<int>(font.getSize()); + minikinPaint.size = font.isLinearMetrics() ? font.getSize() : static_cast<int>(font.getSize()); minikinPaint.scaleX = font.getScaleX(); minikinPaint.skewX = font.getSkewX(); minikinPaint.letterSpacing = paint->getLetterSpacing(); minikinPaint.wordSpacing = paint->getWordSpacing(); minikinPaint.fontFlags = MinikinFontSkia::packFontFlags(font); minikinPaint.localeListId = paint->getMinikinLocaleListId(); - minikinPaint.familyVariant = paint->getFamilyVariant(); minikinPaint.fontStyle = resolvedFace->fStyle; minikinPaint.fontFeatureSettings = paint->getFontFeatureSettings(); + + const std::optional<minikin::FamilyVariant>& familyVariant = paint->getFamilyVariant(); + if (familyVariant.has_value()) { + minikinPaint.familyVariant = familyVariant.value(); + } else { + minikinPaint.familyVariant = minikin::FamilyVariant::DEFAULT; + } return minikinPaint; } @@ -79,7 +86,7 @@ void MinikinUtils::getBounds(const Paint* paint, minikin::Bidi bidiFlags, const const minikin::EndHyphenEdit endHyphen = paint->getEndHyphenEdit(); minikin::getBounds(textBuf, minikin::Range(0, textBuf.size()), bidiFlags, minikinPaint, - startHyphen, endHyphen, out); + startHyphen, endHyphen, out); } float MinikinUtils::measureText(const Paint* paint, minikin::Bidi bidiFlags, diff --git a/libs/hwui/hwui/Paint.h b/libs/hwui/hwui/Paint.h index d9c9eeed03e9..9a271c9e186b 100644 --- a/libs/hwui/hwui/Paint.h +++ b/libs/hwui/hwui/Paint.h @@ -92,9 +92,10 @@ public: uint32_t getMinikinLocaleListId() const { return mMinikinLocaleListId; } + void resetFamilyVariant() { mFamilyVariant.reset(); } void setFamilyVariant(minikin::FamilyVariant variant) { mFamilyVariant = variant; } - minikin::FamilyVariant getFamilyVariant() const { return mFamilyVariant; } + std::optional<minikin::FamilyVariant> getFamilyVariant() const { return mFamilyVariant; } void setStartHyphenEdit(uint32_t startHyphen) { mHyphenEdit = minikin::packHyphenEdit( @@ -161,7 +162,7 @@ private: float mWordSpacing = 0; std::string mFontFeatureSettings; uint32_t mMinikinLocaleListId; - minikin::FamilyVariant mFamilyVariant; + std::optional<minikin::FamilyVariant> mFamilyVariant; uint32_t mHyphenEdit = 0; // The native Typeface object has the same lifetime of the Java Typeface // object. The Java Paint object holds a strong reference to the Java Typeface diff --git a/libs/hwui/jni/Paint.cpp b/libs/hwui/jni/Paint.cpp index 960de2afef4a..890780323ebd 100644 --- a/libs/hwui/jni/Paint.cpp +++ b/libs/hwui/jni/Paint.cpp @@ -1084,10 +1084,39 @@ namespace PaintGlue { return obj->getFamilyVariant() == minikin::FamilyVariant::ELEGANT; } - static void setElegantTextHeight(CRITICAL_JNI_PARAMS_COMMA jlong paintHandle, jboolean aa) { + // Note: Following three values must be equal to the ones in Java file: Paint.java. + constexpr jint ELEGANT_TEXT_HEIGHT_UNSET = -1; + constexpr jint ELEGANT_TEXT_HEIGHT_ENABLED = 0; + constexpr jint ELEGANT_TEXT_HEIGHT_DISABLED = 1; + + static jint getElegantTextHeight(CRITICAL_JNI_PARAMS_COMMA jlong paintHandle) { Paint* obj = reinterpret_cast<Paint*>(paintHandle); - obj->setFamilyVariant( - aa ? minikin::FamilyVariant::ELEGANT : minikin::FamilyVariant::DEFAULT); + const std::optional<minikin::FamilyVariant>& familyVariant = obj->getFamilyVariant(); + if (familyVariant.has_value()) { + if (familyVariant.value() == minikin::FamilyVariant::ELEGANT) { + return ELEGANT_TEXT_HEIGHT_ENABLED; + } else { + return ELEGANT_TEXT_HEIGHT_DISABLED; + } + } else { + return ELEGANT_TEXT_HEIGHT_UNSET; + } + } + + static void setElegantTextHeight(CRITICAL_JNI_PARAMS_COMMA jlong paintHandle, jint value) { + Paint* obj = reinterpret_cast<Paint*>(paintHandle); + switch (value) { + case ELEGANT_TEXT_HEIGHT_ENABLED: + obj->setFamilyVariant(minikin::FamilyVariant::ELEGANT); + return; + case ELEGANT_TEXT_HEIGHT_DISABLED: + obj->setFamilyVariant(minikin::FamilyVariant::DEFAULT); + return; + case ELEGANT_TEXT_HEIGHT_UNSET: + default: + obj->resetFamilyVariant(); + return; + } } static jfloat getTextSize(CRITICAL_JNI_PARAMS_COMMA jlong paintHandle) { @@ -1419,7 +1448,8 @@ static const JNINativeMethod methods[] = { {"nSetTextLocalesByMinikinLocaleListId", "(JI)V", (void*)PaintGlue::setTextLocalesByMinikinLocaleListId}, {"nIsElegantTextHeight", "(J)Z", (void*)PaintGlue::isElegantTextHeight}, - {"nSetElegantTextHeight", "(JZ)V", (void*)PaintGlue::setElegantTextHeight}, + {"nGetElegantTextHeight", "(J)I", (void*)PaintGlue::getElegantTextHeight}, + {"nSetElegantTextHeight", "(JI)V", (void*)PaintGlue::setElegantTextHeight}, {"nGetTextSize", "(J)F", (void*)PaintGlue::getTextSize}, {"nSetTextSize", "(JF)V", (void*)PaintGlue::setTextSize}, {"nGetTextScaleX", "(J)F", (void*)PaintGlue::getTextScaleX}, |