This source file includes following definitions.
- SubpixelPositioningRequested
- LoadDefaults
- GetDefaultFontRenderParams
- GetDefaultWebKitFontRenderParams
- GetDefaultWebkitSubpixelPositioning
#include "ui/gfx/font_render_params_linux.h"
#include "base/command_line.h"
#include "base/logging.h"
#include "ui/gfx/switches.h"
#if defined(TOOLKIT_GTK)
#include <gtk/gtk.h>
#else
#include <fontconfig/fontconfig.h>
#endif
#if defined(OS_LINUX) && defined(USE_AURA) && !defined(OS_CHROMEOS)
#include "ui/gfx/linux_font_delegate.h"
#endif
namespace gfx {
namespace {
bool SubpixelPositioningRequested(bool renderer) {
return CommandLine::ForCurrentProcess()->HasSwitch(
renderer ?
switches::kEnableWebkitTextSubpixelPositioning :
switches::kEnableBrowserTextSubpixelPositioning);
}
void LoadDefaults(FontRenderParams* params, bool renderer) {
#if defined(TOOLKIT_GTK)
params->antialiasing = true;
params->autohinter = true;
params->use_bitmaps = true;
params->hinting = FontRenderParams::HINTING_SLIGHT;
params->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_NONE;
GtkSettings* gtk_settings = gtk_settings_get_default();
CHECK(gtk_settings);
gint gtk_antialias = 0;
gint gtk_hinting = 0;
gchar* gtk_hint_style = NULL;
gchar* gtk_rgba = NULL;
g_object_get(gtk_settings,
"gtk-xft-antialias", >k_antialias,
"gtk-xft-hinting", >k_hinting,
"gtk-xft-hintstyle", >k_hint_style,
"gtk-xft-rgba", >k_rgba,
NULL);
if (gtk_hint_style && gtk_rgba) {
params->antialiasing = gtk_antialias;
if (gtk_hinting == 0 || strcmp(gtk_hint_style, "hintnone") == 0)
params->hinting = FontRenderParams::HINTING_NONE;
else if (strcmp(gtk_hint_style, "hintslight") == 0)
params->hinting = FontRenderParams::HINTING_SLIGHT;
else if (strcmp(gtk_hint_style, "hintmedium") == 0)
params->hinting = FontRenderParams::HINTING_MEDIUM;
else if (strcmp(gtk_hint_style, "hintfull") == 0)
params->hinting = FontRenderParams::HINTING_FULL;
if (strcmp(gtk_rgba, "none") == 0)
params->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_NONE;
else if (strcmp(gtk_rgba, "rgb") == 0)
params->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_RGB;
else if (strcmp(gtk_rgba, "bgr") == 0)
params->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_BGR;
else if (strcmp(gtk_rgba, "vrgb") == 0)
params->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_VRGB;
else if (strcmp(gtk_rgba, "vbgr") == 0)
params->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_VBGR;
}
g_free(gtk_hint_style);
g_free(gtk_rgba);
#else
params->antialiasing = true;
params->autohinter = true;
params->use_bitmaps = true;
params->hinting = FontRenderParams::HINTING_SLIGHT;
FcPattern* pattern = FcPatternCreate();
FcConfigSubstitute(NULL, pattern, FcMatchPattern);
FcDefaultSubstitute(pattern);
FcResult result;
FcPattern* match = FcFontMatch(0, pattern, &result);
DCHECK(match);
int fc_rgba = FC_RGBA_RGB;
FcPatternGetInteger(match, FC_RGBA, 0, &fc_rgba);
FcPatternDestroy(pattern);
FcPatternDestroy(match);
switch (fc_rgba) {
case FC_RGBA_RGB:
params->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_RGB;
break;
case FC_RGBA_BGR:
params->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_BGR;
break;
case FC_RGBA_VRGB:
params->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_VRGB;
break;
case FC_RGBA_VBGR:
params->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_VBGR;
break;
default:
params->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_NONE;
}
#if defined(OS_LINUX) && defined(USE_AURA) && !defined(OS_CHROMEOS)
const LinuxFontDelegate* delegate = LinuxFontDelegate::instance();
if (delegate) {
params->antialiasing = delegate->UseAntialiasing();
params->hinting = delegate->GetHintingStyle();
params->subpixel_rendering = delegate->GetSubpixelRenderingStyle();
}
#endif
#endif
params->subpixel_positioning = SubpixelPositioningRequested(renderer);
if (params->subpixel_positioning)
params->hinting = FontRenderParams::HINTING_NONE;
}
}
const FontRenderParams& GetDefaultFontRenderParams() {
static bool loaded_defaults = false;
static FontRenderParams default_params;
if (!loaded_defaults)
LoadDefaults(&default_params, false);
loaded_defaults = true;
return default_params;
}
const FontRenderParams& GetDefaultWebKitFontRenderParams() {
static bool loaded_defaults = false;
static FontRenderParams default_params;
if (!loaded_defaults)
LoadDefaults(&default_params, true);
loaded_defaults = true;
return default_params;
}
bool GetDefaultWebkitSubpixelPositioning() {
return SubpixelPositioningRequested(true);
}
}