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

Commit 525e7e40 authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

Cache the layout result if the font feature is specified

Bug: 283193133
Test: minikin_tests
Change-Id: Iae16bbada5f3076b08db9e67d2546eb5014a1fbf
parent 9fd20c8c
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -75,3 +75,10 @@ flag {
  description: "A feature flag that implements line break word style auto."
  bug: "280005585"
}

flag {
  name: "inter_character_justification"
  namespace: "text"
  description: "A feature flag that implement inter character justification."
  bug: "283193133"
}
+15 −11
Original line number Diff line number Diff line
@@ -17,19 +17,19 @@
#ifndef ANDROID_GRAPHICS_PAINT_H_
#define ANDROID_GRAPHICS_PAINT_H_

#include "Typeface.h"

#include <cutils/compiler.h>

#include <SkFont.h>
#include <SkPaint.h>
#include <SkSamplingOptions.h>
#include <string>

#include <minikin/FontFamily.h>
#include <cutils/compiler.h>
#include <minikin/FamilyVariant.h>
#include <minikin/FontFamily.h>
#include <minikin/FontFeature.h>
#include <minikin/Hyphenator.h>

#include <string>

#include "Typeface.h"

namespace android {

class BlurDrawLooper;
@@ -82,11 +82,15 @@ public:

    float getWordSpacing() const { return mWordSpacing; }

    void setFontFeatureSettings(const std::string& fontFeatureSettings) {
        mFontFeatureSettings = fontFeatureSettings;
    void setFontFeatureSettings(std::string_view fontFeatures) {
        mFontFeatureSettings = minikin::FontFeature::parse(fontFeatures);
    }

    std::string getFontFeatureSettings() const { return mFontFeatureSettings; }
    void resetFontFeatures() { mFontFeatureSettings.clear(); }

    const std::vector<minikin::FontFeature>& getFontFeatureSettings() const {
        return mFontFeatureSettings;
    }

    void setMinikinLocaleListId(uint32_t minikinLocaleListId) {
        mMinikinLocaleListId = minikinLocaleListId;
@@ -170,7 +174,7 @@ private:

    float mLetterSpacing = 0;
    float mWordSpacing = 0;
    std::string mFontFeatureSettings;
    std::vector<minikin::FontFeature> mFontFeatureSettings;
    uint32_t mMinikinLocaleListId;
    std::optional<minikin::FamilyVariant> mFamilyVariant;
    uint32_t mHyphenEdit = 0;
+4 −2
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include <cassert>
#include <cstring>
#include <memory>
#include <string_view>
#include <vector>

#include "ColorFilter.h"
@@ -690,10 +691,11 @@ namespace PaintGlue {
                                       jstring settings) {
        Paint* paint = reinterpret_cast<Paint*>(paintHandle);
        if (!settings) {
            paint->setFontFeatureSettings(std::string());
            paint->resetFontFeatures();
        } else {
            ScopedUtfChars settingsChars(env, settings);
            paint->setFontFeatureSettings(std::string(settingsChars.c_str(), settingsChars.size()));
            paint->setFontFeatureSettings(
                    std::string_view(settingsChars.c_str(), settingsChars.size()));
        }
    }