Chromium Code Reviews| 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..3659371298bee5d94239e4494874e9fdd6a091d5 100644 |
| --- a/ui/gfx/render_text_harfbuzz.cc |
| +++ b/ui/gfx/render_text_harfbuzz.cc |
| @@ -268,7 +268,10 @@ 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, |
| + bool background_is_transparent) { |
| typedef std::pair<HarfBuzzFace, GlyphCache> FaceCache; |
| // TODO(ckocagil): This shouldn't grow indefinitely. Maybe use base::MRUCache? |
| @@ -284,6 +287,9 @@ 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, background_is_transparent, |
| + &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 +876,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 +884,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) |
|
msw
2014/08/19 17:26:21
nit: Is this guard still needed now?
ckocagil
2014/08/19 17:34:25
Nope. Removed!
|
| + 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 +1115,13 @@ bool RenderTextHarfBuzz::ShapeRunWithFont(internal::TextRunHarfBuzz* run, |
| if (skia_face == NULL) |
| return false; |
| run->skia_face = skia_face; |
| + 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); |
| hb_font_t* harfbuzz_font = CreateHarfBuzzFont(run->skia_face.get(), |
| - run->font_size); |
| + run->font_size, run->render_params, background_is_transparent()); |
| // 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 +1155,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); |