Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: ui/gfx/render_text_harfbuzz.cc

Issue 1819753003: Allow various font weights in gfx. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add a lost comment and modify a render text unittest to not test black because of test env font con… Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/render_text_harfbuzz.h ('k') | ui/gfx/render_text_mac.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/render_text_harfbuzz.cc
diff --git a/ui/gfx/render_text_harfbuzz.cc b/ui/gfx/render_text_harfbuzz.cc
index f33a5ed7a43cbd5f134d03fcf309f23cb2a214bb..dac89b9bbd4b8f31217814f82a6f27c5e00adcad 100644
--- a/ui/gfx/render_text_harfbuzz.cc
+++ b/ui/gfx/render_text_harfbuzz.cc
@@ -569,16 +569,18 @@ struct CaseInsensitiveCompare {
namespace internal {
#if !defined(OS_MACOSX)
-sk_sp<SkTypeface> CreateSkiaTypeface(const gfx::Font& font, int style) {
- int skia_style = SkTypeface::kNormal;
- skia_style |= (style & Font::BOLD) ? SkTypeface::kBold : 0;
- skia_style |= (style & Font::ITALIC) ? SkTypeface::kItalic : 0;
- return sk_sp<SkTypeface>(SkTypeface::CreateFromName(
- font.GetFontName().c_str(), static_cast<SkTypeface::Style>(skia_style)));
+sk_sp<SkTypeface> CreateSkiaTypeface(const Font& font,
+ bool italic,
+ Font::Weight weight) {
+ SkFontStyle skia_style(
+ static_cast<int>(weight), SkFontStyle::kNormal_Width,
+ italic ? SkFontStyle::kItalic_Slant : SkFontStyle::kUpright_Slant);
+ return sk_sp<SkTypeface>(SkTypeface::MakeFromName(
+ font.GetFontName().c_str(), skia_style));
}
#endif
-TextRunHarfBuzz::TextRunHarfBuzz(const gfx::Font& template_font)
+TextRunHarfBuzz::TextRunHarfBuzz(const Font& template_font)
: width(0.0f),
preceding_run_widths(0.0f),
is_rtl(false),
@@ -589,7 +591,8 @@ TextRunHarfBuzz::TextRunHarfBuzz(const gfx::Font& template_font)
font_size(0),
baseline_offset(0),
baseline_type(0),
- font_style(0),
+ italic(false),
+ weight(Font::Weight::NORMAL),
strike(false),
diagonal_strike(false),
underline(false) {}
@@ -1272,18 +1275,18 @@ void RenderTextHarfBuzz::ItemizeTextToRuns(
DCHECK_LE(text.size(), baselines().max());
for (const BreakList<bool>& style : styles())
DCHECK_LE(text.size(), style.max());
- internal::StyleIterator style(empty_colors, baselines(), styles());
+ internal::StyleIterator style(empty_colors, baselines(), weights(), styles());
for (size_t run_break = 0; run_break < text.length();) {
internal::TextRunHarfBuzz* run =
new internal::TextRunHarfBuzz(font_list().GetPrimaryFont());
run->range.set_start(run_break);
- run->font_style = (style.style(BOLD) ? Font::BOLD : 0) |
- (style.style(ITALIC) ? Font::ITALIC : 0);
+ run->italic = style.style(ITALIC);
run->baseline_type = style.baseline();
run->strike = style.style(STRIKE);
run->diagonal_strike = style.style(DIAGONAL_STRIKE);
run->underline = style.style(UNDERLINE);
+ run->weight = style.weight();
int32_t script_item_break = 0;
bidi_iterator.GetLogicalRun(run_break, &script_item_break, &run->level);
CHECK_GT(static_cast<size_t>(script_item_break), run_break);
@@ -1324,10 +1327,10 @@ void RenderTextHarfBuzz::ItemizeTextToRuns(
bool RenderTextHarfBuzz::CompareFamily(
const base::string16& text,
const Font& font,
- const gfx::FontRenderParams& render_params,
+ const FontRenderParams& render_params,
internal::TextRunHarfBuzz* run,
Font* best_font,
- gfx::FontRenderParams* best_render_params,
+ FontRenderParams* best_render_params,
size_t* best_missing_glyphs) {
if (!ShapeRunWithFont(text, font, render_params, run))
return false;
@@ -1358,7 +1361,7 @@ void RenderTextHarfBuzz::ShapeRun(const base::string16& text,
// Calculate a slightly smaller font. The ratio here is somewhat arbitrary.
// Proportions from 5/9 to 5/7 all look pretty good.
const float ratio = 5.0f / 9.0f;
- run->font_size = gfx::ToRoundedInt(primary_font.GetFontSize() * ratio);
+ run->font_size = ToRoundedInt(primary_font.GetFontSize() * ratio);
switch (run->baseline_type) {
case SUPERSCRIPT:
run->baseline_offset =
@@ -1366,7 +1369,7 @@ void RenderTextHarfBuzz::ShapeRun(const base::string16& text,
break;
case SUPERIOR:
run->baseline_offset =
- gfx::ToRoundedInt(primary_font.GetCapHeight() * ratio) -
+ ToRoundedInt(primary_font.GetCapHeight() * ratio) -
primary_font.GetCapHeight();
break;
case SUBSCRIPT:
@@ -1448,7 +1451,7 @@ void RenderTextHarfBuzz::ShapeRun(const base::string16& text,
FontRenderParamsQuery query;
query.families.push_back(font_name);
query.pixel_size = run->font_size;
- query.style = run->font_style;
+ query.style = run->italic ? Font::ITALIC : 0;
FontRenderParams fallback_render_params = GetFontRenderParams(query, NULL);
if (CompareFamily(text, font, fallback_render_params, run, &best_font,
&best_render_params, &best_missing_glyphs))
@@ -1465,11 +1468,11 @@ void RenderTextHarfBuzz::ShapeRun(const base::string16& text,
}
bool RenderTextHarfBuzz::ShapeRunWithFont(const base::string16& text,
- const gfx::Font& font,
+ const Font& font,
const FontRenderParams& params,
internal::TextRunHarfBuzz* run) {
sk_sp<SkTypeface> skia_face(
- internal::CreateSkiaTypeface(font, run->font_style));
+ internal::CreateSkiaTypeface(font, run->italic, run->weight));
if (!skia_face)
return false;
« no previous file with comments | « ui/gfx/render_text_harfbuzz.h ('k') | ui/gfx/render_text_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698