diff options
author | bdibello@chromium.org <bdibello@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-31 19:08:31 +0000 |
---|---|---|
committer | bdibello@chromium.org <bdibello@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-31 19:08:31 +0000 |
commit | 86197594b9687b40dde78cabf48edffec1d3c4c2 (patch) | |
tree | 2ac16ed2bb71e871e242d8f7a707f98136caafea /ui/gfx/platform_font_ios.mm | |
parent | f72c2cb0576c8e5c793769302e305f69e98b177a (diff) | |
download | chromium_src-86197594b9687b40dde78cabf48edffec1d3c4c2.zip chromium_src-86197594b9687b40dde78cabf48edffec1d3c4c2.tar.gz chromium_src-86197594b9687b40dde78cabf48edffec1d3c4c2.tar.bz2 |
Added platform_font_ios for iOS-specific fonts.
Review URL: https://chromiumcodereview.appspot.com/10896003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@154478 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/gfx/platform_font_ios.mm')
-rw-r--r-- | ui/gfx/platform_font_ios.mm | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/ui/gfx/platform_font_ios.mm b/ui/gfx/platform_font_ios.mm new file mode 100644 index 0000000..8323bf3 --- /dev/null +++ b/ui/gfx/platform_font_ios.mm @@ -0,0 +1,128 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/gfx/platform_font_ios.h" + +#import <UIKit/UIKit.h> + +#include "base/basictypes.h" +#include "base/sys_string_conversions.h" +#include "base/utf_string_conversions.h" +#include "ui/gfx/font.h" + +namespace gfx { + +//////////////////////////////////////////////////////////////////////////////// +// PlatformFontIOS, public: + +PlatformFontIOS::PlatformFontIOS() { + font_size_ = [UIFont systemFontSize]; + style_ = gfx::Font::NORMAL; + UIFont* system_font = [UIFont systemFontOfSize:font_size_]; + font_name_ = base::SysNSStringToUTF8([system_font fontName]); + CalculateMetrics(); +} + +PlatformFontIOS::PlatformFontIOS(NativeFont native_font) { + std::string font_name = base::SysNSStringToUTF8([native_font fontName]); + InitWithNameSizeAndStyle(font_name, + [native_font pointSize], + gfx::Font::NORMAL); +} + +PlatformFontIOS::PlatformFontIOS(const std::string& font_name, + int font_size) { + InitWithNameSizeAndStyle(font_name, font_size, gfx::Font::NORMAL); +} + +//////////////////////////////////////////////////////////////////////////////// +// PlatformFontIOS, PlatformFont implementation: + +Font PlatformFontIOS::DeriveFont(int size_delta, int style) const { + return Font(new PlatformFontIOS(font_name_, font_size_ + size_delta, style)); +} + +int PlatformFontIOS::GetHeight() const { + return height_; +} + +int PlatformFontIOS::GetBaseline() const { + return ascent_; +} + +int PlatformFontIOS::GetAverageCharacterWidth() const { + return average_width_; +} + +int PlatformFontIOS::GetStringWidth(const string16& text) const { + NSString* ns_text = base::SysUTF16ToNSString(text); + return [ns_text sizeWithFont:GetNativeFont()].width; +} + +int PlatformFontIOS::GetExpectedTextWidth(int length) const { + return length * average_width_; +} + +int PlatformFontIOS::GetStyle() const { + return style_; +} + +std::string PlatformFontIOS::GetFontName() const { + return font_name_; +} + +int PlatformFontIOS::GetFontSize() const { + return font_size_; +} + +NativeFont PlatformFontIOS::GetNativeFont() const { + return [UIFont fontWithName:base::SysUTF8ToNSString(font_name_) + size:font_size_]; +} + +//////////////////////////////////////////////////////////////////////////////// +// PlatformFontIOS, private: + +PlatformFontIOS::PlatformFontIOS(const std::string& font_name, + int font_size, + int style) { + InitWithNameSizeAndStyle(font_name, font_size, style); +} + +void PlatformFontIOS::InitWithNameSizeAndStyle(const std::string& font_name, + int font_size, + int style) { + font_name_ = font_name; + font_size_ = font_size; + style_ = style; + CalculateMetrics(); +} + +void PlatformFontIOS::CalculateMetrics() { + UIFont* font = GetNativeFont(); + height_ = font.lineHeight; + ascent_ = font.ascender; + average_width_ = [@"x" sizeWithFont:font].width; +} + +//////////////////////////////////////////////////////////////////////////////// +// PlatformFont, public: + +// static +PlatformFont* PlatformFont::CreateDefault() { + return new PlatformFontIOS; +} + +// static +PlatformFont* PlatformFont::CreateFromNativeFont(NativeFont native_font) { + return new PlatformFontIOS(native_font); +} + +// static +PlatformFont* PlatformFont::CreateFromNameAndSize(const std::string& font_name, + int font_size) { + return new PlatformFontIOS(font_name, font_size); +} + +} // namespace gfx |