Title: [104876] trunk/Source/WebCore
Revision
104876
Author
ba...@chromium.org
Date
2012-01-12 16:27:48 -0800 (Thu, 12 Jan 2012)

Log Message

Move SimpleFontDataSkia.cpp to Source/WebCore/platform/graphics/skia
https://bugs.webkit.org/show_bug.cgi?id=76155

Reviewed by Tony Chang.

No new tests. No behavior change.

* PlatformBlackBerry.cmake:
* WebCore.gyp/WebCore.gyp:
* WebCore.gypi:
* platform/graphics/skia/SimpleFontDataSkia.cpp: Renamed from Source/WebCore/platform/graphics/harfbuzz/SimpleFontDataSkia.cpp.
(WebCore::SimpleFontData::platformInit):
(WebCore::SimpleFontData::platformCharWidthInit):
(WebCore::SimpleFontData::platformDestroy):
(WebCore::SimpleFontData::createScaledFontData):
(WebCore::SimpleFontData::smallCapsFontData):
(WebCore::SimpleFontData::emphasisMarkFontData):
(WebCore::SimpleFontData::containsCharacters):
(WebCore::SimpleFontData::determinePitch):
(WebCore::SimpleFontData::platformBoundsForGlyph):
(WebCore::SimpleFontData::platformWidthForGlyph):

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (104875 => 104876)


--- trunk/Source/WebCore/ChangeLog	2012-01-13 00:24:58 UTC (rev 104875)
+++ trunk/Source/WebCore/ChangeLog	2012-01-13 00:27:48 UTC (rev 104876)
@@ -1,3 +1,27 @@
+2012-01-12  Kenichi Ishibashi  <ba...@chromium.org>
+
+        Move SimpleFontDataSkia.cpp to Source/WebCore/platform/graphics/skia
+        https://bugs.webkit.org/show_bug.cgi?id=76155
+
+        Reviewed by Tony Chang.
+
+        No new tests. No behavior change.
+
+        * PlatformBlackBerry.cmake:
+        * WebCore.gyp/WebCore.gyp:
+        * WebCore.gypi:
+        * platform/graphics/skia/SimpleFontDataSkia.cpp: Renamed from Source/WebCore/platform/graphics/harfbuzz/SimpleFontDataSkia.cpp.
+        (WebCore::SimpleFontData::platformInit):
+        (WebCore::SimpleFontData::platformCharWidthInit):
+        (WebCore::SimpleFontData::platformDestroy):
+        (WebCore::SimpleFontData::createScaledFontData):
+        (WebCore::SimpleFontData::smallCapsFontData):
+        (WebCore::SimpleFontData::emphasisMarkFontData):
+        (WebCore::SimpleFontData::containsCharacters):
+        (WebCore::SimpleFontData::determinePitch):
+        (WebCore::SimpleFontData::platformBoundsForGlyph):
+        (WebCore::SimpleFontData::platformWidthForGlyph):
+
 2012-01-12  Benjamin Poulain  <bpoul...@apple.com>
 
         A Frame with frame flattening can be stuck in a state in which performPostLayoutTasks() is never executed

Modified: trunk/Source/WebCore/PlatformBlackBerry.cmake (104875 => 104876)


--- trunk/Source/WebCore/PlatformBlackBerry.cmake	2012-01-13 00:24:58 UTC (rev 104875)
+++ trunk/Source/WebCore/PlatformBlackBerry.cmake	2012-01-13 00:27:48 UTC (rev 104876)
@@ -46,9 +46,9 @@
     platform/graphics/harfbuzz/FontHarfBuzz.cpp
     platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp
     platform/graphics/harfbuzz/HarfBuzzSkia.cpp
-    platform/graphics/harfbuzz/SimpleFontDataHarfBuzz.cpp
     platform/graphics/skia/FontCacheSkia.cpp
     platform/graphics/skia/GlyphPageTreeNodeSkia.cpp
+    platform/graphics/skia/SimpleFontDataSkia.cpp
 )
 
 # Other sources

Modified: trunk/Source/WebCore/WebCore.gyp/WebCore.gyp (104875 => 104876)


--- trunk/Source/WebCore/WebCore.gyp/WebCore.gyp	2012-01-13 00:24:58 UTC (rev 104875)
+++ trunk/Source/WebCore/WebCore.gyp/WebCore.gyp	2012-01-13 00:27:48 UTC (rev 104876)
@@ -1493,7 +1493,7 @@
             ['include', 'platform/graphics/harfbuzz/FontHarfBuzz\\.cpp$'],
             ['include', 'platform/graphics/harfbuzz/FontPlatformDataHarfBuzz\\.cpp$'],
             ['include', 'platform/graphics/harfbuzz/HarfBuzzSkia\\.cpp$'],
-            ['include', 'platform/graphics/harfbuzz/SimpleFontDataSkia\\.cpp$'],
+            ['include', 'platform/graphics/skia/SimpleFontDataSkia\\.cpp$'],
           ],
         }, { # use_x11==0
           'sources/': [
@@ -1660,6 +1660,7 @@
             ['exclude', 'platform/graphics/mac/FontMac\\.mm$'],
             ['exclude', 'platform/graphics/skia/FontCacheSkia\\.cpp$'],
             ['exclude', 'platform/graphics/skia/GlyphPageTreeNodeSkia\\.cpp$'],
+            ['exclude', 'platform/graphics/skia/SimpleFontDataSkia\\.cpp$'],
             ['exclude', 'platform/chromium/DragImageChromiumMac\\.cpp$'],
           ],
         }],
@@ -1691,6 +1692,7 @@
             # platform/graphics/chromium, included by regex above, instead.
             ['exclude', 'platform/graphics/skia/FontCacheSkia\\.cpp$'],
             ['exclude', 'platform/graphics/skia/GlyphPageTreeNodeSkia\\.cpp$'],
+            ['exclude', 'platform/graphics/skia/SimpleFontDataSkia\\.cpp$'],
 
             # SystemInfo.cpp is useful and we don't want to copy it.
             ['include', 'platform/win/SystemInfo\\.cpp$'],
@@ -1707,7 +1709,7 @@
             ['include', 'platform/graphics/harfbuzz/FontHarfBuzz\\.cpp$'],
             ['include', 'platform/graphics/harfbuzz/FontPlatformDataHarfBuzz\\.cpp$'],
             ['include', 'platform/graphics/harfbuzz/HarfBuzzSkia\\.cpp$'],
