OLD | NEW |
(Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "ui/gfx/platform_font_win.h" |
| 6 |
| 7 #include "base/logging.h" |
| 8 #include "base/memory/ref_counted.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 #include "ui/gfx/font.h" |
| 11 |
| 12 namespace gfx { |
| 13 |
| 14 namespace { |
| 15 |
| 16 // Returns a font based on |base_font| with height at most |target_height| and |
| 17 // font size maximized. Returns |base_font| if height is already equal. |
| 18 gfx::Font AdjustFontSizeForHeight(const gfx::Font& base_font, |
| 19 int target_height) { |
| 20 Font expected_font = base_font; |
| 21 if (base_font.GetHeight() < target_height) { |
| 22 // Increase size while height is <= |target_height|. |
| 23 Font larger_font = base_font.DeriveFont(1, 0); |
| 24 while (larger_font.GetHeight() <= target_height) { |
| 25 expected_font = larger_font; |
| 26 larger_font = larger_font.DeriveFont(1, 0); |
| 27 } |
| 28 } else if (expected_font.GetHeight() > target_height) { |
| 29 // Decrease size until height is <= |target_height|. |
| 30 do { |
| 31 expected_font = expected_font.DeriveFont(-1, 0); |
| 32 } while (expected_font.GetHeight() > target_height); |
| 33 } |
| 34 return expected_font; |
| 35 } |
| 36 |
| 37 } // namespace |
| 38 |
| 39 TEST(PlatformFontWinTest, DeriveFontWithHeight) { |
| 40 const Font base_font; |
| 41 PlatformFontWin* platform_font = |
| 42 static_cast<PlatformFontWin*>(base_font.platform_font()); |
| 43 |
| 44 for (int i = -10; i < 10; i++) { |
| 45 const int target_height = base_font.GetHeight() + i; |
| 46 Font expected_font = AdjustFontSizeForHeight(base_font, target_height); |
| 47 ASSERT_LE(expected_font.GetHeight(), target_height); |
| 48 |
| 49 Font derived_font = platform_font->DeriveFontWithHeight(target_height, 0); |
| 50 EXPECT_EQ(expected_font.GetFontName(), derived_font.GetFontName()); |
| 51 EXPECT_EQ(expected_font.GetFontSize(), derived_font.GetFontSize()); |
| 52 EXPECT_LE(expected_font.GetHeight(), target_height); |
| 53 EXPECT_EQ(0, derived_font.GetStyle()); |
| 54 |
| 55 derived_font = platform_font->DeriveFontWithHeight(target_height, |
| 56 Font::BOLD); |
| 57 EXPECT_EQ(expected_font.GetFontName(), derived_font.GetFontName()); |
| 58 EXPECT_EQ(expected_font.GetFontSize(), derived_font.GetFontSize()); |
| 59 EXPECT_LE(expected_font.GetHeight(), target_height); |
| 60 EXPECT_EQ(Font::BOLD, derived_font.GetStyle()); |
| 61 |
| 62 // Test that deriving from the new font has the expected result. |
| 63 Font rederived_font = derived_font.DeriveFont(1, 0); |
| 64 expected_font = Font(derived_font.GetFontName(), |
| 65 derived_font.GetFontSize() + 1); |
| 66 EXPECT_EQ(expected_font.GetFontName(), rederived_font.GetFontName()); |
| 67 EXPECT_EQ(expected_font.GetFontSize(), rederived_font.GetFontSize()); |
| 68 EXPECT_EQ(expected_font.GetHeight(), rederived_font.GetHeight()); |
| 69 } |
| 70 } |
| 71 |
| 72 // Callback function used by DeriveFontWithHeight_MinSize() below. |
| 73 static int GetMinFontSize() { |
| 74 return 10; |
| 75 } |
| 76 |
| 77 TEST(PlatformFontWinTest, DeriveFontWithHeight_MinSize) { |
| 78 PlatformFontWin::GetMinimumFontSizeCallback old_callback = |
| 79 PlatformFontWin::get_minimum_font_size_callback; |
| 80 PlatformFontWin::get_minimum_font_size_callback = &GetMinFontSize; |
| 81 |
| 82 const Font base_font; |
| 83 const Font min_font(base_font.GetFontName(), GetMinFontSize()); |
| 84 PlatformFontWin* platform_font = |
| 85 static_cast<PlatformFontWin*>(base_font.platform_font()); |
| 86 |
| 87 const Font derived_font = |
| 88 platform_font->DeriveFontWithHeight(min_font.GetHeight() - 1, 0); |
| 89 EXPECT_EQ(min_font.GetFontSize(), derived_font.GetFontSize()); |
| 90 EXPECT_EQ(min_font.GetHeight(), derived_font.GetHeight()); |
| 91 |
| 92 PlatformFontWin::get_minimum_font_size_callback = old_callback; |
| 93 } |
| 94 |
| 95 } // namespace gfx |
OLD | NEW |