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

Side by Side Diff: ui/gfx/render_text_harfbuzz.cc

Issue 2066323002: Remove SK_SUPPORT_LEGACY_TYPEFACE_PTR (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: moar Mac fixes Created 4 years, 6 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 unified diff | Download patch
« no previous file with comments | « ui/gfx/render_text.cc ('k') | ui/gfx/render_text_mac.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/gfx/render_text_harfbuzz.h" 5 #include "ui/gfx/render_text_harfbuzz.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <set> 8 #include <set>
9 9
10 #include "base/i18n/bidi_line_iterator.h" 10 #include "base/i18n/bidi_line_iterator.h"
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 UpdateRTLSegmentRanges(); 415 UpdateRTLSegmentRanges();
416 line->size.set_width(line->size.width() + segment.width()); 416 line->size.set_width(line->size.width() + segment.width());
417 text_x_ += segment.width(); 417 text_x_ += segment.width();
418 available_width_ -= segment.width(); 418 available_width_ -= segment.width();
419 return; 419 return;
420 } 420 }
421 } 421 }
422 line->segments.push_back(segment); 422 line->segments.push_back(segment);
423 423
424 SkPaint paint; 424 SkPaint paint;
425 paint.setTypeface(run.skia_face.get()); 425 paint.setTypeface(run.skia_face);
426 paint.setTextSize(SkIntToScalar(run.font_size)); 426 paint.setTextSize(SkIntToScalar(run.font_size));
427 paint.setAntiAlias(run.render_params.antialiasing); 427 paint.setAntiAlias(run.render_params.antialiasing);
428 SkPaint::FontMetrics metrics; 428 SkPaint::FontMetrics metrics;
429 paint.getFontMetrics(&metrics); 429 paint.getFontMetrics(&metrics);
430 430
431 line->size.set_width(line->size.width() + segment.width()); 431 line->size.set_width(line->size.width() + segment.width());
432 // TODO(dschuyler): Account for stylized baselines in string sizing. 432 // TODO(dschuyler): Account for stylized baselines in string sizing.
433 max_descent_ = std::max(max_descent_, metrics.fDescent); 433 max_descent_ = std::max(max_descent_, metrics.fDescent);
434 // fAscent is always negative. 434 // fAscent is always negative.
435 max_ascent_ = std::max(max_ascent_, -metrics.fAscent); 435 max_ascent_ = std::max(max_ascent_, -metrics.fAscent);
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
1137 ApplyTextShadows(renderer); 1137 ApplyTextShadows(renderer);
1138 ApplyCompositionAndSelectionStyles(); 1138 ApplyCompositionAndSelectionStyles();
1139 1139
1140 internal::TextRunList* run_list = GetRunList(); 1140 internal::TextRunList* run_list = GetRunList();
1141 for (size_t i = 0; i < lines().size(); ++i) { 1141 for (size_t i = 0; i < lines().size(); ++i) {
1142 const internal::Line& line = lines()[i]; 1142 const internal::Line& line = lines()[i];
1143 const Vector2d origin = GetLineOffset(i) + Vector2d(0, line.baseline); 1143 const Vector2d origin = GetLineOffset(i) + Vector2d(0, line.baseline);
1144 SkScalar preceding_segment_widths = 0; 1144 SkScalar preceding_segment_widths = 0;
1145 for (const internal::LineSegment& segment : line.segments) { 1145 for (const internal::LineSegment& segment : line.segments) {
1146 const internal::TextRunHarfBuzz& run = *run_list->runs()[segment.run]; 1146 const internal::TextRunHarfBuzz& run = *run_list->runs()[segment.run];
1147 renderer->SetTypeface(run.skia_face.get()); 1147 renderer->SetTypeface(run.skia_face);
1148 renderer->SetTextSize(SkIntToScalar(run.font_size)); 1148 renderer->SetTextSize(SkIntToScalar(run.font_size));
1149 renderer->SetFontRenderParams(run.render_params, 1149 renderer->SetFontRenderParams(run.render_params,
1150 subpixel_rendering_suppressed()); 1150 subpixel_rendering_suppressed());
1151 Range glyphs_range = run.CharRangeToGlyphRange(segment.char_range); 1151 Range glyphs_range = run.CharRangeToGlyphRange(segment.char_range);
1152 std::unique_ptr<SkPoint[]> positions(new SkPoint[glyphs_range.length()]); 1152 std::unique_ptr<SkPoint[]> positions(new SkPoint[glyphs_range.length()]);
1153 SkScalar offset_x = preceding_segment_widths - 1153 SkScalar offset_x = preceding_segment_widths -
1154 ((glyphs_range.GetMin() != 0) 1154 ((glyphs_range.GetMin() != 0)
1155 ? run.positions[glyphs_range.GetMin()].x() 1155 ? run.positions[glyphs_range.GetMin()].x()
1156 : 0); 1156 : 0);
1157 for (size_t j = 0; j < glyphs_range.length(); ++j) { 1157 for (size_t j = 0; j < glyphs_range.length(); ++j) {
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
1474 sk_sp<SkTypeface> skia_face( 1474 sk_sp<SkTypeface> skia_face(
1475 internal::CreateSkiaTypeface(font, run->italic, run->weight)); 1475 internal::CreateSkiaTypeface(font, run->italic, run->weight));
1476 if (!skia_face) 1476 if (!skia_face)
1477 return false; 1477 return false;
1478 1478
1479 run->skia_face = skia_face; 1479 run->skia_face = skia_face;
1480 run->font = font; 1480 run->font = font;
1481 run->render_params = params; 1481 run->render_params = params;
1482 1482
1483 hb_font_t* harfbuzz_font = CreateHarfBuzzFont( 1483 hb_font_t* harfbuzz_font = CreateHarfBuzzFont(
1484 run->skia_face.get(), SkIntToScalar(run->font_size), run->render_params, 1484 run->skia_face, SkIntToScalar(run->font_size), run->render_params,
1485 subpixel_rendering_suppressed()); 1485 subpixel_rendering_suppressed());
1486 1486
1487 // Create a HarfBuzz buffer and add the string to be shaped. The HarfBuzz 1487 // Create a HarfBuzz buffer and add the string to be shaped. The HarfBuzz
1488 // buffer holds our text, run information to be used by the shaping engine, 1488 // buffer holds our text, run information to be used by the shaping engine,
1489 // and the resulting glyph data. 1489 // and the resulting glyph data.
1490 hb_buffer_t* buffer = hb_buffer_create(); 1490 hb_buffer_t* buffer = hb_buffer_create();
1491 hb_buffer_add_utf16(buffer, reinterpret_cast<const uint16_t*>(text.c_str()), 1491 hb_buffer_add_utf16(buffer, reinterpret_cast<const uint16_t*>(text.c_str()),
1492 text.length(), run->range.start(), run->range.length()); 1492 text.length(), run->range.start(), run->range.length());
1493 hb_buffer_set_script(buffer, ICUScriptToHBScript(run->script)); 1493 hb_buffer_set_script(buffer, ICUScriptToHBScript(run->script));
1494 hb_buffer_set_direction(buffer, 1494 hb_buffer_set_direction(buffer,
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1584 DCHECK(!update_layout_run_list_); 1584 DCHECK(!update_layout_run_list_);
1585 DCHECK(!update_display_run_list_); 1585 DCHECK(!update_display_run_list_);
1586 return text_elided() ? display_run_list_.get() : &layout_run_list_; 1586 return text_elided() ? display_run_list_.get() : &layout_run_list_;
1587 } 1587 }
1588 1588
1589 const internal::TextRunList* RenderTextHarfBuzz::GetRunList() const { 1589 const internal::TextRunList* RenderTextHarfBuzz::GetRunList() const {
1590 return const_cast<RenderTextHarfBuzz*>(this)->GetRunList(); 1590 return const_cast<RenderTextHarfBuzz*>(this)->GetRunList();
1591 } 1591 }
1592 1592
1593 } // namespace gfx 1593 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gfx/render_text.cc ('k') | ui/gfx/render_text_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698