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

Side by Side Diff: ui/gfx/canvas_unittest_mac.mm

Issue 24883002: Uses and returns the fractional width in text eliding (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More fixes per feedback Created 7 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/canvas.h" 5 #include "ui/gfx/canvas.h"
6 6
7 #include <cmath>
8
9 #import <Cocoa/Cocoa.h> 7 #import <Cocoa/Cocoa.h>
10 8
11 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
12 #include "base/strings/sys_string_conversions.h" 10 #include "base/strings/sys_string_conversions.h"
13 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
14 #include "ui/gfx/font.h" 12 #include "ui/gfx/font.h"
15 #include "ui/gfx/font_list.h" 13 #include "ui/gfx/font_list.h"
16 14
17 namespace gfx { 15 namespace gfx {
18 16
19 namespace { 17 namespace {
20 18
21 // Mac-specific code for string size computations. This is a verbatim copy 19 // Returns the pixel width of the string via calling the native method
22 // of the old implementation that used to be in canvas_mac.mm. 20 // sizeWithAttributes.
23 void CanvasMac_SizeStringInt(const base::string16& text, 21 float GetStringNativeWidth(const base::string16& text,
24 const FontList& font_list, 22 const FontList& font_list) {
25 int* width,
26 int* height,
27 int line_height,
28 int flags) {
29 DLOG_IF(WARNING, line_height != 0) << "Line heights not implemented.";
30 DLOG_IF(WARNING, flags & Canvas::MULTI_LINE) << "Multi-line not implemented.";
31 23
msw 2013/10/01 21:46:45 nit: remove blank line
32 NSFont* native_font = font_list.GetPrimaryFont().GetNativeFont(); 24 NSFont* native_font = font_list.GetPrimaryFont().GetNativeFont();
33 NSString* ns_string = base::SysUTF16ToNSString(text); 25 NSString* ns_string = base::SysUTF16ToNSString(text);
34 NSDictionary* attributes = 26 NSDictionary* attributes =
35 [NSDictionary dictionaryWithObject:native_font 27 [NSDictionary dictionaryWithObject:native_font
36 forKey:NSFontAttributeName]; 28 forKey:NSFontAttributeName];
37 NSSize string_size = [ns_string sizeWithAttributes:attributes]; 29 return [ns_string sizeWithAttributes:attributes].width;
38 *width = std::ceil(string_size.width);
39 *height = font_list.GetHeight();
40 } 30 }
41 31
42 } // namespace 32 } // namespace
43 33
44 class CanvasTestMac : public testing::Test { 34 class CanvasTestMac : public testing::Test {
45 protected: 35 protected:
46 // Compare the size returned by Canvas::SizeStringInt to the size generated 36 // Compare the size returned by Canvas::SizeStringToFit to the size generated
47 // by the platform-specific version in CanvasMac_SizeStringInt. Will generate 37 // by the platform-specific version in CanvasMac_SizeStringToFit. Will
48 // expectation failure on any mismatch. Only works for single-line text 38 // generate expectation failure on any mismatch. Only works for single-line
49 // without specified line height, since that is all the platform 39 // text without specified line height, since that is all the platform
50 // implementation supports. 40 // implementation supports.
51 void CompareSizes(const char* text) { 41 void CompareSizes(const char* text) {
52 const int kReallyLargeNumber = 12345678; 42 const float kReallyLargeNumber = 12345678;
53 FontList font_list(font_); 43 FontList font_list(font_);
54 base::string16 text16 = base::UTF8ToUTF16(text); 44 base::string16 text16 = base::UTF8ToUTF16(text);
55 45
56 int mac_width = kReallyLargeNumber; 46 float mac_width = GetStringNativeWidth(text16, font_list);
57 int mac_height = kReallyLargeNumber; 47 int mac_height = font_list.GetHeight();
58 CanvasMac_SizeStringInt(text16, font_list, &mac_width, &mac_height, 0, 0);
59 48
60 int canvas_width = kReallyLargeNumber; 49 float canvas_width = kReallyLargeNumber;
61 int canvas_height = kReallyLargeNumber; 50 float canvas_height = kReallyLargeNumber;
62 Canvas::SizeStringInt( 51 Canvas::SizeStringToFit(
63 text16, font_list, &canvas_width, &canvas_height, 0, 0); 52 text16, font_list, &canvas_width, &canvas_height, 0, 0);
64 53
65 EXPECT_NE(kReallyLargeNumber, mac_width) << "no width for " << text; 54 EXPECT_NE(kReallyLargeNumber, mac_width) << "no width for " << text;
66 EXPECT_NE(kReallyLargeNumber, mac_height) << "no height for " << text; 55 EXPECT_NE(kReallyLargeNumber, mac_height) << "no height for " << text;
67 EXPECT_EQ(mac_width, canvas_width) << " width for " << text; 56 EXPECT_EQ(mac_width, canvas_width) << " width for " << text;
68 EXPECT_EQ(mac_height, canvas_height) << " height for " << text; 57 // FontList::GetHeight returns a truncated height.
58 EXPECT_EQ(mac_height,
59 static_cast<int>(canvas_height)) << " height for " << text;
69 } 60 }
70 61
71 private: 62 private:
72 Font font_; 63 Font font_;
73 }; 64 };
74 65
75 // Tests that Canvas' SizeStringInt yields result consistent with a native 66 // Tests that Canvas' SizeStringToFit yields result consistent with a native
76 // implementation. 67 // implementation.
77 TEST_F(CanvasTestMac, StringSizeIdenticalForSkia) { 68 TEST_F(CanvasTestMac, StringSizeIdenticalForSkia) {
78 CompareSizes(""); 69 CompareSizes("");
79 CompareSizes("Foo"); 70 CompareSizes("Foo");
80 CompareSizes("Longword"); 71 CompareSizes("Longword");
81 CompareSizes("This is a complete sentence."); 72 CompareSizes("This is a complete sentence.");
82 } 73 }
83 74
75 TEST_F(CanvasTestMac, FractionalWidth) {
76 const float kReallyLargeNumber = 12345678;
77 float width = kReallyLargeNumber;
78 float height = kReallyLargeNumber;
79
80 FontList font_list;
81 Canvas::SizeStringToFit(
82 base::UTF8ToUTF16("Test"), font_list, &width, &height, 0, 0);
83
84 EXPECT_GT(width - static_cast<int>(width), 0);
85 }
86
84 } // namespace gfx 87 } // namespace gfx
OLDNEW
« ash/system/user/tray_user.cc ('K') | « ui/gfx/canvas_unittest.cc ('k') | ui/gfx/font.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698