Loading libs/hwui/FontRenderer.cpp +13 −6 Original line number Original line Diff line number Diff line Loading @@ -38,8 +38,10 @@ namespace uirenderer { // Font // Font /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// Font::Font(FontRenderer* state, uint32_t fontId, float fontSize, int flags) : Font::Font(FontRenderer* state, uint32_t fontId, float fontSize, mState(state), mFontId(fontId), mFontSize(fontSize), mFlags(flags) { int flags, uint32_t italicStyle) : mState(state), mFontId(fontId), mFontSize(fontSize), mFlags(flags), mItalicStyle(italicStyle) { } } Loading Loading @@ -275,17 +277,19 @@ Font::CachedGlyphInfo* Font::cacheGlyph(SkPaint* paint, int32_t glyph) { return newGlyph; 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; Vector<Font*> &activeFonts = state->mActiveFonts; for (uint32_t i = 0; i < activeFonts.size(); i++) { for (uint32_t i = 0; i < activeFonts.size(); i++) { Font* font = activeFonts[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; return font; } } } } Font* newFont = new Font(state, fontId, fontSize, flags); Font* newFont = new Font(state, fontId, fontSize, flags, italicStyle); activeFonts.push(newFont); activeFonts.push(newFont); return newFont; return newFont; } } Loading Loading @@ -638,7 +642,10 @@ void FontRenderer::setFont(SkPaint* paint, uint32_t fontId, float fontSize) { if (paint->isFakeBoldText()) { if (paint->isFakeBoldText()) { flags |= Font::kFakeBold; 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; const float maxPrecacheFontSize = 40.0f; bool isNewFont = currentNumFonts != mActiveFonts.size(); bool isNewFont = currentNumFonts != mActiveFonts.size(); Loading libs/hwui/FontRenderer.h +4 −2 Original line number Original line Diff line number Diff line Loading @@ -57,7 +57,8 @@ public: /** /** * Creates a new font associated with the specified font state. * 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: protected: friend class FontRenderer; friend class FontRenderer; Loading Loading @@ -103,7 +104,7 @@ protected: SkFixed mRsbDelta; 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; DefaultKeyedVector<int32_t, CachedGlyphInfo*> mCachedGlyphs; Loading @@ -122,6 +123,7 @@ protected: uint32_t mFontId; uint32_t mFontId; float mFontSize; float mFontSize; int mFlags; int mFlags; uint32_t mItalicStyle; }; }; class FontRenderer { class FontRenderer { Loading tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java +14 −2 Original line number Original line Diff line number Diff line Loading @@ -37,6 +37,7 @@ public class TextActivity extends Activity { private final Paint mLargePaint; private final Paint mLargePaint; private final Paint mStrikePaint; private final Paint mStrikePaint; private final Paint mScaledPaint; private final Paint mScaledPaint; private final Paint mSkewPaint; CustomTextView(Context c) { CustomTextView(Context c) { super(c); super(c); Loading @@ -57,6 +58,10 @@ public class TextActivity extends Activity { mScaledPaint = new Paint(); mScaledPaint = new Paint(); mScaledPaint.setAntiAlias(true); mScaledPaint.setAntiAlias(true); mScaledPaint.setTextSize(16.0f); mScaledPaint.setTextSize(16.0f); mSkewPaint = new Paint(); mSkewPaint.setAntiAlias(true); mSkewPaint.setTextSize(16.0f); } } @Override @Override Loading Loading @@ -100,11 +105,18 @@ public class TextActivity extends Activity { mStrikePaint.setStrikeThruText(false); mStrikePaint.setStrikeThruText(false); mStrikePaint.setUnderlineText(true); 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); mScaledPaint.setTextScaleX(0.5f); canvas.drawText("Hello OpenGL renderer!", 500, 200, mScaledPaint); canvas.drawText("Hello OpenGL renderer!", 500, 200, mScaledPaint); mScaledPaint.setTextScaleX(2.0f); canvas.drawText("Hello OpenGL renderer!", 500, 230, mScaledPaint); mScaledPaint.setTextScaleX(1.0f); 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.drawText("Hello OpenGL renderer!", 500, 260, mScaledPaint); canvas.save(); canvas.save(); Loading Loading
libs/hwui/FontRenderer.cpp +13 −6 Original line number Original line Diff line number Diff line Loading @@ -38,8 +38,10 @@ namespace uirenderer { // Font // Font /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// Font::Font(FontRenderer* state, uint32_t fontId, float fontSize, int flags) : Font::Font(FontRenderer* state, uint32_t fontId, float fontSize, mState(state), mFontId(fontId), mFontSize(fontSize), mFlags(flags) { int flags, uint32_t italicStyle) : mState(state), mFontId(fontId), mFontSize(fontSize), mFlags(flags), mItalicStyle(italicStyle) { } } Loading Loading @@ -275,17 +277,19 @@ Font::CachedGlyphInfo* Font::cacheGlyph(SkPaint* paint, int32_t glyph) { return newGlyph; 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; Vector<Font*> &activeFonts = state->mActiveFonts; for (uint32_t i = 0; i < activeFonts.size(); i++) { for (uint32_t i = 0; i < activeFonts.size(); i++) { Font* font = activeFonts[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; return font; } } } } Font* newFont = new Font(state, fontId, fontSize, flags); Font* newFont = new Font(state, fontId, fontSize, flags, italicStyle); activeFonts.push(newFont); activeFonts.push(newFont); return newFont; return newFont; } } Loading Loading @@ -638,7 +642,10 @@ void FontRenderer::setFont(SkPaint* paint, uint32_t fontId, float fontSize) { if (paint->isFakeBoldText()) { if (paint->isFakeBoldText()) { flags |= Font::kFakeBold; 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; const float maxPrecacheFontSize = 40.0f; bool isNewFont = currentNumFonts != mActiveFonts.size(); bool isNewFont = currentNumFonts != mActiveFonts.size(); Loading
libs/hwui/FontRenderer.h +4 −2 Original line number Original line Diff line number Diff line Loading @@ -57,7 +57,8 @@ public: /** /** * Creates a new font associated with the specified font state. * 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: protected: friend class FontRenderer; friend class FontRenderer; Loading Loading @@ -103,7 +104,7 @@ protected: SkFixed mRsbDelta; 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; DefaultKeyedVector<int32_t, CachedGlyphInfo*> mCachedGlyphs; Loading @@ -122,6 +123,7 @@ protected: uint32_t mFontId; uint32_t mFontId; float mFontSize; float mFontSize; int mFlags; int mFlags; uint32_t mItalicStyle; }; }; class FontRenderer { class FontRenderer { Loading
tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java +14 −2 Original line number Original line Diff line number Diff line Loading @@ -37,6 +37,7 @@ public class TextActivity extends Activity { private final Paint mLargePaint; private final Paint mLargePaint; private final Paint mStrikePaint; private final Paint mStrikePaint; private final Paint mScaledPaint; private final Paint mScaledPaint; private final Paint mSkewPaint; CustomTextView(Context c) { CustomTextView(Context c) { super(c); super(c); Loading @@ -57,6 +58,10 @@ public class TextActivity extends Activity { mScaledPaint = new Paint(); mScaledPaint = new Paint(); mScaledPaint.setAntiAlias(true); mScaledPaint.setAntiAlias(true); mScaledPaint.setTextSize(16.0f); mScaledPaint.setTextSize(16.0f); mSkewPaint = new Paint(); mSkewPaint.setAntiAlias(true); mSkewPaint.setTextSize(16.0f); } } @Override @Override Loading Loading @@ -100,11 +105,18 @@ public class TextActivity extends Activity { mStrikePaint.setStrikeThruText(false); mStrikePaint.setStrikeThruText(false); mStrikePaint.setUnderlineText(true); 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); mScaledPaint.setTextScaleX(0.5f); canvas.drawText("Hello OpenGL renderer!", 500, 200, mScaledPaint); canvas.drawText("Hello OpenGL renderer!", 500, 200, mScaledPaint); mScaledPaint.setTextScaleX(2.0f); canvas.drawText("Hello OpenGL renderer!", 500, 230, mScaledPaint); mScaledPaint.setTextScaleX(1.0f); 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.drawText("Hello OpenGL renderer!", 500, 260, mScaledPaint); canvas.save(); canvas.save(); Loading