Loading libs/hwui/FontRenderer.cpp +15 −6 Original line number Diff line number Diff line Loading @@ -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) { } Loading Loading @@ -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; } Loading Loading @@ -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(); Loading libs/hwui/FontRenderer.h +5 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -157,6 +158,8 @@ protected: int mFlags; uint32_t mItalicStyle; uint32_t mScaleX; SkPaint::Style mStyle; uint32_t mStrokeWidth; }; /////////////////////////////////////////////////////////////////////////////// Loading tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java +10 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading
libs/hwui/FontRenderer.cpp +15 −6 Original line number Diff line number Diff line Loading @@ -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) { } Loading Loading @@ -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; } Loading Loading @@ -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(); Loading
libs/hwui/FontRenderer.h +5 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -157,6 +158,8 @@ protected: int mFlags; uint32_t mItalicStyle; uint32_t mScaleX; SkPaint::Style mStyle; uint32_t mStrokeWidth; }; /////////////////////////////////////////////////////////////////////////////// Loading
tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java +10 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading