Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(341)

Unified Diff: webkit/port/platform/graphics/chromium/GlyphPageTreeNodeLinux.cpp

Issue 10414: Use Skia to render fonts (Closed)
Patch Set: Created 12 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/port/platform/graphics/chromium/GlyphPageTreeNodeLinux.cpp
diff --git a/webkit/port/platform/graphics/chromium/GlyphPageTreeNodeLinux.cpp b/webkit/port/platform/graphics/chromium/GlyphPageTreeNodeLinux.cpp
index 1e7eb7908031381a2e30509236e6f8d0f9cc907e..fd5aa4e706d08077d17b52f1fb19cd5869b986cc 100644
--- a/webkit/port/platform/graphics/chromium/GlyphPageTreeNodeLinux.cpp
+++ b/webkit/port/platform/graphics/chromium/GlyphPageTreeNodeLinux.cpp
@@ -30,44 +30,43 @@
#include "config.h"
#include "GlyphPageTreeNode.h"
-// This PANGO_ENABLE_BACKEND define lets us get at some of the internal Pango
-// call which we need. This include must be here otherwise we include pango.h
-// via another route (without the define) and that sets the include guard.
-// Then, when we try to include it in the future the guard stops us getting the
-// functions that we need.
-#define PANGO_ENABLE_BACKEND
-#include <pango/pango.h>
-#include <pango/pangofc-font.h>
-
#include "Font.h"
#include "NotImplemented.h"
#include "SimpleFontData.h"
+#include "SkTemplates.h"
+#include "SkPaint.h"
+#include "SkUtils.h"
+
namespace WebCore
{
bool GlyphPage::fill(unsigned offset, unsigned length, UChar* buffer, unsigned bufferLength, const SimpleFontData* fontData)
{
- // The bufferLength will be greater than the glyph page size if the buffer has Unicode supplementary characters.
- // We won't support this for now.
- if (bufferLength > GlyphPage::size)
+ if (SkUTF16_IsHighSurrogate(buffer[bufferLength-1])) {
+ SkDebugf("%s last char is high-surrogate", __FUNCTION__);
return false;
-
- if (!fontData->m_font.m_font || fontData->m_font.m_font == reinterpret_cast<PangoFont*>(-1))
+ }
+
+ SkPaint paint;
+ fontData->platformData().setupPaint(&paint);
+ paint.setTextEncoding(SkPaint::kUTF16_TextEncoding);
+
+ SkAutoSTMalloc <GlyphPage::size, uint16_t> glyphStorage(length);
+ uint16_t* glyphs = glyphStorage.get();
+ // textToGlyphs takes a byte count, not a glyph count so we multiply by two.
+ unsigned count = paint.textToGlyphs(buffer, bufferLength * 2, glyphs);
+ if (count != length) {
+ SkDebugf("%s count != length\n", __FUNCTION__);
return false;
+ }
- bool haveGlyphs = false;
+ unsigned allGlyphs = 0; // track if any of the glyphIDs are non-zero
for (unsigned i = 0; i < length; i++) {
- Glyph glyph = pango_fc_font_get_glyph(PANGO_FC_FONT(fontData->m_font.m_font), buffer[i]);
- if (!glyph)
- setGlyphDataForIndex(offset + i, 0, 0);
- else {
- setGlyphDataForIndex(offset + i, glyph, fontData);
- haveGlyphs = true;
- }
+ setGlyphDataForIndex(offset + i, glyphs[i], fontData);
+ allGlyphs |= glyphs[i];
}
-
- return haveGlyphs;
+ return allGlyphs != 0;
}
} // namespace WebCore

Powered by Google App Engine
This is Rietveld 408576698