Chromium Code Reviews| 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_mac.h" | 5 #include "ui/gfx/platform_font_mac.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include <Cocoa/Cocoa.h> | 9 #include <Cocoa/Cocoa.h> |
| 10 | 10 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 58 // PlatformFontMac, public: | 58 // PlatformFontMac, public: |
| 59 | 59 |
| 60 PlatformFontMac::PlatformFontMac() | 60 PlatformFontMac::PlatformFontMac() |
| 61 : PlatformFontMac([NSFont systemFontOfSize:[NSFont systemFontSize]]) { | 61 : PlatformFontMac([NSFont systemFontOfSize:[NSFont systemFontSize]]) { |
| 62 } | 62 } |
| 63 | 63 |
| 64 PlatformFontMac::PlatformFontMac(NativeFont native_font) | 64 PlatformFontMac::PlatformFontMac(NativeFont native_font) |
| 65 : native_font_([native_font retain]), | 65 : native_font_([native_font retain]), |
| 66 font_name_(base::SysNSStringToUTF8([native_font_ familyName])), | 66 font_name_(base::SysNSStringToUTF8([native_font_ familyName])), |
| 67 font_size_([native_font_ pointSize]), | 67 font_size_([native_font_ pointSize]), |
| 68 font_style_(Font::NORMAL) { | 68 font_style_(Font::NORMAL), |
| 69 font_weight_(Font::Weight::NORMAL) { | |
| 69 NSFontSymbolicTraits traits = [[native_font fontDescriptor] symbolicTraits]; | 70 NSFontSymbolicTraits traits = [[native_font fontDescriptor] symbolicTraits]; |
|
tapted
2016/03/23 23:00:06
Without a BUG= I can't grok the wider plan for thi
Mikus
2016/03/24 07:31:25
Done.
msw
2016/03/25 01:41:31
Please cite the bug you filed in the BUG= line of
tapted
2016/03/27 23:10:01
The bug still doesn't describe the _need_ for the
| |
| 70 if (traits & NSFontItalicTrait) | 71 if (traits & NSFontItalicTrait) |
| 71 font_style_ |= Font::ITALIC; | 72 font_style_ |= Font::ITALIC; |
| 72 if (traits & NSFontBoldTrait) | 73 if (traits & NSFontBoldTrait) |
| 73 font_style_ |= Font::BOLD; | 74 font_weight_ = Font::BOLD; |
|
tapted
2016/03/23 23:00:06
Font::Weight::BOLD? - what you have shouldn't comp
Mikus
2016/03/24 07:31:25
Done.
| |
| 75 else | |
| 76 font_weight_ = Font::NORMAL; | |
| 74 | 77 |
| 75 CalculateMetricsAndInitRenderParams(); | 78 CalculateMetricsAndInitRenderParams(); |
| 76 } | 79 } |
| 77 | 80 |
| 78 PlatformFontMac::PlatformFontMac(const std::string& font_name, | 81 PlatformFontMac::PlatformFontMac(const std::string& font_name, int font_size) |
| 79 int font_size) | |
| 80 : native_font_([NSFontWithSpec(font_name, font_size, Font::NORMAL) retain]), | 82 : native_font_([NSFontWithSpec(font_name, font_size, Font::NORMAL) retain]), |
| 81 font_name_(font_name), | 83 font_name_(font_name), |
| 82 font_size_(font_size), | 84 font_size_(font_size), |
| 83 font_style_(Font::NORMAL) { | 85 font_style_(Font::NORMAL), |
| 86 font_weight_(Font::Weight::NORMAL) { | |
| 84 CalculateMetricsAndInitRenderParams(); | 87 CalculateMetricsAndInitRenderParams(); |
| 85 } | 88 } |
| 86 | 89 |
| 87 //////////////////////////////////////////////////////////////////////////////// | 90 //////////////////////////////////////////////////////////////////////////////// |
| 88 // PlatformFontMac, PlatformFont implementation: | 91 // PlatformFontMac, PlatformFont implementation: |
| 89 | 92 |
| 90 Font PlatformFontMac::DeriveFont(int size_delta, int style) const { | 93 Font PlatformFontMac::DeriveFont(int size_delta, |
| 91 if (native_font_ && style == font_style_) { | 94 int style, |
| 95 Font::Weight weight) const { | |
| 96 if (native_font_ && style == font_style_ && weight == font_weight_) { | |
| 92 // System fonts have special attributes starting with 10.11. They should be | 97 // System fonts have special attributes starting with 10.11. They should be |
| 93 // requested using the same descriptor to preserve these attributes. | 98 // requested using the same descriptor to preserve these attributes. |
| 94 return Font(new PlatformFontMac( | 99 return Font(new PlatformFontMac([NSFont |
| 95 [NSFont fontWithDescriptor:[native_font_ fontDescriptor] | 100 fontWithDescriptor:[native_font_ fontDescriptor] |
| 96 size:font_size_ + size_delta])); | 101 size:font_size_ + size_delta])); |
| 97 } | 102 } |
| 98 | 103 |
| 99 return Font(new PlatformFontMac(font_name_, font_size_ + size_delta, style)); | 104 return Font( |
| 105 new PlatformFontMac(font_name_, font_size_ + size_delta, style, weight)); | |
| 100 } | 106 } |
| 101 | 107 |
| 102 int PlatformFontMac::GetHeight() { | 108 int PlatformFontMac::GetHeight() { |
| 103 return height_; | 109 return height_; |
| 104 } | 110 } |
| 105 | 111 |
| 106 int PlatformFontMac::GetBaseline() { | 112 int PlatformFontMac::GetBaseline() { |
| 107 return ascent_; | 113 return ascent_; |
| 108 } | 114 } |
| 109 | 115 |
| 110 int PlatformFontMac::GetCapHeight() { | 116 int PlatformFontMac::GetCapHeight() { |
| 111 return cap_height_; | 117 return cap_height_; |
| 112 } | 118 } |
| 113 | 119 |
| 114 int PlatformFontMac::GetExpectedTextWidth(int length) { | 120 int PlatformFontMac::GetExpectedTextWidth(int length) { |
| 115 return length * average_width_; | 121 return length * average_width_; |
| 116 } | 122 } |
| 117 | 123 |
| 118 int PlatformFontMac::GetStyle() const { | 124 int PlatformFontMac::GetStyle() const { |
| 119 return font_style_; | 125 return font_style_; |
| 120 } | 126 } |
| 121 | 127 |
| 128 Font::Weight PlatformFontMac::GetWeight() const { | |
| 129 return font_weight_; | |
| 130 } | |
| 131 | |
| 122 const std::string& PlatformFontMac::GetFontName() const { | 132 const std::string& PlatformFontMac::GetFontName() const { |
| 123 return font_name_; | 133 return font_name_; |
| 124 } | 134 } |
| 125 | 135 |
| 126 std::string PlatformFontMac::GetActualFontNameForTesting() const { | 136 std::string PlatformFontMac::GetActualFontNameForTesting() const { |
| 127 return base::SysNSStringToUTF8([native_font_ familyName]); | 137 return base::SysNSStringToUTF8([native_font_ familyName]); |
| 128 } | 138 } |
| 129 | 139 |
| 130 int PlatformFontMac::GetFontSize() const { | 140 int PlatformFontMac::GetFontSize() const { |
| 131 return font_size_; | 141 return font_size_; |
| 132 } | 142 } |
| 133 | 143 |
| 134 const FontRenderParams& PlatformFontMac::GetFontRenderParams() { | 144 const FontRenderParams& PlatformFontMac::GetFontRenderParams() { |
| 135 return render_params_; | 145 return render_params_; |
| 136 } | 146 } |
| 137 | 147 |
| 138 NativeFont PlatformFontMac::GetNativeFont() const { | 148 NativeFont PlatformFontMac::GetNativeFont() const { |
| 139 return [[native_font_.get() retain] autorelease]; | 149 return [[native_font_.get() retain] autorelease]; |
| 140 } | 150 } |
| 141 | 151 |
| 142 //////////////////////////////////////////////////////////////////////////////// | 152 //////////////////////////////////////////////////////////////////////////////// |
| 143 // PlatformFontMac, private: | 153 // PlatformFontMac, private: |
| 144 | 154 |
| 145 PlatformFontMac::PlatformFontMac(const std::string& font_name, | 155 PlatformFontMac::PlatformFontMac(const std::string& font_name, |
| 146 int font_size, | 156 int font_size, |
| 147 int font_style) | 157 int font_style, |
| 158 Font::Weight font_weight) | |
| 148 : native_font_([NSFontWithSpec(font_name, font_size, font_style) retain]), | 159 : native_font_([NSFontWithSpec(font_name, font_size, font_style) retain]), |
| 149 font_name_(font_name), | 160 font_name_(font_name), |
| 150 font_size_(font_size), | 161 font_size_(font_size), |
| 151 font_style_(font_style) { | 162 font_style_(font_style), |
| 163 font_weight_(font_weight) { | |
| 152 CalculateMetricsAndInitRenderParams(); | 164 CalculateMetricsAndInitRenderParams(); |
| 153 } | 165 } |
| 154 | 166 |
| 155 PlatformFontMac::~PlatformFontMac() { | 167 PlatformFontMac::~PlatformFontMac() { |
| 156 } | 168 } |
| 157 | 169 |
| 158 void PlatformFontMac::CalculateMetricsAndInitRenderParams() { | 170 void PlatformFontMac::CalculateMetricsAndInitRenderParams() { |
| 159 NSFont* font = native_font_.get(); | 171 NSFont* font = native_font_.get(); |
| 160 if (!font) { | 172 if (!font) { |
| 161 // This object was constructed from a font name that doesn't correspond to | 173 // This object was constructed from a font name that doesn't correspond to |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 179 // to ensure GetBaseline() + descender fits within GetHeight() during layout. | 191 // to ensure GetBaseline() + descender fits within GetHeight() during layout. |
| 180 height_ = ceil(ascent_ + std::abs([font descender]) + [font leading]); | 192 height_ = ceil(ascent_ + std::abs([font descender]) + [font leading]); |
| 181 | 193 |
| 182 average_width_ = | 194 average_width_ = |
| 183 NSWidth([font boundingRectForGlyph:[font glyphWithName:@"x"]]); | 195 NSWidth([font boundingRectForGlyph:[font glyphWithName:@"x"]]); |
| 184 | 196 |
| 185 FontRenderParamsQuery query; | 197 FontRenderParamsQuery query; |
| 186 query.families.push_back(font_name_); | 198 query.families.push_back(font_name_); |
| 187 query.pixel_size = font_size_; | 199 query.pixel_size = font_size_; |
| 188 query.style = font_style_; | 200 query.style = font_style_; |
| 201 query.weight = font_weight_; | |
| 189 render_params_ = gfx::GetFontRenderParams(query, NULL); | 202 render_params_ = gfx::GetFontRenderParams(query, NULL); |
| 190 } | 203 } |
| 191 | 204 |
| 192 //////////////////////////////////////////////////////////////////////////////// | 205 //////////////////////////////////////////////////////////////////////////////// |
| 193 // PlatformFont, public: | 206 // PlatformFont, public: |
| 194 | 207 |
| 195 // static | 208 // static |
| 196 PlatformFont* PlatformFont::CreateDefault() { | 209 PlatformFont* PlatformFont::CreateDefault() { |
| 197 return new PlatformFontMac; | 210 return new PlatformFontMac; |
| 198 } | 211 } |
| 199 | 212 |
| 200 // static | 213 // static |
| 201 PlatformFont* PlatformFont::CreateFromNativeFont(NativeFont native_font) { | 214 PlatformFont* PlatformFont::CreateFromNativeFont(NativeFont native_font) { |
| 202 return new PlatformFontMac(native_font); | 215 return new PlatformFontMac(native_font); |
| 203 } | 216 } |
| 204 | 217 |
| 205 // static | 218 // static |
| 206 PlatformFont* PlatformFont::CreateFromNameAndSize(const std::string& font_name, | 219 PlatformFont* PlatformFont::CreateFromNameAndSize(const std::string& font_name, |
| 207 int font_size) { | 220 int font_size) { |
| 208 return new PlatformFontMac(font_name, font_size); | 221 return new PlatformFontMac(font_name, font_size); |
| 209 } | 222 } |
| 210 | 223 |
| 211 } // namespace gfx | 224 } // namespace gfx |
| OLD | NEW |