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

Unified Diff: ui/gfx/platform_font_win.cc

Issue 251773002: PlatformFontWin::DeriveFontWithHeight insensitive to base font's height (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: better font search optimization Created 6 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/platform_font_win.h ('k') | ui/gfx/platform_font_win_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/platform_font_win.cc
diff --git a/ui/gfx/platform_font_win.cc b/ui/gfx/platform_font_win.cc
index 4acaf64b34abdb2ff9abb8b0755e588741f8f1e1..05250a38efd3fc4193a35a70146c77480b079fd6 100644
--- a/ui/gfx/platform_font_win.cc
+++ b/ui/gfx/platform_font_win.cc
@@ -14,6 +14,7 @@
#include "base/strings/string_util.h"
#include "base/strings/sys_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/win/scoped_gdi_object.h"
#include "base/win/scoped_hdc.h"
#include "base/win/scoped_select_object.h"
#include "base/win/win_util.h"
@@ -116,7 +117,7 @@ Font PlatformFontWin::DeriveFontWithHeight(int height, int style) {
SetLogFontStyle(style, &font_info);
HFONT hfont = CreateFontIndirect(&font_info);
- return Font(new PlatformFontWin(CreateHFontRef(hfont)));
+ return DeriveWithCorrectedSize(hfont);
}
////////////////////////////////////////////////////////////////////////////////
@@ -235,6 +236,12 @@ PlatformFontWin::HFontRef* PlatformFontWin::CreateHFontRef(HFONT font) {
GetTextMetrics(screen_dc, &font_metrics);
}
+ return CreateHFontRef(font, font_metrics);
+}
+
+PlatformFontWin::HFontRef* PlatformFontWin::CreateHFontRef(
+ HFONT font,
+ const TEXTMETRIC& font_metrics) {
const int height = std::max<int>(1, font_metrics.tmHeight);
const int baseline = std::max<int>(1, font_metrics.tmAscent);
const int cap_height =
@@ -254,6 +261,40 @@ PlatformFontWin::HFontRef* PlatformFontWin::CreateHFontRef(HFONT font) {
ave_char_width, style);
}
+Font PlatformFontWin::DeriveWithCorrectedSize(HFONT base_font) {
Alexei Svitkine (slow) 2014/06/02 15:42:55 Make this a free-standing function in the anon nam
Tomasz Moniuszko 2014/06/11 13:11:56 This method calls PlatformFontWin::CreateHFontRef
+ base::win::ScopedGetDC screen_dc(NULL);
+ gfx::ScopedSetMapMode mode(screen_dc, MM_TEXT);
+
+ base::win::ScopedGDIObject<HFONT> best_font(base_font);
+ TEXTMETRIC best_font_metrics;
+ {
+ base::win::ScopedSelectObject scoped_font(screen_dc, best_font);
+ GetTextMetrics(screen_dc, &best_font_metrics);
Alexei Svitkine (slow) 2014/06/02 15:42:55 Nit: Make a helper function in the anon namespace
Tomasz Moniuszko 2014/06/11 13:11:55 Done.
+ }
+
+ LOGFONT font_info;
+ GetObject(base_font, sizeof(LOGFONT), &font_info);
+
+ do {
+ font_info.lfHeight =
+ -(best_font_metrics.tmHeight - best_font_metrics.tmInternalLeading + 1);
Alexei Svitkine (slow) 2014/06/02 15:42:55 Nit: Add a comment explaining this logic.
Tomasz Moniuszko 2014/06/11 13:11:55 Done.
+ base::win::ScopedGDIObject<HFONT> font(CreateFontIndirect(&font_info));
+ TEXTMETRIC font_metrics;
+ {
+ base::win::ScopedSelectObject scoped_font(screen_dc, font);
+ GetTextMetrics(screen_dc, &font_metrics);
+ }
+ if (font_metrics.tmHeight > best_font_metrics.tmHeight) {
Alexei Svitkine (slow) 2014/06/02 15:42:55 Nit: No {}'s.
Tomasz Moniuszko 2014/06/11 13:11:56 Done.
+ break;
+ }
+ best_font.Set(font.release());
+ best_font_metrics = font_metrics;
+ } while (true);
+
+ return Font(new PlatformFontWin(
+ CreateHFontRef(best_font.release())));
Alexei Svitkine (slow) 2014/06/02 15:42:55 Nit: Does this fit on the previous line?
Tomasz Moniuszko 2014/06/11 13:11:56 Done.
+}
+
PlatformFontWin::PlatformFontWin(HFontRef* hfont_ref) : font_ref_(hfont_ref) {
}
« no previous file with comments | « ui/gfx/platform_font_win.h ('k') | ui/gfx/platform_font_win_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698