Loading libs/hwui/hwui/MinikinUtils.cpp +13 −0 Original line number Original line Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <log/log.h> #include <log/log.h> #include <minikin/MeasuredText.h> #include <minikin/MeasuredText.h> #include <minikin/Measurement.h> #include "Paint.h" #include "Paint.h" #include "SkPathMeasure.h" #include "SkPathMeasure.h" #include "Typeface.h" #include "Typeface.h" Loading Loading @@ -69,6 +70,18 @@ minikin::Layout MinikinUtils::doLayout(const Paint* paint, minikin::Bidi bidiFla } } } } void MinikinUtils::getBounds(const Paint* paint, minikin::Bidi bidiFlags, const Typeface* typeface, const uint16_t* buf, size_t bufSize, minikin::MinikinRect* out) { minikin::MinikinPaint minikinPaint = prepareMinikinPaint(paint, typeface); const minikin::U16StringPiece textBuf(buf, bufSize); const minikin::StartHyphenEdit startHyphen = paint->getStartHyphenEdit(); const minikin::EndHyphenEdit endHyphen = paint->getEndHyphenEdit(); minikin::getBounds(textBuf, minikin::Range(0, textBuf.size()), bidiFlags, minikinPaint, startHyphen, endHyphen, out); } float MinikinUtils::measureText(const Paint* paint, minikin::Bidi bidiFlags, float MinikinUtils::measureText(const Paint* paint, minikin::Bidi bidiFlags, const Typeface* typeface, const uint16_t* buf, size_t start, const Typeface* typeface, const uint16_t* buf, size_t start, size_t count, size_t bufSize, float* advances) { size_t count, size_t bufSize, float* advances) { Loading libs/hwui/hwui/MinikinUtils.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -48,6 +48,9 @@ public: size_t contextStart, size_t contextCount, size_t contextStart, size_t contextCount, minikin::MeasuredText* mt); minikin::MeasuredText* mt); static void getBounds(const Paint* paint, minikin::Bidi bidiFlags, const Typeface* typeface, const uint16_t* buf, size_t bufSize, minikin::MinikinRect* out); static float measureText(const Paint* paint, minikin::Bidi bidiFlags, static float measureText(const Paint* paint, minikin::Bidi bidiFlags, const Typeface* typeface, const uint16_t* buf, const Typeface* typeface, const uint16_t* buf, size_t start, size_t count, size_t bufSize, size_t start, size_t count, size_t bufSize, Loading libs/hwui/jni/Paint.cpp +3 −8 Original line number Original line Diff line number Diff line Loading @@ -342,18 +342,13 @@ namespace PaintGlue { } } static void doTextBounds(JNIEnv* env, const jchar* text, int count, jobject bounds, static void doTextBounds(JNIEnv* env, const jchar* text, int count, jobject bounds, const Paint& paint, const Typeface* typeface, jint bidiFlags) { const Paint& paint, const Typeface* typeface, jint bidiFlagsInt) { SkRect r; SkRect r; SkIRect ir; SkIRect ir; minikin::Layout layout = MinikinUtils::doLayout(&paint, static_cast<minikin::Bidi>(bidiFlags), typeface, text, count, // text buffer 0, count, // draw range 0, count, // context range nullptr); minikin::MinikinRect rect; minikin::MinikinRect rect; layout.getBounds(&rect); minikin::Bidi bidiFlags = static_cast<minikin::Bidi>(bidiFlagsInt); MinikinUtils::getBounds(&paint, bidiFlags, typeface, text, count, &rect); r.fLeft = rect.mLeft; r.fLeft = rect.mLeft; r.fTop = rect.mTop; r.fTop = rect.mTop; r.fRight = rect.mRight; r.fRight = rect.mRight; Loading Loading
libs/hwui/hwui/MinikinUtils.cpp +13 −0 Original line number Original line Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <log/log.h> #include <log/log.h> #include <minikin/MeasuredText.h> #include <minikin/MeasuredText.h> #include <minikin/Measurement.h> #include "Paint.h" #include "Paint.h" #include "SkPathMeasure.h" #include "SkPathMeasure.h" #include "Typeface.h" #include "Typeface.h" Loading Loading @@ -69,6 +70,18 @@ minikin::Layout MinikinUtils::doLayout(const Paint* paint, minikin::Bidi bidiFla } } } } void MinikinUtils::getBounds(const Paint* paint, minikin::Bidi bidiFlags, const Typeface* typeface, const uint16_t* buf, size_t bufSize, minikin::MinikinRect* out) { minikin::MinikinPaint minikinPaint = prepareMinikinPaint(paint, typeface); const minikin::U16StringPiece textBuf(buf, bufSize); const minikin::StartHyphenEdit startHyphen = paint->getStartHyphenEdit(); const minikin::EndHyphenEdit endHyphen = paint->getEndHyphenEdit(); minikin::getBounds(textBuf, minikin::Range(0, textBuf.size()), bidiFlags, minikinPaint, startHyphen, endHyphen, out); } float MinikinUtils::measureText(const Paint* paint, minikin::Bidi bidiFlags, float MinikinUtils::measureText(const Paint* paint, minikin::Bidi bidiFlags, const Typeface* typeface, const uint16_t* buf, size_t start, const Typeface* typeface, const uint16_t* buf, size_t start, size_t count, size_t bufSize, float* advances) { size_t count, size_t bufSize, float* advances) { Loading
libs/hwui/hwui/MinikinUtils.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -48,6 +48,9 @@ public: size_t contextStart, size_t contextCount, size_t contextStart, size_t contextCount, minikin::MeasuredText* mt); minikin::MeasuredText* mt); static void getBounds(const Paint* paint, minikin::Bidi bidiFlags, const Typeface* typeface, const uint16_t* buf, size_t bufSize, minikin::MinikinRect* out); static float measureText(const Paint* paint, minikin::Bidi bidiFlags, static float measureText(const Paint* paint, minikin::Bidi bidiFlags, const Typeface* typeface, const uint16_t* buf, const Typeface* typeface, const uint16_t* buf, size_t start, size_t count, size_t bufSize, size_t start, size_t count, size_t bufSize, Loading
libs/hwui/jni/Paint.cpp +3 −8 Original line number Original line Diff line number Diff line Loading @@ -342,18 +342,13 @@ namespace PaintGlue { } } static void doTextBounds(JNIEnv* env, const jchar* text, int count, jobject bounds, static void doTextBounds(JNIEnv* env, const jchar* text, int count, jobject bounds, const Paint& paint, const Typeface* typeface, jint bidiFlags) { const Paint& paint, const Typeface* typeface, jint bidiFlagsInt) { SkRect r; SkRect r; SkIRect ir; SkIRect ir; minikin::Layout layout = MinikinUtils::doLayout(&paint, static_cast<minikin::Bidi>(bidiFlags), typeface, text, count, // text buffer 0, count, // draw range 0, count, // context range nullptr); minikin::MinikinRect rect; minikin::MinikinRect rect; layout.getBounds(&rect); minikin::Bidi bidiFlags = static_cast<minikin::Bidi>(bidiFlagsInt); MinikinUtils::getBounds(&paint, bidiFlags, typeface, text, count, &rect); r.fLeft = rect.mLeft; r.fLeft = rect.mLeft; r.fTop = rect.mTop; r.fTop = rect.mTop; r.fRight = rect.mRight; r.fRight = rect.mRight; Loading