-            ['include', 'platform/graphics/harfbuzz/SimpleFontDataSkia\\.cpp$'],
+            ['include', 'platform/graphics/skia/SimpleFontDataSkia\\.cpp$'],
           ],
         }, { # OS!="android"
           'sources/': [

Modified: trunk/Source/WebCore/WebCore.gypi (104875 => 104876)


--- trunk/Source/WebCore/WebCore.gypi	2012-01-13 00:24:58 UTC (rev 104875)
+++ trunk/Source/WebCore/WebCore.gypi	2012-01-13 00:27:48 UTC (rev 104876)
@@ -3807,7 +3807,6 @@
             'platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.h',
             'platform/graphics/harfbuzz/HarfBuzzSkia.cpp',
             'platform/graphics/harfbuzz/HarfBuzzSkia.h',
-            'platform/graphics/harfbuzz/SimpleFontDataSkia.cpp',
             'platform/graphics/mac/ColorMac.mm',
             'platform/graphics/mac/ComplexTextController.cpp',
             'platform/graphics/mac/ComplexTextController.h',
@@ -3935,6 +3934,7 @@
             'platform/graphics/skia/PlatformContextSkia.cpp',
             'platform/graphics/skia/PlatformContextSkia.h',
             'platform/graphics/skia/PlatformGraphics.h',
+            'platform/graphics/skia/SimpleFontDataSkia.cpp',
             'platform/graphics/skia/SkiaFontWin.cpp',
             'platform/graphics/skia/SkiaFontWin.h',
             'platform/graphics/skia/SkiaUtils.cpp',

Deleted: trunk/Source/WebCore/platform/graphics/harfbuzz/SimpleFontDataSkia.cpp (104875 => 104876)


--- trunk/Source/WebCore/platform/graphics/harfbuzz/SimpleFontDataSkia.cpp	2012-01-13 00:24:58 UTC (rev 104875)
+++ trunk/Source/WebCore/platform/graphics/harfbuzz/SimpleFontDataSkia.cpp	2012-01-13 00:27:48 UTC (rev 104876)
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Google Inc. All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * 
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "SimpleFontData.h"
-
-#include "FloatRect.h"
-#include "Font.h"
-#include "FontCache.h"
-#include "FontDescription.h"
-#include "Logging.h"
-#include "SkFontHost.h"
-#include "SkPaint.h"
-#include "SkTime.h"
-#include "SkTypeface.h"
-#include "SkTypes.h"
-#include "VDMXParser.h"
-
-namespace WebCore {
-
-// Smallcaps versions of fonts are 70% the size of the normal font.
-static const float smallCapsFraction = 0.7f;
-static const float emphasisMarkFraction = .5;
-// This is the largest VDMX table which we'll try to load and parse.
-static const size_t maxVDMXTableSize = 1024 * 1024; // 1 MB
-
-void SimpleFontData::platformInit()
-{
-    if (!m_platformData.size()) {
-        m_fontMetrics.reset();
-        m_avgCharWidth = 0;
-        m_maxCharWidth = 0;
-        return;
-    }
-
-    SkPaint paint;
-    SkPaint::FontMetrics metrics;
-
-    m_platformData.setupPaint(&paint);
-    paint.getFontMetrics(&metrics);
-    const SkFontID fontID = m_platformData.uniqueID();
-
-    static const uint32_t vdmxTag = SkSetFourByteTag('V', 'D', 'M', 'X');
-    int pixelSize = m_platformData.size() + 0.5;
-    int vdmxAscent, vdmxDescent;
-    bool isVDMXValid = false;
-
-    size_t vdmxSize = SkFontHost::GetTableSize(fontID, vdmxTag);
-    if (vdmxSize && vdmxSize < maxVDMXTableSize) {
-        uint8_t* vdmxTable = (uint8_t*) fastMalloc(vdmxSize);
-        if (vdmxTable
-            && SkFontHost::GetTableData(fontID, vdmxTag, 0, vdmxSize, vdmxTable) == vdmxSize
-            && parseVDMX(&vdmxAscent, &vdmxDescent, vdmxTable, vdmxSize, pixelSize))
-            isVDMXValid = true;
-        fastFree(vdmxTable);
-    }
-
-    float ascent;
-    float descent;
-
-    // Beware those who step here: This code is designed to match Win32 font
-    // metrics *exactly*.
-    if (isVDMXValid) {
-        ascent = vdmxAscent;
-        descent = -vdmxDescent;
-    } else {
-        SkScalar height = -metrics.fAscent + metrics.fDescent + metrics.fLeading;
-        ascent = SkScalarRound(-metrics.fAscent);
-        descent = SkScalarRound(height) - ascent;
-    }
-
-    m_fontMetrics.setAscent(ascent);
-    m_fontMetrics.setDescent(descent);
-
-    float xHeight;
-    if (metrics.fXHeight)
-        xHeight = metrics.fXHeight;
-    else {
-        // hack taken from the Windows port
-        xHeight = ascent * 0.56f;
-    }
-
-    float lineGap = SkScalarToFloat(metrics.fLeading);
-    m_fontMetrics.setLineGap(lineGap);
-    m_fontMetrics.setXHeight(xHeight);
-    m_fontMetrics.setLineSpacing(lroundf(ascent) + lroundf(descent) + lroundf(lineGap));
-
-    if (platformData().orientation() == Vertical && !isTextOrientationFallback()) {
-        static const uint32_t vheaTag = SkSetFourByteTag('v', 'h', 'e', 'a');
-        static const uint32_t vorgTag = SkSetFourByteTag('V', 'O', 'R', 'G');
-        size_t vheaSize = SkFontHost::GetTableSize(fontID, vheaTag);
-        size_t vorgSize = SkFontHost::GetTableSize(fontID, vorgTag);
-        if ((vheaSize > 0) || (vorgSize > 0))
-            m_hasVerticalGlyphs = true;
-    }
-
-    // In WebKit/WebCore/platform/graphics/SimpleFontData.cpp, m_spaceWidth is
-    // calculated for us, but we need to calculate m_maxCharWidth and
-    // m_avgCharWidth in order for text entry widgets to be sized correctly.
-
-    SkScalar xRange = metrics.fXMax - metrics.fXMin;
-    m_maxCharWidth = SkScalarRound(xRange * SkScalarRound(m_platformData.size()));
-
-    if (metrics.fAvgCharWidth)
-        m_avgCharWidth = SkScalarRound(metrics.fAvgCharWidth);
-    else {
-        m_avgCharWidth = xHeight;
-
-        GlyphPage* glyphPageZero = GlyphPageTreeNode::getRootChild(this, 0)->page();
-
-        if (glyphPageZero) {
-            static const UChar32 xChar = 'x';
-            const Glyph xGlyph = glyphPageZero->glyphDataForCharacter(xChar).glyph;
-
-            if (xGlyph)
-                m_avgCharWidth = widthForGlyph(xGlyph);
-        }
-    }
-}
-
-void SimpleFontData::platformCharWidthInit()
-{
-    // charwidths are set in platformInit.
-}
-
-void SimpleFontData::platformDestroy()
-{
-}
-
-PassOwnPtr<SimpleFontData> SimpleFontData::createScaledFontData(const FontDescription& fontDescription, float scaleFactor) const
-{
-    const float scaledSize = lroundf(fontDescription.computedSize() * scaleFactor);
-    return adoptPtr(new SimpleFontData(FontPlatformData(m_platformData, scaledSize), isCustomFont(), false));
-}
-
-SimpleFontData* SimpleFontData::smallCapsFontData(const FontDescription& fontDescription) const
-{
-    if (!m_derivedFontData)
-        m_derivedFontData = DerivedFontData::create(isCustomFont());
-    if (!m_derivedFontData->smallCaps)
-        m_derivedFontData->smallCaps = createScaledFontData(fontDescription, smallCapsFraction);
-
-    return m_derivedFontData->smallCaps.get();
-}
-
-SimpleFontData* SimpleFontData::emphasisMarkFontData(const FontDescription& fontDescription) const
-{
-    if (!m_derivedFontData)
-        m_derivedFontData = DerivedFontData::create(isCustomFont());
-    if (!m_derivedFontData->emphasisMark)
-        m_derivedFontData->emphasisMark = createScaledFontData(fontDescription, emphasisMarkFraction);
-
-    return m_derivedFontData->emphasisMark.get();
-}
-
-bool SimpleFontData::containsCharacters(const UChar* characters, int length) const
-{
-    SkPaint paint;
-    static const unsigned maxBufferCount = 64;
-    uint16_t glyphs[maxBufferCount];
-
-    m_platformData.setupPaint(&paint);
-    paint.setTextEncoding(SkPaint::kUTF16_TextEncoding);
-
-    while (length > 0) {
-        int n = SkMin32(length, SK_ARRAY_COUNT(glyphs));
-
-        // textToGlyphs takes a byte count so we double the character count.
-        int count = paint.textToGlyphs(characters, n * 2, glyphs);
-        for (int i = 0; i < count; i++) {
-            if (!glyphs[i])
-                return false; // missing glyph
-        }
-
-        characters += n;
-        length -= n;
-    }
-
-    return true;
-}
-
-void SimpleFontData::determinePitch()
-{
-    m_treatAsFixedPitch = platformData().isFixedPitch();
-}
-
-FloatRect SimpleFontData::platformBoundsForGlyph(Glyph) const
-{
-    return FloatRect();
-}
-    
-float SimpleFontData::platformWidthForGlyph(Glyph glyph) const
-{
-    if (!m_platformData.size())
-        return 0;
-
-    SkASSERT(sizeof(glyph) == 2); // compile-time assert
-
-    SkPaint paint;
-
-    m_platformData.setupPaint(&paint);
-
-    paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
-    SkScalar width = paint.measureText(&glyph, 2);
-
-    // Though WebKit supports non-integral advances, Skia only supports them
-    // for "subpixel" (distinct from LCD subpixel antialiasing) text, which
-    // we don't use.
-    return round(SkScalarToFloat(width));
-}
-
-} // namespace WebCore

Copied: trunk/Source/WebCore/platform/graphics/skia/SimpleFontDataSkia.cpp (from rev 104874, trunk/Source/WebCore/platform/graphics/harfbuzz/SimpleFontDataSkia.cpp) (0 => 104876)


--- trunk/Source/WebCore/platform/graphics/skia/SimpleFontDataSkia.cpp	                        (rev 0)
+++ trunk/Source/WebCore/platform/graphics/skia/SimpleFontDataSkia.cpp	2012-01-13 00:27:48 UTC (rev 104876)
@@ -0,0 +1,239 @@
+/*
+ * Copyright (c) 2008, 2009, Google Inc. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * 
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "SimpleFontData.h"
+
+#include "FloatRect.h"
+#include "Font.h"
+#include "FontCache.h"
+#include "FontDescription.h"
+#include "Logging.h"
+#include "SkFontHost.h"
+#include "SkPaint.h"
+#include "SkTime.h"
+#include "SkTypeface.h"
+#include "SkTypes.h"
+#include "VDMXParser.h"
+
+namespace WebCore {
+
+// Smallcaps versions of fonts are 70% the size of the normal font.
+static const float smallCapsFraction = 0.7f;
+static const float emphasisMarkFraction = .5;
+// This is the largest VDMX table which we'll try to load and parse.
+static const size_t maxVDMXTableSize = 1024 * 1024; // 1 MB
+
+void SimpleFontData::platformInit()
+{
+    if (!m_platformData.size()) {
+        m_fontMetrics.reset();
+        m_avgCharWidth = 0;
+        m_maxCharWidth = 0;
+        return;
+    }
+
+    SkPaint paint;
+    SkPaint::FontMetrics metrics;
+
+    m_platformData.setupPaint(&paint);
+    paint.getFontMetrics(&metrics);
+    const SkFontID fontID = m_platformData.uniqueID();
+
+    static const uint32_t vdmxTag = SkSetFourByteTag('V', 'D', 'M', 'X');
+    int pixelSize = m_platformData.size() + 0.5;
+    int vdmxAscent, vdmxDescent;
+    bool isVDMXValid = false;
+
+    size_t vdmxSize = SkFontHost::GetTableSize(fontID, vdmxTag);
+    if (vdmxSize && vdmxSize < maxVDMXTableSize) {
+        uint8_t* vdmxTable = (uint8_t*) fastMalloc(vdmxSize);
+        if (vdmxTable
+            && SkFontHost::GetTableData(fontID, vdmxTag, 0, vdmxSize, vdmxTable) == vdmxSize
+            && parseVDMX(&vdmxAscent, &vdmxDescent, vdmxTable, vdmxSize, pixelSize))
+            isVDMXValid = true;
+        fastFree(vdmxTable);
+    }
+
+    float ascent;
+    float descent;
+
+    // Beware those who step here: This code is designed to match Win32 font
+    // metrics *exactly*.
+    if (isVDMXValid) {
+        ascent = vdmxAscent;
+        descent = -vdmxDescent;
+    } else {
+        SkScalar height = -metrics.fAscent + metrics.fDescent + metrics.fLeading;
+        ascent = SkScalarRound(-metrics.fAscent);
+        descent = SkScalarRound(height) - ascent;
+    }
+
+    m_fontMetrics.setAscent(ascent);
+    m_fontMetrics.setDescent(descent);
+
+    float xHeight;
+    if (metrics.fXHeight)
+        xHeight = metrics.fXHeight;
+    else {
+        // hack taken from the Windows port
+        xHeight = ascent * 0.56f;
+    }
+
+    float lineGap = SkScalarToFloat(metrics.fLeading);
+    m_fontMetrics.setLineGap(lineGap);
+    m_fontMetrics.setXHeight(xHeight);
+    m_fontMetrics.setLineSpacing(lroundf(ascent) + lroundf(descent) + lroundf(lineGap));
+
+    if (platformData().orientation() == Vertical && !isTextOrientationFallback()) {
+        static const uint32_t vheaTag = SkSetFourByteTag('v', 'h', 'e', 'a');
+        static const uint32_t vorgTag = SkSetFourByteTag('V', 'O', 'R', 'G');
+        size_t vheaSize = SkFontHost::GetTableSize(fontID, vheaTag);
+        size_t vorgSize = SkFontHost::GetTableSize(fontID, vorgTag);
+        if ((vheaSize > 0) || (vorgSize > 0))
+            m_hasVerticalGlyphs = true;
+    }
+
+    // In WebKit/WebCore/platform/graphics/SimpleFontData.cpp, m_spaceWidth is
+    // calculated for us, but we need to calculate m_maxCharWidth and
+    // m_avgCharWidth in order for text entry widgets to be sized correctly.
+
+    SkScalar xRange = metrics.fXMax - metrics.fXMin;
+    m_maxCharWidth = SkScalarRound(xRange * SkScalarRound(m_platformData.size()));
+
+    if (metrics.fAvgCharWidth)
+        m_avgCharWidth = SkScalarRound(metrics.fAvgCharWidth);
+    else {
+        m_avgCharWidth = xHeight;
+
+        GlyphPage* glyphPageZero = GlyphPageTreeNode::getRootChild(this, 0)->page();
+
+        if (glyphPageZero) {
+            static const UChar32 xChar = 'x';
+            const Glyph xGlyph = glyphPageZero->glyphDataForCharacter(xChar).glyph;
+
+            if (xGlyph)
+                m_avgCharWidth = widthForGlyph(xGlyph);
+        }
+    }
+}
+
+void SimpleFontData::platformCharWidthInit()
+{
+    // charwidths are set in platformInit.
+}
+
+void SimpleFontData::platformDestroy()
+{
+}
+
+PassOwnPtr<SimpleFontData> SimpleFontData::createScaledFontData(const FontDescription& fontDescription, float scaleFactor) const
+{
+    const float scaledSize = lroundf(fontDescription.computedSize() * scaleFactor);
+    return adoptPtr(new SimpleFontData(FontPlatformData(m_platformData, scaledSize), isCustomFont(), false));
+}
+
+SimpleFontData* SimpleFontData::smallCapsFontData(const FontDescription& fontDescription) const
+{
+    if (!m_derivedFontData)
+        m_derivedFontData = DerivedFontData::create(isCustomFont());
+    if (!m_derivedFontData->smallCaps)
+        m_derivedFontData->smallCaps = createScaledFontData(fontDescription, smallCapsFraction);
+
+    return m_derivedFontData->smallCaps.get();
+}
+
+SimpleFontData* SimpleFontData::emphasisMarkFontData(const FontDescription& fontDescription) const
+{
+    if (!m_derivedFontData)
+        m_derivedFontData = DerivedFontData::create(isCustomFont());
+    if (!m_derivedFontData->emphasisMark)
+        m_derivedFontData->emphasisMark = createScaledFontData(fontDescription, emphasisMarkFraction);
+
+    return m_derivedFontData->emphasisMark.get();
+}
+
+bool SimpleFontData::containsCharacters(const UChar* characters, int length) const
+{
+    SkPaint paint;
+    static const unsigned maxBufferCount = 64;
+    uint16_t glyphs[maxBufferCount];
+
+    m_platformData.setupPaint(&paint);
+    paint.setTextEncoding(SkPaint::kUTF16_TextEncoding);
+
+    while (length > 0) {
+        int n = SkMin32(length, SK_ARRAY_COUNT(glyphs));
+
+        // textToGlyphs takes a byte count so we double the character count.
+        int count = paint.textToGlyphs(characters, n * 2, glyphs);
+        for (int i = 0; i < count; i++) {
+            if (!glyphs[i])
+                return false; // missing glyph
+        }
+
+        characters += n;
+        length -= n;
+    }
+
+    return true;
+}
+
+void SimpleFontData::determinePitch()
+{
+    m_treatAsFixedPitch = platformData().isFixedPitch();
+}
+
+FloatRect SimpleFontData::platformBoundsForGlyph(Glyph) const
+{
+    return FloatRect();
+}
+    
+float SimpleFontData::platformWidthForGlyph(Glyph glyph) const
+{
+    if (!m_platformData.size())
+        return 0;
+
+    SkASSERT(sizeof(glyph) == 2); // compile-time assert
+
+    SkPaint paint;
+
+    m_platformData.setupPaint(&paint);
+
+    paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
+    SkScalar width = paint.measureText(&glyph, 2);
+
+    // Though WebKit supports non-integral advances, Skia only supports them
+    // for "subpixel" (distinct from LCD subpixel antialiasing) text, which
+    // we don't use.
+    return round(SkScalarToFloat(width));
+}
+
+} // namespace WebCore
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to