Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 24004769 authored by Raph Levien's avatar Raph Levien Committed by Android Git Automerger
Browse files

am e0ebf19c: Merge "Support for context in Minikin shaping" into lmp-preview-dev

* commit 'e0ebf19cbfa60ba3eb0891d5e8416b70b212bc36':
  Support for context in Minikin shaping
parents 4c25e5a1 0ead890d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -818,8 +818,8 @@ public:

#ifdef USE_MINIKIN
        Layout layout;
        MinikinUtils::SetLayoutProperties(&layout, paint, flags, typeface);
        layout.doLayout(textArray + start, count);
        std::string css = MinikinUtils::setLayoutProperties(&layout, paint, flags, typeface);
        layout.doLayout(textArray, start, count, contextCount, css);
        drawGlyphsToSkia(canvas, paint, layout, x, y);
#else
        sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
+5 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

#define LOG_TAG "Minikin"
#include <cutils/log.h>
#include <string>

#include "SkPaint.h"
#include "minikin/Layout.h"
@@ -36,7 +37,7 @@ static int snprintfcat(char* buf, int off, int size, const char* format, ...) {
    return off + n;
}

void MinikinUtils::SetLayoutProperties(Layout* layout, const SkPaint* paint, int flags,
std::string MinikinUtils::setLayoutProperties(Layout* layout, const SkPaint* paint, int bidiFlags,
        TypefaceImpl* typeface) {
    TypefaceImpl* resolvedFace = TypefaceImpl_resolveDefault(typeface);
    layout->setFontCollection(resolvedFace->fFontCollection);
@@ -51,13 +52,14 @@ void MinikinUtils::SetLayoutProperties(Layout* layout, const SkPaint* paint, int
        MinikinFontSkia::packPaintFlags(paint),
        style.getWeight() * 100,
        style.getItalic() ? "italic" : "normal",
        flags);
        bidiFlags);
    SkString langString = paint->getPaintOptionsAndroid().getLanguage().getTag();
    off = snprintfcat(css, off, sizeof(css), " lang: %s;", langString.c_str());
    SkPaintOptionsAndroid::FontVariant var = paint->getPaintOptionsAndroid().getFontVariant();
    const char* varstr = var == SkPaintOptionsAndroid::kElegant_Variant ? "elegant" : "compact";
    off = snprintfcat(css, off, sizeof(css), " -minikin-variant: %s;", varstr);
    layout->setProperties(css);
    return std::string(css);
}

