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 <dwrite.h> | 7 #include <dwrite.h> |
8 #include <math.h> | 8 #include <math.h> |
9 #include <wchar.h> | 9 #include <wchar.h> |
10 #include <windows.h> | 10 #include <windows.h> |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 if (FAILED(hr)) { | 123 if (FAILED(hr)) { |
124 CHECK(false); | 124 CHECK(false); |
125 return hr; | 125 return hr; |
126 } | 126 } |
127 | 127 |
128 // We try to find a matching font by triggering DirectWrite to substitute the | 128 // We try to find a matching font by triggering DirectWrite to substitute the |
129 // font passed in with a matching font (FontSubstitutes registry key) | 129 // font passed in with a matching font (FontSubstitutes registry key) |
130 // If this succeeds we return the matched font. | 130 // If this succeeds we return the matched font. |
131 base::win::ScopedGDIObject<HFONT> font(::CreateFontIndirect(font_info)); | 131 base::win::ScopedGDIObject<HFONT> font(::CreateFontIndirect(font_info)); |
132 base::win::ScopedGetDC screen_dc(NULL); | 132 base::win::ScopedGetDC screen_dc(NULL); |
133 base::win::ScopedSelectObject scoped_font(screen_dc, font); | 133 base::win::ScopedSelectObject scoped_font(screen_dc, font.get()); |
134 | 134 |
135 base::win::ScopedComPtr<IDWriteFontFace> font_face; | 135 base::win::ScopedComPtr<IDWriteFontFace> font_face; |
136 hr = gdi_interop->CreateFontFaceFromHdc(screen_dc, font_face.Receive()); | 136 hr = gdi_interop->CreateFontFaceFromHdc(screen_dc, font_face.Receive()); |
137 if (FAILED(hr)) | 137 if (FAILED(hr)) |
138 return hr; | 138 return hr; |
139 | 139 |
140 LOGFONT converted_font = {0}; | 140 LOGFONT converted_font = {0}; |
141 hr = gdi_interop->ConvertFontFaceToLOGFONT(font_face.get(), &converted_font); | 141 hr = gdi_interop->ConvertFontFaceToLOGFONT(font_face.get(), &converted_font); |
142 if (SUCCEEDED(hr)) { | 142 if (SUCCEEDED(hr)) { |
143 hr = font_collection->GetFontFromFontFace(font_face.get(), dwrite_font); | 143 hr = font_collection->GetFontFromFontFace(font_face.get(), dwrite_font); |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 | 446 |
447 // static | 447 // static |
448 int PlatformFontWin::GetFontSize(const LOGFONT& font_info) { | 448 int PlatformFontWin::GetFontSize(const LOGFONT& font_info) { |
449 if (font_info.lfHeight < 0) | 449 if (font_info.lfHeight < 0) |
450 return -font_info.lfHeight; | 450 return -font_info.lfHeight; |
451 | 451 |
452 base::win::ScopedGetDC screen_dc(NULL); | 452 base::win::ScopedGetDC screen_dc(NULL); |
453 base::win::ScopedGDIObject<HFONT> font(CreateFontIndirect(&font_info)); | 453 base::win::ScopedGDIObject<HFONT> font(CreateFontIndirect(&font_info)); |
454 | 454 |
455 TEXTMETRIC font_metrics = {0}; | 455 TEXTMETRIC font_metrics = {0}; |
456 PlatformFontWin::GetTextMetricsForFont(screen_dc, font, &font_metrics); | 456 PlatformFontWin::GetTextMetricsForFont(screen_dc, font.get(), &font_metrics); |
457 return font_metrics.tmAscent; | 457 return font_metrics.tmAscent; |
458 } | 458 } |
459 | 459 |
460 //////////////////////////////////////////////////////////////////////////////// | 460 //////////////////////////////////////////////////////////////////////////////// |
461 // Font, private: | 461 // Font, private: |
462 | 462 |
463 void PlatformFontWin::InitWithCopyOfHFONT(HFONT hfont) { | 463 void PlatformFontWin::InitWithCopyOfHFONT(HFONT hfont) { |
464 DCHECK(hfont); | 464 DCHECK(hfont); |
465 LOGFONT font_info; | 465 LOGFONT font_info; |
466 GetObject(hfont, sizeof(LOGFONT), &font_info); | 466 GetObject(hfont, sizeof(LOGFONT), &font_info); |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 return new PlatformFontWin(native_font); | 722 return new PlatformFontWin(native_font); |
723 } | 723 } |
724 | 724 |
725 // static | 725 // static |
726 PlatformFont* PlatformFont::CreateFromNameAndSize(const std::string& font_name, | 726 PlatformFont* PlatformFont::CreateFromNameAndSize(const std::string& font_name, |
727 int font_size) { | 727 int font_size) { |
728 return new PlatformFontWin(font_name, font_size); | 728 return new PlatformFontWin(font_name, font_size); |
729 } | 729 } |
730 | 730 |
731 } // namespace gfx | 731 } // namespace gfx |
OLD | NEW |