| Index: ui/gfx/render_text_harfbuzz.cc
|
| diff --git a/ui/gfx/render_text_harfbuzz.cc b/ui/gfx/render_text_harfbuzz.cc
|
| index 5a5bd47b517d391ede69932b1569ffee1ad986e8..d1e56e5a1df4ca3d2e4d42c761fc16442c849544 100644
|
| --- a/ui/gfx/render_text_harfbuzz.cc
|
| +++ b/ui/gfx/render_text_harfbuzz.cc
|
| @@ -268,7 +268,9 @@ class HarfBuzzFace {
|
| };
|
|
|
| // Creates a HarfBuzz font from the given Skia face and text size.
|
| -hb_font_t* CreateHarfBuzzFont(SkTypeface* skia_face, int text_size) {
|
| +hb_font_t* CreateHarfBuzzFont(SkTypeface* skia_face,
|
| + int text_size,
|
| + const FontRenderParams& params) {
|
| typedef std::pair<HarfBuzzFace, GlyphCache> FaceCache;
|
|
|
| // TODO(ckocagil): This shouldn't grow indefinitely. Maybe use base::MRUCache?
|
| @@ -284,6 +286,8 @@ hb_font_t* CreateHarfBuzzFont(SkTypeface* skia_face, int text_size) {
|
| FontData* hb_font_data = new FontData(&face_cache->second);
|
| hb_font_data->paint_.setTypeface(skia_face);
|
| hb_font_data->paint_.setTextSize(text_size);
|
| + // TODO(ckocagil): Do we need to update these params later?
|
| + internal::ApplyRenderParams(params, &hb_font_data->paint_);
|
| hb_font_set_funcs(harfbuzz_font, g_font_funcs.Get().get(), hb_font_data,
|
| DeleteByType<FontData>);
|
| hb_font_make_immutable(harfbuzz_font);
|
| @@ -870,13 +874,6 @@ void RenderTextHarfBuzz::DrawVisualText(Canvas* canvas) {
|
| internal::SkiaTextRenderer renderer(canvas);
|
| ApplyFadeEffects(&renderer);
|
| ApplyTextShadows(&renderer);
|
| -
|
| -#if defined(OS_WIN) || defined(OS_LINUX)
|
| - renderer.SetFontRenderParams(
|
| - font_list().GetPrimaryFont().GetFontRenderParams(),
|
| - background_is_transparent());
|
| -#endif
|
| -
|
| ApplyCompositionAndSelectionStyles();
|
|
|
| int current_x = 0;
|
| @@ -885,6 +882,10 @@ void RenderTextHarfBuzz::DrawVisualText(Canvas* canvas) {
|
| const internal::TextRunHarfBuzz& run = *runs_[visual_to_logical_[i]];
|
| renderer.SetTypeface(run.skia_face.get());
|
| renderer.SetTextSize(run.font_size);
|
| +#if defined(OS_WIN) || defined(OS_LINUX)
|
| + renderer.SetFontRenderParams(run.render_params,
|
| + background_is_transparent());
|
| +#endif
|
|
|
| Vector2d origin = line_offset + Vector2d(current_x, lines()[0].baseline);
|
| scoped_ptr<SkPoint[]> positions(new SkPoint[run.glyph_count]);
|
| @@ -1112,8 +1113,17 @@ bool RenderTextHarfBuzz::ShapeRunWithFont(internal::TextRunHarfBuzz* run,
|
| if (skia_face == NULL)
|
| return false;
|
| run->skia_face = skia_face;
|
| - hb_font_t* harfbuzz_font = CreateHarfBuzzFont(run->skia_face.get(),
|
| - run->font_size);
|
| + FontRenderParamsQuery query(false);
|
| + query.families.push_back(font_family);
|
| + query.pixel_size = run->font_size;
|
| + query.style = run->font_style;
|
| + run->render_params = GetFontRenderParams(query, NULL);
|
| + if (background_is_transparent()) {
|
| + run->render_params.subpixel_rendering =
|
| + FontRenderParams::SUBPIXEL_RENDERING_NONE;
|
| + }
|
| + hb_font_t* harfbuzz_font = CreateHarfBuzzFont(
|
| + run->skia_face.get(), run->font_size, run->render_params);
|
|
|
| // Create a HarfBuzz buffer and add the string to be shaped. The HarfBuzz
|
| // buffer holds our text, run information to be used by the shaping engine,
|
| @@ -1147,6 +1157,9 @@ bool RenderTextHarfBuzz::ShapeRunWithFont(internal::TextRunHarfBuzz* run,
|
| const int y_offset = SkFixedToScalar(hb_positions[i].y_offset);
|
| run->positions[i].set(run->width + x_offset, -y_offset);
|
| run->width += SkFixedToScalar(hb_positions[i].x_advance);
|
| + // If subpixel positioning isn't enabled, round the glyph x coordinates.
|
| + if (!run->render_params.subpixel_positioning)
|
| + run->width = std::floor(run->width + 0.5f);
|
| }
|
|
|
| hb_buffer_destroy(buffer);
|
|
|