OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/platform_font_win.h" | 5 #include "ui/gfx/platform_font_win.h" |
6 | 6 |
7 #include <windows.h> | 7 #include <windows.h> |
8 #include <dwrite.h> | 8 #include <dwrite.h> |
9 #include <limits.h> | 9 #include <limits.h> |
10 #include <math.h> | 10 #include <math.h> |
11 #include <stdint.h> | 11 #include <stdint.h> |
12 #include <wchar.h> | 12 #include <wchar.h> |
13 | 13 |
14 #include <algorithm> | 14 #include <algorithm> |
15 | 15 |
16 #include "base/debug/alias.h" | 16 #include "base/debug/alias.h" |
17 #include "base/logging.h" | 17 #include "base/logging.h" |
18 #include "base/macros.h" | 18 #include "base/macros.h" |
19 #include "base/strings/string16.h" | 19 #include "base/strings/string16.h" |
20 #include "base/strings/string_util.h" | 20 #include "base/strings/string_util.h" |
21 #include "base/strings/sys_string_conversions.h" | 21 #include "base/strings/sys_string_conversions.h" |
22 #include "base/strings/utf_string_conversions.h" | 22 #include "base/strings/utf_string_conversions.h" |
23 #include "base/win/scoped_comptr.h" | 23 #include "base/win/scoped_comptr.h" |
24 #include "base/win/scoped_gdi_object.h" | 24 #include "base/win/scoped_gdi_object.h" |
25 #include "base/win/scoped_hdc.h" | 25 #include "base/win/scoped_hdc.h" |
26 #include "base/win/scoped_select_object.h" | 26 #include "base/win/scoped_select_object.h" |
27 #include "base/win/win_util.h" | 27 #include "base/win/win_util.h" |
28 #include "third_party/skia/include/core/SkFontLCDConfig.h" | 28 #include "third_party/skia/include/core/SkFontLCDConfig.h" |
| 29 #include "third_party/skia/include/core/SkRefCnt.h" |
29 #include "third_party/skia/include/core/SkTypeface.h" | 30 #include "third_party/skia/include/core/SkTypeface.h" |
30 #include "ui/gfx/canvas.h" | 31 #include "ui/gfx/canvas.h" |
31 #include "ui/gfx/font.h" | 32 #include "ui/gfx/font.h" |
32 #include "ui/gfx/font_render_params.h" | 33 #include "ui/gfx/font_render_params.h" |
33 #include "ui/gfx/win/scoped_set_map_mode.h" | 34 #include "ui/gfx/win/scoped_set_map_mode.h" |
34 | 35 |
35 namespace { | 36 namespace { |
36 | 37 |
37 // If the tmWeight field of a TEXTMETRIC structure has a value >= this, the | 38 // If the tmWeight field of a TEXTMETRIC structure has a value >= this, the |
38 // font is bold. | 39 // font is bold. |
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
577 direct_write_factory_, | 578 direct_write_factory_, |
578 dwrite_font.Receive()); | 579 dwrite_font.Receive()); |
579 if (FAILED(hr)) { | 580 if (FAILED(hr)) { |
580 CHECK(false); | 581 CHECK(false); |
581 return nullptr; | 582 return nullptr; |
582 } | 583 } |
583 | 584 |
584 DWRITE_FONT_METRICS dwrite_font_metrics = {0}; | 585 DWRITE_FONT_METRICS dwrite_font_metrics = {0}; |
585 dwrite_font->GetMetrics(&dwrite_font_metrics); | 586 dwrite_font->GetMetrics(&dwrite_font_metrics); |
586 | 587 |
587 skia::RefPtr<SkTypeface> skia_face = skia::AdoptRef( | 588 sk_sp<SkTypeface> skia_face( |
588 SkTypeface::CreateFromName( | 589 SkTypeface::CreateFromName( |
589 base::SysWideToUTF8(font_info.lfFaceName).c_str(), | 590 base::SysWideToUTF8(font_info.lfFaceName).c_str(), |
590 static_cast<SkTypeface::Style>(skia_style))); | 591 static_cast<SkTypeface::Style>(skia_style))); |
591 | 592 |
592 gfx::FontRenderParams font_params = | 593 gfx::FontRenderParams font_params = |
593 gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), nullptr); | 594 gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), nullptr); |
594 SkFontLCDConfig::SetSubpixelOrder( | 595 SkFontLCDConfig::SetSubpixelOrder( |
595 gfx::FontRenderParams::SubpixelRenderingToSkiaLCDOrder( | 596 gfx::FontRenderParams::SubpixelRenderingToSkiaLCDOrder( |
596 font_params.subpixel_rendering)); | 597 font_params.subpixel_rendering)); |
597 SkFontLCDConfig::SetSubpixelOrientation( | 598 SkFontLCDConfig::SetSubpixelOrientation( |
598 gfx::FontRenderParams::SubpixelRenderingToSkiaLCDOrientation( | 599 gfx::FontRenderParams::SubpixelRenderingToSkiaLCDOrientation( |
599 font_params.subpixel_rendering)); | 600 font_params.subpixel_rendering)); |
600 | 601 |
601 SkPaint paint; | 602 SkPaint paint; |
602 paint.setAntiAlias(font_params.antialiasing); | 603 paint.setAntiAlias(font_params.antialiasing); |
603 paint.setTypeface(skia_face.get()); | 604 paint.setTypeface(std::move(skia_face)); |
604 paint.setTextSize(-font_info.lfHeight); | 605 paint.setTextSize(-font_info.lfHeight); |
605 SkPaint::FontMetrics skia_metrics; | 606 SkPaint::FontMetrics skia_metrics; |
606 paint.getFontMetrics(&skia_metrics); | 607 paint.getFontMetrics(&skia_metrics); |
607 | 608 |
608 // The calculations below are similar to those in the CreateHFontRef | 609 // The calculations below are similar to those in the CreateHFontRef |
609 // function. The height, baseline and cap height are rounded up to ensure | 610 // function. The height, baseline and cap height are rounded up to ensure |
610 // that they match up closely with GDI. | 611 // that they match up closely with GDI. |
611 const int height = std::ceil(skia_metrics.fDescent - skia_metrics.fAscent); | 612 const int height = std::ceil(skia_metrics.fDescent - skia_metrics.fAscent); |
612 const int baseline = std::max<int>(1, std::ceil(-skia_metrics.fAscent)); | 613 const int baseline = std::max<int>(1, std::ceil(-skia_metrics.fAscent)); |
613 const int cap_height = std::ceil(paint.getTextSize() * | 614 const int cap_height = std::ceil(paint.getTextSize() * |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
725 return new PlatformFontWin(native_font); | 726 return new PlatformFontWin(native_font); |
726 } | 727 } |
727 | 728 |
728 // static | 729 // static |
729 PlatformFont* PlatformFont::CreateFromNameAndSize(const std::string& font_name, | 730 PlatformFont* PlatformFont::CreateFromNameAndSize(const std::string& font_name, |
730 int font_size) { | 731 int font_size) { |
731 return new PlatformFontWin(font_name, font_size); | 732 return new PlatformFontWin(font_name, font_size); |
732 } | 733 } |
733 | 734 |
734 } // namespace gfx | 735 } // namespace gfx |
OLD | NEW |