summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/graphics/android/FontPlatformDataAndroid.cpp
diff options
context:
space:
mode:
authorclaireho <chinglanho@gmail.com>2011-10-12 18:37:58 -0700
committerclaireho <chinglanho@gmail.com>2011-10-17 10:15:59 -0700
commit295fd960c28a38cfa7a28d4b8f68f474394f7fb0 (patch)
tree0b67dc5791e552085f96df636b453745b9b0e48f /Source/WebCore/platform/graphics/android/FontPlatformDataAndroid.cpp
parentc13fe17594dff1d9e702affd7cba2561d6fa3bef (diff)
downloadexternal_webkit-295fd960c28a38cfa7a28d4b8f68f474394f7fb0.zip
external_webkit-295fd960c28a38cfa7a28d4b8f68f474394f7fb0.tar.gz
external_webkit-295fd960c28a38cfa7a28d4b8f68f474394f7fb0.tar.bz2
Reapply CL for "Vertical Writing Mode" support.
Bug 5094208 - Browser does not handle Japanese text in vertical writing mode. This changeset syncs up with Chrome's implementation for vertical text rendering. It 1. Adds fontOrientation and textOrientation to FontPlatformData. 2. Rotates the text in drawGlyphs for vertical writing mode. Here are the changesets for Chrome's vertical writinig mode support: 1. http://trac.webkit.org/changeset/74232 2. http://trac.webkit.org/changeset/80610 3. http://trac.webkit.org/changeset/80654 This CL re-applies reverted CL136684(https://android-git.corp.google.com/g/#/c/136684/). CL136684 was rollbacked because 2 constructors in FontPlatformDataAndroid.cpp did not have the init for fontOrientation and textOrientation. That caused the inconsistent comparison while FontCache.cpp tries to get the cached font and falls into an infinite loop in HashTable.h:656 Change-Id: I45700dcc8c9266e1b5ae8e588205f24825ca4317
Diffstat (limited to 'Source/WebCore/platform/graphics/android/FontPlatformDataAndroid.cpp')
-rw-r--r--Source/WebCore/platform/graphics/android/FontPlatformDataAndroid.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/Source/WebCore/platform/graphics/android/FontPlatformDataAndroid.cpp b/Source/WebCore/platform/graphics/android/FontPlatformDataAndroid.cpp
index 8e77b5b..3c90246 100644
--- a/Source/WebCore/platform/graphics/android/FontPlatformDataAndroid.cpp
+++ b/Source/WebCore/platform/graphics/android/FontPlatformDataAndroid.cpp
@@ -74,7 +74,8 @@ FontPlatformData::RefCountedHarfbuzzFace::~RefCountedHarfbuzzFace()
}
FontPlatformData::FontPlatformData()
- : mTypeface(NULL), mTextSize(0), mFakeBold(false), mFakeItalic(false)
+ : mTypeface(NULL), mTextSize(0), mFakeBold(false), mFakeItalic(false),
+ mOrientation(Horizontal), mTextOrientation(TextOrientationVerticalRight)
{
inc_count();
trace(1);
@@ -92,13 +93,17 @@ FontPlatformData::FontPlatformData(const FontPlatformData& src)
mFakeBold = src.mFakeBold;
mFakeItalic = src.mFakeItalic;
m_harfbuzzFace = src.m_harfbuzzFace;
+ mOrientation = src.mOrientation;
+ mTextOrientation = src.mTextOrientation;
inc_count();
trace(2);
}
-FontPlatformData::FontPlatformData(SkTypeface* tf, float textSize, bool fakeBold, bool fakeItalic)
- : mTypeface(tf), mTextSize(textSize), mFakeBold(fakeBold), mFakeItalic(fakeItalic)
+FontPlatformData::FontPlatformData(SkTypeface* tf, float textSize, bool fakeBold, bool fakeItalic,
+ FontOrientation orientation, TextOrientation textOrientation)
+ : mTypeface(tf), mTextSize(textSize), mFakeBold(fakeBold), mFakeItalic(fakeItalic),
+ mOrientation(orientation), mTextOrientation(textOrientation)
{
if (hashTableDeletedFontValue() != mTypeface) {
SkSafeRef(mTypeface);
@@ -110,7 +115,7 @@ FontPlatformData::FontPlatformData(SkTypeface* tf, float textSize, bool fakeBold
FontPlatformData::FontPlatformData(const FontPlatformData& src, float textSize)
: mTypeface(src.mTypeface), mTextSize(textSize), mFakeBold(src.mFakeBold), mFakeItalic(src.mFakeItalic),
- m_harfbuzzFace(src.m_harfbuzzFace)
+ m_harfbuzzFace(src.m_harfbuzzFace), mOrientation(src.mOrientation), mTextOrientation(src.mTextOrientation)
{
if (hashTableDeletedFontValue() != mTypeface) {
SkSafeRef(mTypeface);
@@ -121,7 +126,8 @@ FontPlatformData::FontPlatformData(const FontPlatformData& src, float textSize)
}
FontPlatformData::FontPlatformData(float size, bool bold, bool oblique)
- : mTypeface(NULL), mTextSize(size), mFakeBold(bold), mFakeItalic(oblique)
+ : mTypeface(NULL), mTextSize(size), mFakeBold(bold), mFakeItalic(oblique),
+ mOrientation(Horizontal), mTextOrientation(TextOrientationVerticalRight)
{
inc_count();
trace(5);
@@ -129,7 +135,8 @@ FontPlatformData::FontPlatformData(float size, bool bold, bool oblique)
FontPlatformData::FontPlatformData(const FontPlatformData& src, SkTypeface* tf)
: mTypeface(tf), mTextSize(src.mTextSize), mFakeBold(src.mFakeBold),
- mFakeItalic(src.mFakeItalic)
+ mFakeItalic(src.mFakeItalic), mOrientation(src.mOrientation),
+ mTextOrientation(src.mTextOrientation)
{
if (hashTableDeletedFontValue() != mTypeface) {
SkSafeRef(mTypeface);
@@ -165,6 +172,8 @@ FontPlatformData& FontPlatformData::operator=(const FontPlatformData& src)
mFakeBold = src.mFakeBold;
mFakeItalic = src.mFakeItalic;
m_harfbuzzFace = src.m_harfbuzzFace;
+ mOrientation = src.mOrientation;
+ mTextOrientation = src.mTextOrientation;
return *this;
}
@@ -204,7 +213,9 @@ bool FontPlatformData::operator==(const FontPlatformData& a) const
return mTypeface == a.mTypeface &&
mTextSize == a.mTextSize &&
mFakeBold == a.mFakeBold &&
- mFakeItalic == a.mFakeItalic;
+ mFakeItalic == a.mFakeItalic &&
+ mOrientation == a.mOrientation &&
+ mTextOrientation == a.mTextOrientation;
}
unsigned FontPlatformData::hash() const
@@ -219,7 +230,8 @@ unsigned FontPlatformData::hash() const
uint32_t sizeAsInt = *reinterpret_cast<const uint32_t*>(&mTextSize);
- h ^= 0x01010101 * (((int)mFakeBold << 1) | (int)mFakeItalic);
+ h ^= 0x01010101 * ((static_cast<int>(mTextOrientation) << 3) | (static_cast<int>(mOrientation) << 2) |
+ ((int)mFakeBold << 1) | (int)mFakeItalic);
h ^= sizeAsInt;
return h;
}