summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/graphics/android/FontAndroid.cpp
diff options
context:
space:
mode:
authorDerek Sollenberger <djsollen@google.com>2012-03-19 12:45:18 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-03-19 12:45:18 -0700
commit2b38e74b4a37bc93a0f2a21af60dd2ce4d01c5d8 (patch)
tree08539a686faafdf2f7ba1dd723f9d12e37565919 /Source/WebCore/platform/graphics/android/FontAndroid.cpp
parent28b076dbd55a7045ac661ea6bb92ce54291c6ed7 (diff)
parent916ae1fb7445b6b919a72f195721d8dc09ddb1fc (diff)
downloadexternal_webkit-2b38e74b4a37bc93a0f2a21af60dd2ce4d01c5d8.zip
external_webkit-2b38e74b4a37bc93a0f2a21af60dd2ce4d01c5d8.tar.gz
external_webkit-2b38e74b4a37bc93a0f2a21af60dd2ce4d01c5d8.tar.bz2
Merge "Draw vertical text using by setting verticalText flag in SkPaint."
Diffstat (limited to 'Source/WebCore/platform/graphics/android/FontAndroid.cpp')
-rw-r--r--Source/WebCore/platform/graphics/android/FontAndroid.cpp39
1 files changed, 20 insertions, 19 deletions
diff --git a/Source/WebCore/platform/graphics/android/FontAndroid.cpp b/Source/WebCore/platform/graphics/android/FontAndroid.cpp
index 6ae839b..c8b9488 100644
--- a/Source/WebCore/platform/graphics/android/FontAndroid.cpp
+++ b/Source/WebCore/platform/graphics/android/FontAndroid.cpp
@@ -88,6 +88,8 @@ static bool setupForText(SkPaint* paint, GraphicsContext* gc,
if (!mode)
return false;
+ paint->setVerticalText(font->platformData().orientation() == Vertical);
+
FloatSize shadowOffset;
float shadowBlur;
Color shadowColor;
@@ -193,8 +195,6 @@ void Font::drawGlyphs(GraphicsContext* gc, const SimpleFontData* font,
const GlyphBufferAdvance* adv = glyphBuffer.advances(from);
SkAutoSTMalloc<32, SkPoint> storage(numGlyphs), storage2(numGlyphs), storage3(numGlyphs);
SkPoint* pos = storage.get();
- SkPoint* vPosBegin = storage2.get();
- SkPoint* vPosEnd = storage3.get();
SkCanvas* canvas = gc->platformContext()->mCanvas;
@@ -202,6 +202,9 @@ void Font::drawGlyphs(GraphicsContext* gc, const SimpleFontData* font,
point.xy + [width, height, width, height, ...], so we have to convert
*/
+ if (font->platformData().orientation() == Vertical)
+ y += SkFloatToScalar(font->fontMetrics().floatAscent(IdeographicBaseline) - font->fontMetrics().floatAscent());
+
if (EmojiFont::IsAvailable()) {
// set filtering, to make scaled images look nice(r)
paint.setFilterBitmap(true);
@@ -231,27 +234,25 @@ void Font::drawGlyphs(GraphicsContext* gc, const SimpleFontData* font,
localCount * sizeof(uint16_t),
&pos[localIndex], paint);
} else {
- bool isVertical = font->platformData().orientation() == Vertical;
for (int i = 0; i < numGlyphs; i++) {
pos[i].set(x, y);
y += SkFloatToScalar(adv[i].height());
- if (isVertical) {
- SkScalar myWidth = SkFloatToScalar(adv[i].width());
- vPosBegin[i].set(x + myWidth, y);
- vPosEnd[i].set(x + myWidth, y - myWidth);
- x += myWidth;
-
- SkPath path;
- path.reset();
- path.moveTo(vPosBegin[i]);
- path.lineTo(vPosEnd[i]);
- canvas->drawTextOnPath(glyphs + i, 2, path, 0, paint);
- }
- else
- x += SkFloatToScalar(adv[i].width());
+ x += SkFloatToScalar(adv[i].width());
}
- if (!isVertical)
- canvas->drawPosText(glyphs, numGlyphs * sizeof(uint16_t), pos, paint);
+
+ if (font->platformData().orientation() == Vertical) {
+ canvas->save();
+ canvas->rotate(-90);
+ SkMatrix rotator;
+ rotator.reset();
+ rotator.setRotate(90);
+ rotator.mapPoints(pos, numGlyphs);
+ }
+
+ canvas->drawPosText(glyphs, numGlyphs * sizeof(uint16_t), pos, paint);
+
+ if (font->platformData().orientation() == Vertical)
+ canvas->restore();
}
}