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

Unified Diff: ui/gfx/platform_font_mac.mm

Issue 2839873003: PlatformFontMac: better guess for average width (Closed)
Patch Set: as -> attr_string Created 3 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_mac.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/platform_font_mac.mm
diff --git a/ui/gfx/platform_font_mac.mm b/ui/gfx/platform_font_mac.mm
index 53781f8e2309e74b7c72fb319b85c430132c83aa..d147607ba614fc448073ea981af3e86e6c9ed623 100644
--- a/ui/gfx/platform_font_mac.mm
+++ b/ui/gfx/platform_font_mac.mm
@@ -133,7 +133,20 @@ int GetFontStyleFromNSFont(NSFont* font) {
}
int PlatformFontMac::GetExpectedTextWidth(int length) {
- return length * average_width_;
+ if (!average_width_ && native_font_) {
+ // -[NSFont boundingRectForGlyph:] seems to always return the largest
+ // bounding rect that could be needed, which produces very wide expected
+ // widths for strings. Instead, compute the actual width of a string
+ // containing all the lowercase characters to find a reasonable guess at the
+ // average.
+ base::scoped_nsobject<NSAttributedString> attr_string(
+ [[NSAttributedString alloc]
+ initWithString:@"abcdefghijklmnopqrstuvwxyz"
+ attributes:@{NSFontAttributeName : native_font_.get()}]);
+ average_width_ = [attr_string size].width / [attr_string length];
+ DCHECK_NE(0, average_width_);
+ }
+ return ceil(length * average_width_);
}
int PlatformFontMac::GetStyle() const {
@@ -202,7 +215,6 @@ int GetFontStyleFromNSFont(NSFont* font) {
height_ = 0;
ascent_ = 0;
cap_height_ = 0;
- average_width_ = 0;
return;
}
@@ -218,9 +230,6 @@ int GetFontStyleFromNSFont(NSFont* font) {
// to ensure GetBaseline() + descender fits within GetHeight() during layout.
height_ = ceil(ascent_ + std::abs([font descender]) + [font leading]);
- average_width_ =
- NSWidth([font boundingRectForGlyph:[font glyphWithName:@"x"]]);
-
FontRenderParamsQuery query;
query.families.push_back(font_name_);
query.pixel_size = font_size_;
« no previous file with comments | « ui/gfx/platform_font_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698