Index: chrome/browser/ui/views/harmony/harmony_typography_provider.cc |
diff --git a/chrome/browser/ui/views/harmony/harmony_typography_provider.cc b/chrome/browser/ui/views/harmony/harmony_typography_provider.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..21caf0cb832f7db4b16030d0338632a8d7852927 |
--- /dev/null |
+++ b/chrome/browser/ui/views/harmony/harmony_typography_provider.cc |
@@ -0,0 +1,121 @@ |
+// Copyright 2017 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 "chrome/browser/ui/views/harmony/harmony_typography_provider.h" |
+ |
+#include "chrome/browser/ui/views/harmony/chrome_typography.h" |
+#include "ui/base/resource/resource_bundle.h" |
+#include "ui/gfx/platform_font.h" |
+ |
+const gfx::FontList& HarmonyTypographyProvider::GetFont(int text_context, |
+ int text_style) const { |
+ // "Target" font size constants from the Harmony spec. |
+ constexpr int kHeadlineSize = 20; |
+ constexpr int kTitleSize = 15; |
+ constexpr int kBodyTextLargeSize = 13; |
+ constexpr int kDefaultSize = 12; |
+ |
+#if defined(OS_WIN) |
+ constexpr gfx::Font::Weight kButtonFontWeight = gfx::Font::Weight::BOLD; |
+#else |
+ constexpr gfx::Font::Weight kButtonFontWeight = gfx::Font::Weight::MEDIUM; |
+#endif |
+ |
+ int size_delta = kDefaultSize - gfx::PlatformFont::kDefaultBaseFontSize; |
+ gfx::Font::Weight font_weight = gfx::Font::Weight::NORMAL; |
+ switch (text_context) { |
+ case CONTEXT_HEADLINE: |
+ size_delta = kHeadlineSize - gfx::PlatformFont::kDefaultBaseFontSize; |
+ break; |
+ case views::style::CONTEXT_DIALOG_TITLE: |
+ size_delta = kTitleSize - gfx::PlatformFont::kDefaultBaseFontSize; |
+ break; |
+ case CONTEXT_BODY_TEXT_LARGE: |
+ size_delta = kBodyTextLargeSize - gfx::PlatformFont::kDefaultBaseFontSize; |
+ break; |
+ case views::style::CONTEXT_BUTTON: |
+ font_weight = kButtonFontWeight; |
+ break; |
+ default: |
+ break; |
+ } |
+ |
+ // Ignore |text_style| since it only affects color in the Harmony spec. |
+ return ui::ResourceBundle::GetSharedInstance().GetFontListWithDelta( |
+ size_delta, gfx::Font::NORMAL, font_weight); |
+} |
+ |
+SkColor HarmonyTypographyProvider::GetColor(int text_context, |
+ int text_style) const { |
+ // TODO(tapted): Look up colors from the spec. |
+ return SK_ColorBLACK; |
+} |
+ |
+int HarmonyTypographyProvider::GetLineHeight(int text_context, |
+ int text_style) const { |
+ // "Target" line height constants from the Harmony spec. A default OS |
+ // configuration should use these heights. However, if the user overrides OS |
+ // defaults, then GetLineHeight() should return the height that would add the |
+ // same extra space between lines as the default configuration would have. |
+ constexpr int kHeadlineHeight = 32; |
+ constexpr int kTitleHeight = 22; |
+ constexpr int kBodyHeight = 20; // For both large and small. |
+ |
+ // Button text should always use the minimum line height for a font to avoid |
+ // unnecessarily influencing the height of a button. |
+ constexpr int kButtonAbsoluteHeight = 0; |
+ |
+// The platform-specific heights (i.e. gfx::Font::GetHeight()) that result when |
+// asking for the target size constants in HarmonyTypographyProvider::GetFont() |
+// in a default OS configuration. |
+// TODO(tapted): Update these with constants specific to an OS point version. |
+#if defined(OS_MACOSX) |
+ constexpr int kHeadlinePlatformHeight = 25; |
+ constexpr int kTitlePlatformHeight = 19; |
+ constexpr int kBodyTextLargePlatformHeight = 16; |
+ constexpr int kBodyTextSmallPlatformHeight = 15; |
+#elif defined(OS_WIN) |
+ constexpr int kHeadlinePlatformHeight = 28; |
+ constexpr int kTitlePlatformHeight = 20; |
+ constexpr int kBodyTextLargePlatformHeight = 17; |
+ constexpr int kBodyTextSmallPlatformHeight = 15; |
+#else |
+ constexpr int kHeadlinePlatformHeight = 24; |
+ constexpr int kTitlePlatformHeight = 18; |
+ constexpr int kBodyTextLargePlatformHeight = 17; |
+ constexpr int kBodyTextSmallPlatformHeight = 15; |
+#endif |
+ |
+ // The style of the system font used to determine line heights. |
+ constexpr int kTemplateStyle = views::style::STYLE_PRIMARY; |
+ |
+ // TODO(tapted): These statics should be cleared out when something invokes |
+ // ResourceBundle::ReloadFonts(). Currently that only happens on ChromeOS. |
+ // See http://crbug.com/708943. |
+ static const int headline_height = |
+ GetFont(CONTEXT_HEADLINE, kTemplateStyle).GetHeight() - |
+ kHeadlinePlatformHeight + kHeadlineHeight; |
+ static const int title_height = |
+ GetFont(views::style::CONTEXT_DIALOG_TITLE, kTemplateStyle).GetHeight() - |
+ kTitlePlatformHeight + kTitleHeight; |
+ static const int body_large_height = |
+ GetFont(CONTEXT_BODY_TEXT_LARGE, kTemplateStyle).GetHeight() - |
+ kBodyTextLargePlatformHeight + kBodyHeight; |
+ static const int default_height = |
+ GetFont(CONTEXT_BODY_TEXT_SMALL, kTemplateStyle).GetHeight() - |
+ kBodyTextSmallPlatformHeight + kBodyHeight; |
+ |
+ switch (text_context) { |
+ case CONTEXT_HEADLINE: |
+ return headline_height; |
+ case views::style::CONTEXT_DIALOG_TITLE: |
+ return title_height; |
+ case CONTEXT_BODY_TEXT_LARGE: |
+ return body_large_height; |
+ case views::style::CONTEXT_BUTTON: |
+ return kButtonAbsoluteHeight; |
+ default: |
+ return default_height; |
+ } |
+} |