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

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

Merge "Paint style and stroke width affect text rendering. Bug #5112207"

parents baef3932 bd496bc3
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -44,9 +44,11 @@ namespace uirenderer {
///////////////////////////////////////////////////////////////////////////////

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


@@ -283,19 +285,22 @@ Font::CachedGlyphInfo* Font::cacheGlyph(SkPaint* paint, glyph_t glyph) {
}

Font* Font::create(FontRenderer* state, uint32_t fontId, float fontSize,
        int flags, uint32_t italicStyle, uint32_t scaleX) {
        int flags, uint32_t italicStyle, uint32_t scaleX,
        SkPaint::Style style, uint32_t strokeWidth) {
    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->mScaleX == scaleX) {
                font->mScaleX == scaleX && font->mStyle == style &&
                (style == SkPaint::kFill_Style || font->mStrokeWidth == strokeWidth)) {
            return font;
        }
    }

    Font* newFont = new Font(state, fontId, fontSize, flags, italicStyle, scaleX);
    Font* newFont = new Font(state, fontId, fontSize, flags, italicStyle,
            scaleX, style, strokeWidth);
    activeFonts.push(newFont);
    return newFont;
}
@@ -690,7 +695,11 @@ void FontRenderer::setFont(SkPaint* paint, uint32_t fontId, float fontSize) {
    uint32_t italicStyle = *(uint32_t*) &skewX;
    const float scaleXFloat = paint->getTextScaleX();
    uint32_t scaleX = *(uint32_t*) &scaleXFloat;
    mCurrentFont = Font::create(this, fontId, fontSize, flags, italicStyle, scaleX);
    SkPaint::Style style = paint->getStyle();
    const float strokeWidthFloat = paint->getStrokeWidth();
    uint32_t strokeWidth = *(uint32_t*) &strokeWidthFloat;
    mCurrentFont = Font::create(this, fontId, fontSize, flags, italicStyle,
            scaleX, style, strokeWidth);

    const float maxPrecacheFontSize = 40.0f;
    bool isNewFont = currentNumFonts != mActiveFonts.size();
+5 −2
Original line number Diff line number Diff line
@@ -82,7 +82,8 @@ 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, uint32_t scaleX);
            int flags, uint32_t italicStyle, uint32_t scaleX, SkPaint::Style style,
            uint32_t strokeWidth);

protected:
    friend class FontRenderer;
@@ -128,7 +129,7 @@ protected:
    };

    Font(FontRenderer* state, uint32_t fontId, float fontSize, int flags, uint32_t italicStyle,
            uint32_t scaleX);
            uint32_t scaleX, SkPaint::Style style, uint32_t strokeWidth);

    // Cache of glyphs
    DefaultKeyedVector<glyph_t, CachedGlyphInfo*> mCachedGlyphs;
@@ -157,6 +158,8 @@ protected:
    int mFlags;
    uint32_t mItalicStyle;
    uint32_t mScaleX;
    SkPaint::Style mStyle;
    uint32_t mStrokeWidth;
};

///////////////////////////////////////////////////////////////////////////////
+10 −0
Original line number Diff line number Diff line
@@ -77,13 +77,23 @@ public class TextActivity extends Activity {
            super.onDraw(canvas);
            canvas.drawRGB(255, 255, 255);

            mMediumPaint.setStyle(Paint.Style.FILL_AND_STROKE);
            mMediumPaint.setStrokeWidth(2.0f);
            canvas.drawText("Hello OpenGL renderer!", 100, 20, mMediumPaint);

            mMediumPaint.setStyle(Paint.Style.FILL);
            mMediumPaint.setTextAlign(Paint.Align.CENTER);
            canvas.drawText("Hello OpenGL renderer!", 100, 40, mMediumPaint);

            mMediumPaint.setStyle(Paint.Style.STROKE);
            mMediumPaint.setStrokeWidth(2.0f);
            mMediumPaint.setTextAlign(Paint.Align.RIGHT);
            canvas.drawText("Hello OpenGL renderer!", 100, 60, mMediumPaint);

            mMediumPaint.setStyle(Paint.Style.FILL);
            mMediumPaint.setTextAlign(Paint.Align.LEFT);
            canvas.drawText("Hello OpenGL renderer!", 100, 100, mMediumPaint);

            mMediumPaint.setShadowLayer(2.5f, 0.0f, 0.0f, 0xff000000);
            canvas.drawText("Hello OpenGL renderer!", 100, 150, mMediumPaint);
            mMediumPaint.clearShadowLayer();