diff options
-rw-r--r-- | skia/SConscript | 2 | ||||
-rw-r--r-- | skia/ports/SkFontHost_FreeType.cpp | 8 | ||||
-rw-r--r-- | skia/ports/SkFontHost_fontconfig.cpp | 6 | ||||
-rw-r--r-- | skia/ports/SkFontHost_gamma_none.cpp | 35 | ||||
-rw-r--r-- | webkit/port/platform/graphics/chromium/FontPlatformDataLinux.cpp | 4 | ||||
-rw-r--r-- | webkit/tools/test_shell/test_shell_gtk.cc | 38 |
6 files changed, 86 insertions, 7 deletions
diff --git a/skia/SConscript b/skia/SConscript index 8dfd26a..386a219 100644 --- a/skia/SConscript +++ b/skia/SConscript @@ -160,7 +160,7 @@ if env['PLATFORM'] == 'posix': input_files.remove('ports/SkFontHost_none.cpp') input_files.append('sgl/SkTypeface.cpp') input_files.append('ports/SkFontHost_FreeType.cpp') - input_files.append('ports/SkFontHost_gamma.cpp') + input_files.append('ports/SkFontHost_gamma_none.cpp') input_files.append('ports/SkFontHost_fontconfig.cpp') input_files.append('images/SkMMapStream.cpp') diff --git a/skia/ports/SkFontHost_FreeType.cpp b/skia/ports/SkFontHost_FreeType.cpp index 6430d2d..c10415d 100644 --- a/skia/ports/SkFontHost_FreeType.cpp +++ b/skia/ports/SkFontHost_FreeType.cpp @@ -329,7 +329,13 @@ SkScalerContext_FreeType::SkScalerContext_FreeType(const SkDescriptor* desc) #endif break; case kNormal_Hints: - flags |= FT_LOAD_FORCE_AUTOHINT; + // Uncommenting the following line disables the font's hinting + // tables. For test_shell we want font hinting on so that we can + // generate baselines that look at little like Firefox. It's + // expected that Mike Reed will rework this code sometime soon so + // we don't wish to make more extensive changes. + + // flags |= FT_LOAD_FORCE_AUTOHINT; break; } diff --git a/skia/ports/SkFontHost_fontconfig.cpp b/skia/ports/SkFontHost_fontconfig.cpp index 2836db3..cb95a60 100644 --- a/skia/ports/SkFontHost_fontconfig.cpp +++ b/skia/ports/SkFontHost_fontconfig.cpp @@ -206,7 +206,7 @@ SkTypeface* SkFontHost::FindTypeface(const SkTypeface* familyFace, FC_WEIGHT_BOLD : FC_WEIGHT_NORMAL; const int italic = style & SkTypeface::kItalic ? FC_SLANT_ITALIC : FC_SLANT_ROMAN; - FcPattern* match = FontMatch(FC_FULLNAME, FcTypeString, resolved_family_name, + FcPattern* match = FontMatch(FC_FAMILY, FcTypeString, resolved_family_name, FC_WEIGHT, FcTypeInteger, bold, FC_SLANT, FcTypeInteger, italic, NULL); @@ -301,14 +301,14 @@ SkScalerContext* SkFontHost::CreateFallbackScalerContext SkAutoDescriptor ad(sizeof(rec) + SkDescriptor::ComputeOverhead(1)); SkDescriptor* desc = ad.getDesc(); - + desc->init(); SkScalerContext::Rec* newRec = (SkScalerContext::Rec*)desc->addEntry(kRec_SkDescriptorTag, sizeof(rec), &rec); newRec->fFontID = id; desc->computeChecksum(); - + return SkFontHost::CreateScalerContext(desc); } diff --git a/skia/ports/SkFontHost_gamma_none.cpp b/skia/ports/SkFontHost_gamma_none.cpp new file mode 100644 index 0000000..cdc507a --- /dev/null +++ b/skia/ports/SkFontHost_gamma_none.cpp @@ -0,0 +1,35 @@ +/* Copyright 2008, Google Inc. +** +** Licensed under the Apache License, Version 2.0 (the "License");· +** you may not use this file except in compliance with the License.· +** You may obtain a copy of the License at· +** +** http://www.apache.org/licenses/LICENSE-2.0· +** +** Unless required by applicable law or agreed to in writing, software· +** distributed under the License is distributed on an "AS IS" BASIS,· +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.· +** See the License for the specific language governing permissions and· +** limitations under the License. +*/ + +// ----------------------------------------------------------------------------- +// This is a noop gamma implementation for systems where gamma is already +// corrected, or dealt with in a system wide fashion. For example, on X windows +// one uses the xgamma utility to set the server-wide gamma correction value. +// ----------------------------------------------------------------------------- + +#include "SkFontHost.h" +#include <math.h> + +void SkFontHost::GetGammaTables(const uint8_t* tables[2]) +{ + tables[0] = NULL; + tables[1] = NULL; +} + +int SkFontHost::ComputeGammaFlag(const SkPaint& paint) +{ + return 0; +} + diff --git a/webkit/port/platform/graphics/chromium/FontPlatformDataLinux.cpp b/webkit/port/platform/graphics/chromium/FontPlatformDataLinux.cpp index 0dba7f2..b047cb334 100644 --- a/webkit/port/platform/graphics/chromium/FontPlatformDataLinux.cpp +++ b/webkit/port/platform/graphics/chromium/FontPlatformDataLinux.cpp @@ -50,10 +50,10 @@ FontPlatformData& FontPlatformData::operator=(const FontPlatformData& src) m_textSize = src.m_textSize; m_fakeBold = src.m_fakeBold; m_fakeItalic = src.m_fakeItalic; - + return *this; } - + void FontPlatformData::setupPaint(SkPaint* paint) const { const float ts = m_textSize > 0 ? m_textSize : 12; diff --git a/webkit/tools/test_shell/test_shell_gtk.cc b/webkit/tools/test_shell/test_shell_gtk.cc index 3d62e88..b8dab9a 100644 --- a/webkit/tools/test_shell/test_shell_gtk.cc +++ b/webkit/tools/test_shell/test_shell_gtk.cc @@ -6,6 +6,7 @@ #include <errno.h> #include <fcntl.h> +#include <fontconfig/fontconfig.h> #include <gtk/gtk.h> #include <unistd.h> @@ -31,6 +32,43 @@ void TestShell::InitializeTestShell(bool interactive) { window_list_ = new WindowList; web_prefs_ = new WebPreferences; interactive_ = interactive; + + // We wish to make the layout tests reproducable with respect to fonts. Skia + // uses fontconfig to resolve font family names from WebKit into actual font + // files found on the current system. This means that fonts vary based on the + // system and also on the fontconfig configuration. + // + // To avoid this we initialise fontconfig here and install a configuration + // which only knows about a few, select, fonts. + + // This is the list of fonts that fontconfig will know about. It will try its + // best to match based only on the fonts here in. The paths are where these + // fonts are found on our Ubuntu boxes. + static const char *const fonts[] = { + "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf", + NULL + }; + + FcInit(); + FcConfig* fontcfg = FcConfigCreate(); + for (unsigned i = 0; fonts[i]; ++i) { + if (!FcConfigAppFontAddFile(fontcfg, (FcChar8 *) fonts[i])) + LOG(FATAL) << "Failed to load font " << fonts[i]; + } + + if (!FcConfigSetCurrent(fontcfg)) + LOG(FATAL) << "Failed to set the default font configuration"; } // static |