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

Commit 0ead890d authored by Raph Levien's avatar Raph Levien Committed by Android (Google) Code Review
Browse files

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

parents 30d3c97f 6bfd7e7d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -879,8 +879,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
@@ -702,8 +702,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
@@ -746,8 +746,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