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

Commit 4677c511 authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Fix problem with glyph cache and textScaleX property"

parents d08f27ee 8668f8a6
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -40,9 +40,9 @@ namespace uirenderer {
///////////////////////////////////////////////////////////////////////////////

Font::Font(FontRenderer* state, uint32_t fontId, float fontSize,
        int flags, uint32_t italicStyle) :
        int flags, uint32_t italicStyle, uint32_t scaleX) :
        mState(state), mFontId(fontId), mFontSize(fontSize),
        mFlags(flags), mItalicStyle(italicStyle) {
        mFlags(flags), mItalicStyle(italicStyle), mScaleX(scaleX) {
}


@@ -279,18 +279,19 @@ Font::CachedGlyphInfo* Font::cacheGlyph(SkPaint* paint, int32_t glyph) {
}

Font* Font::create(FontRenderer* state, uint32_t fontId, float fontSize,
        int flags, uint32_t italicStyle) {
        int flags, uint32_t italicStyle, uint32_t scaleX) {
    Vector<Font*> &activeFonts = state->mActiveFonts;

    for (uint32_t i = 0; i < activeFonts.size(); i++) {
        Font* font = activeFonts[i];
        if (font->mFontId == fontId && font->mFontSize == fontSize &&
                font->mFlags == flags && font->mItalicStyle == italicStyle) {
                font->mFlags == flags && font->mItalicStyle == italicStyle &&
                font->mScaleX == scaleX) {
            return font;
        }
    }

    Font* newFont = new Font(state, fontId, fontSize, flags, italicStyle);
    Font* newFont = new Font(state, fontId, fontSize, flags, italicStyle, scaleX);
    activeFonts.push(newFont);
    return newFont;
}
@@ -657,7 +658,9 @@ void FontRenderer::setFont(SkPaint* paint, uint32_t fontId, float fontSize) {

    const float skewX = paint->getTextSkewX();
    uint32_t italicStyle = *(uint32_t*) &skewX;
    mCurrentFont = Font::create(this, fontId, fontSize, flags, italicStyle);
    const float scaleXFloat = paint->getTextScaleX();
    uint32_t scaleX = *(uint32_t*) &scaleXFloat;
    mCurrentFont = Font::create(this, fontId, fontSize, flags, italicStyle, scaleX);

    const float maxPrecacheFontSize = 40.0f;
    bool isNewFont = currentNumFonts != mActiveFonts.size();
+4 −2
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ public:
     * Creates a new font associated with the specified font state.
     */
    static Font* create(FontRenderer* state, uint32_t fontId, float fontSize,
            int flags, uint32_t italicStyle);
            int flags, uint32_t italicStyle, uint32_t scaleX);

protected:
    friend class FontRenderer;
@@ -104,7 +104,8 @@ protected:
        SkFixed mRsbDelta;
    };

    Font(FontRenderer* state, uint32_t fontId, float fontSize, int flags, uint32_t italicStyle);
    Font(FontRenderer* state, uint32_t fontId, float fontSize, int flags, uint32_t italicStyle,
            uint32_t scaleX);

    DefaultKeyedVector<int32_t, CachedGlyphInfo*> mCachedGlyphs;

@@ -124,6 +125,7 @@ protected:
    float mFontSize;
    int mFlags;
    uint32_t mItalicStyle;
    uint32_t mScaleX;
};

class FontRenderer {