float MinikinUtils::xOffsetForTextAlign(SkPaint* paint, const Layout& layout) {
+2 −2
Original line number Diff line number Diff line
@@ -31,8 +31,8 @@ class TypefaceImpl;

class MinikinUtils {
public:
    static void SetLayoutProperties(Layout* layout, const SkPaint* paint, int flags,
        TypefaceImpl* face);
    static std::string setLayoutProperties(Layout* layout, const SkPaint* paint, int bidiFlags,
            TypefaceImpl* typeface);

    static float xOffsetForTextAlign(SkPaint* paint, const Layout& layout);

+14 −14
Original line number Diff line number Diff line
@@ -520,8 +520,8 @@ public:
#ifdef USE_MINIKIN
        Layout layout;
        TypefaceImpl* typeface = GraphicsJNI::getNativeTypeface(env, jpaint);
        MinikinUtils::SetLayoutProperties(&layout, paint, bidiFlags, typeface);
        layout.doLayout(textArray + index, count);
        std::string css = MinikinUtils::setLayoutProperties(&layout, paint, bidiFlags, typeface);
        layout.doLayout(textArray, index, count, textLength, css);
        result = layout.getAdvance();
#else
        TextLayout::getTextRunAdvances(paint, textArray, index, count, textLength,
@@ -554,8 +554,8 @@ public:
#ifdef USE_MINIKIN
        Layout layout;
        TypefaceImpl* typeface = GraphicsJNI::getNativeTypeface(env, jpaint);
        MinikinUtils::SetLayoutProperties(&layout, paint, bidiFlags, typeface);
        layout.doLayout(textArray + start, count);
        std::string css = MinikinUtils::setLayoutProperties(&layout, paint, bidiFlags, typeface);
        layout.doLayout(textArray, start, count, textLength, css);
        width = layout.getAdvance();
#else
        TextLayout::getTextRunAdvances(paint, textArray, start, count, textLength,
@@ -582,8 +582,8 @@ public:
#ifdef USE_MINIKIN
        Layout layout;
        TypefaceImpl* typeface = GraphicsJNI::getNativeTypeface(env, jpaint);
        MinikinUtils::SetLayoutProperties(&layout, paint, bidiFlags, typeface);
        layout.doLayout(textArray, textLength);
        std::string css = MinikinUtils::setLayoutProperties(&layout, paint, bidiFlags, typeface);
        layout.doLayout(textArray, 0, textLength, textLength, css);
        width = layout.getAdvance();
#else
        TextLayout::getTextRunAdvances(paint, textArray, 0, textLength, textLength,
@@ -617,8 +617,8 @@ public:

#ifdef USE_MINIKIN
        Layout layout;
        MinikinUtils::SetLayoutProperties(&layout, paint, bidiFlags, typeface);
        layout.doLayout(text, count);
        std::string css = MinikinUtils::setLayoutProperties(&layout, paint, bidiFlags, typeface);
        layout.doLayout(text, 0, count, count, css);
        layout.getAdvances(widthsArray);
#else
        TextLayout::getTextRunAdvances(paint, text, 0, count, count,
@@ -715,8 +715,8 @@ public:

#ifdef USE_MINIKIN
        Layout layout;
        MinikinUtils::SetLayoutProperties(&layout, paint, flags, typeface);
        layout.doLayout(text + start, count);
        std::string css = MinikinUtils::setLayoutProperties(&layout, paint, flags, typeface);
        layout.doLayout(text, start, count, contextCount, css);
        layout.getAdvances(advancesArray);
        totalAdvance = layout.getAdvance();
#else
@@ -860,8 +860,8 @@ public:
            jint count, jint bidiFlags, jfloat x, jfloat y, SkPath* path) {
#ifdef USE_MINIKIN
        Layout layout;
        MinikinUtils::SetLayoutProperties(&layout, paint, bidiFlags, typeface);
        layout.doLayout(text, count);
        std::string css = MinikinUtils::setLayoutProperties(&layout, paint, bidiFlags, typeface);
        layout.doLayout(text, 0, count, count, css);
        size_t nGlyphs = layout.nGlyphs();
        uint16_t* glyphs = new uint16_t[nGlyphs];
        SkPoint* pos = new SkPoint[nGlyphs];
@@ -992,8 +992,8 @@ public:

#ifdef USE_MINIKIN
        Layout layout;
        MinikinUtils::SetLayoutProperties(&layout, &paint, bidiFlags, typeface);
        layout.doLayout(text, count);
        std::string css = MinikinUtils::setLayoutProperties(&layout, &paint, bidiFlags, typeface);
        layout.doLayout(text, 0, count, count, css);
        MinikinRect rect;
        layout.getBounds(&rect);
        r.fLeft = rect.mLeft;
+4 −4
Original line number Diff line number Diff line
@@ -645,8 +645,8 @@ static void renderText(OpenGLRenderer* renderer, const jchar* text, int count,
        jfloat x, jfloat y, int flags, SkPaint* paint, TypefaceImpl* typeface) {
#ifdef USE_MINIKIN
    Layout layout;
    MinikinUtils::SetLayoutProperties(&layout, paint, flags, typeface);
    layout.doLayout(text, count);
    std::string css = MinikinUtils::setLayoutProperties(&layout, paint, flags, typeface);
    layout.doLayout(text, 0, count, count, css);
    x += xOffsetForTextAlign(paint, layout.getAdvance());
    renderTextLayout(renderer, &layout, x, y, paint);
#else
@@ -689,8 +689,8 @@ static void renderTextRun(OpenGLRenderer* renderer, const jchar* text,
        int flags, SkPaint* paint, TypefaceImpl* typeface) {
#ifdef USE_MINIKIN
    Layout layout;
    MinikinUtils::SetLayoutProperties(&layout, paint, flags, typeface);
    layout.doLayout(text + start, count);
    std::string css = MinikinUtils::setLayoutProperties(&layout, paint, flags, typeface);
    layout.doLayout(text, start, count, contextCount, css);
    x += xOffsetForTextAlign(paint, layout.getAdvance());
    renderTextLayout(renderer, &layout, x, y, paint);
#else