summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/hwui/FontRenderer.cpp19
-rw-r--r--libs/hwui/FontRenderer.h6
-rw-r--r--tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java16
3 files changed, 31 insertions, 10 deletions
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index d1fbfbaa1639..c080501df338 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -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();
diff --git a/libs/hwui/FontRenderer.h b/libs/hwui/FontRenderer.h
index 40572c6667b9..10058125a8e1 100644
--- a/libs/hwui/FontRenderer.h
+++ b/libs/hwui/FontRenderer.h
@@ -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 {
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java
index 1b79cb60097b..e7f431c48a1b 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java
@@ -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();