Commit 6b2e2373 authored by derat@chromium.org's avatar derat@chromium.org

Apply hinting in SkiaTextRenderer::SetFontRenderParams().

Make SetFontRenderParams() pass the hinting setting through
to SkPaint instead of exposing a separate SetFontHinting()
method. Also add a default c'tor for FontRenderParams and
pass its autohinter setting through to SkPaint as well.

BUG=125235,375824

Review URL: https://codereview.chromium.org/387743002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@282703 0039d316-1c4b-4281-b951-d872f2087c98
parent 2557970c
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/gfx/font_render_params.h"
namespace gfx {
FontRenderParams::FontRenderParams()
: antialiasing(true),
subpixel_positioning(true),
autohinter(true),
use_bitmaps(true),
hinting(HINTING_SLIGHT),
subpixel_rendering(SUBPIXEL_RENDERING_RGB) {
}
FontRenderParams::~FontRenderParams() {}
} // namespace gfx
......@@ -11,7 +11,8 @@ namespace gfx {
// A collection of parameters describing how text should be rendered on Linux.
struct GFX_EXPORT FontRenderParams {
// No constructor to avoid static initialization.
FontRenderParams();
~FontRenderParams();
// Level of hinting to be applied.
enum Hinting {
......
......@@ -63,6 +63,9 @@ void LoadDefaults(FontRenderParams* params, bool renderer) {
}
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// TODO(derat): Get the autohinter setting from FontConfig. Until then,
// maintain backward compatibility with what we were doing previously.
params->autohinter = renderer;
const LinuxFontDelegate* delegate = LinuxFontDelegate::instance();
if (delegate) {
params->antialiasing = delegate->UseAntialiasing();
......
......@@ -26,6 +26,9 @@ class CachedFontRenderParams : public gfx::SingletonHwnd::Observer {
params_.reset(new FontRenderParams());
params_->antialiasing = false;
params_->subpixel_positioning = false;
params_->autohinter = false;
params_->use_bitmaps = false;
params_->hinting = FontRenderParams::HINTING_MEDIUM;
params_->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_NONE;
BOOL enabled = false;
......
......@@ -167,6 +167,7 @@
'font_render_params_android.cc',
'font_render_params_linux.cc',
'font_render_params_win.cc',
'font_render_params.cc',
'font_render_params.h',
'frame_time.h',
'gfx_export.h',
......
......@@ -155,6 +155,19 @@ skia::RefPtr<SkShader> CreateFadeShader(const Rect& text_rect,
colors.size(), SkShader::kClamp_TileMode));
}
// Converts a FontRenderParams::Hinting value to the corresponding
// SkPaint::Hinting value.
SkPaint::Hinting FontRenderParamsHintingToSkPaintHinting(
FontRenderParams::Hinting params_hinting) {
switch (params_hinting) {
case FontRenderParams::HINTING_NONE: return SkPaint::kNo_Hinting;
case FontRenderParams::HINTING_SLIGHT: return SkPaint::kSlight_Hinting;
case FontRenderParams::HINTING_MEDIUM: return SkPaint::kNormal_Hinting;
case FontRenderParams::HINTING_FULL: return SkPaint::kFull_Hinting;
}
return SkPaint::kNo_Hinting;
}
} // namespace
namespace internal {
......@@ -204,10 +217,8 @@ void SkiaTextRenderer::SetFontRenderParams(const FontRenderParams& params,
paint_.setLCDRenderText(!background_is_transparent &&
params.subpixel_rendering != FontRenderParams::SUBPIXEL_RENDERING_NONE);
paint_.setSubpixelText(params.subpixel_positioning);
}
void SkiaTextRenderer::SetFontHinting(SkPaint::Hinting hinting) {
paint_.setHinting(hinting);
paint_.setAutohinted(params.autohinter);
paint_.setHinting(FontRenderParamsHintingToSkPaintHinting(params.hinting));
}
void SkiaTextRenderer::SetTypeface(SkTypeface* typeface) {
......
......@@ -54,7 +54,6 @@ class SkiaTextRenderer {
void SetDrawLooper(SkDrawLooper* draw_looper);
void SetFontRenderParams(const FontRenderParams& params,
bool background_is_transparent);
void SetFontHinting(SkPaint::Hinting hinting);
void SetTypeface(SkTypeface* typeface);
void SetTextSize(SkScalar size);
void SetFontFamilyWithStyle(const std::string& family, int font_style);
......
......@@ -390,25 +390,8 @@ void RenderTextPango::DrawVisualText(Canvas* canvas) {
ApplyTextShadows(&renderer);
// TODO(derat): Use font-specific params: http://crbug.com/125235
const FontRenderParams& render_params = GetDefaultFontRenderParams();
renderer.SetFontRenderParams(render_params, background_is_transparent());
SkPaint::Hinting skia_hinting = SkPaint::kNormal_Hinting;
switch (render_params.hinting) {
case FontRenderParams::HINTING_NONE:
skia_hinting = SkPaint::kNo_Hinting;
break;
case FontRenderParams::HINTING_SLIGHT:
skia_hinting = SkPaint::kSlight_Hinting;
break;
case FontRenderParams::HINTING_MEDIUM:
skia_hinting = SkPaint::kNormal_Hinting;
break;
case FontRenderParams::HINTING_FULL:
skia_hinting = SkPaint::kFull_Hinting;
break;
}
renderer.SetFontHinting(skia_hinting);
renderer.SetFontRenderParams(GetDefaultFontRenderParams(),
background_is_transparent());
// Temporarily apply composition underlines and selection colors.
ApplyCompositionAndSelectionStyles();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment