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

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

Merge "Add support for Paint::setTextSkewX in OpenGLRenderer. Bug #3360888" into honeycomb

parents b54407f2 2577db1e
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -38,8 +38,10 @@ namespace uirenderer {
// Font
///////////////////////////////////////////////////////////////////////////////

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


@@ -275,17 +277,19 @@ Font::CachedGlyphInfo* Font::cacheGlyph(SkPaint* paint, int32_t glyph) {
    return newGlyph;
}

Font* Font::create(FontRenderer* state, uint32_t fontId, float fontSize, int flags) {
Font* Font::create(FontRenderer* state, uint32_t fontId, float fontSize,
        int flags, uint32_t italicStyle) {
    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) {
        if (font->mFontId == fontId && font->mFontSize == fontSize &&
                font->mFlags == flags && font->mItalicStyle == italicStyle) {
            return font;
        }
    }

    Font* newFont = new Font(state, fontId, fontSize, flags);
    Font* newFont = new Font(state, fontId, fontSize, flags, italicStyle);
    activeFonts.push(newFont);
    return newFont;
}
@@ -638,7 +642,10 @@ void FontRenderer::setFont(SkPaint* paint, uint32_t fontId, float fontSize) {
    if (paint->isFakeBoldText()) {
        flags |= Font::kFakeBold;
    }
    mCurrentFont = Font::create(this, fontId, fontSize, flags);

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

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

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

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

    DefaultKeyedVector<int32_t, CachedGlyphInfo*> mCachedGlyphs;

@@ -122,6 +123,7 @@ protected:
    uint32_t mFontId;
    float mFontSize;
    int mFlags;
    uint32_t mItalicStyle;
};

class FontRenderer {
+14 −2
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ public class TextActivity extends Activity {
        private final Paint mLargePaint;
        private final Paint mStrikePaint;
        private final Paint mScaledPaint;
        private final Paint mSkewPaint;

        CustomTextView(Context c) {
            super(c);
@@ -57,6 +58,10 @@ public class TextActivity extends Activity {
            mScaledPaint = new Paint();
            mScaledPaint.setAntiAlias(true);
            mScaledPaint.setTextSize(16.0f);

            mSkewPaint = new Paint();
            mSkewPaint.setAntiAlias(true);
            mSkewPaint.setTextSize(16.0f);            
        }

        @Override
@@ -100,11 +105,18 @@ public class TextActivity extends Activity {
            mStrikePaint.setStrikeThruText(false);
            mStrikePaint.setUnderlineText(true);
            
            mSkewPaint.setTextSkewX(-0.25f);
            canvas.drawText("Hello OpenGL renderer!", 680, 200, mSkewPaint);
            mSkewPaint.setTextSkewX(0.5f);
            canvas.drawText("Hello OpenGL renderer!", 680, 230, mSkewPaint);
            mSkewPaint.setTextSkewX(0.0f);
            canvas.drawText("Hello OpenGL renderer!", 680, 260, mSkewPaint);

            mScaledPaint.setTextScaleX(0.5f);
            canvas.drawText("Hello OpenGL renderer!", 500, 200, mScaledPaint);
            mScaledPaint.setTextScaleX(2.0f);
            canvas.drawText("Hello OpenGL renderer!", 500, 230, mScaledPaint);
            mScaledPaint.setTextScaleX(1.0f);
            canvas.drawText("Hello OpenGL renderer!", 500, 230, mScaledPaint);
            mScaledPaint.setTextScaleX(2.0f);
            canvas.drawText("Hello OpenGL renderer!", 500, 260, mScaledPaint);
            
            canvas.save();