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

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: Fix round-down problems 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
32 NSFont* native_font = font_list.GetPrimaryFont().GetNativeFont(); 23 NSFont* native_font = font_list.GetPrimaryFont().GetNativeFont();
33 NSString* ns_string = base::SysUTF16ToNSString(text); 24 NSString* ns_string = base::SysUTF16ToNSString(text);
34 NSDictionary* attributes = 25 NSDictionary* attributes =
35 [NSDictionary dictionaryWithObject:native_font 26 [NSDictionary dictionaryWithObject:native_font
36 forKey:NSFontAttributeName]; 27 forKey:NSFontAttributeName];
37 NSSize string_size = [ns_string sizeWithAttributes:attributes]; 28 return [ns_string sizeWithAttributes:attributes].width;
38 *width = std::ceil(string_size.width);
39 *height = font_list.GetHeight();
40 } 29 }
41 30
42 } // namespace 31 } // namespace
43 32
44 class CanvasTestMac : public testing::Test { 33 class CanvasTestMac : public testing::Test {
45 protected: 34 protected:
46 // Compare the size returned by Canvas::SizeStringInt to the size generated 35 // Compare the size returned by Canvas::SizeStringToFit to the size generated
47 // by the platform-specific version in CanvasMac_SizeStringInt. Will generate 36 // by the platform-specific version in CanvasMac_SizeStringToFit. Will
48 // expectation failure on any mismatch. Only works for single-line text 37 // generate expectation failure on any mismatch. Only works for single-line
49 // without specified line height, since that is all the platform 38 // text without specified line height, since that is all the platform
50 // implementation supports. 39 // implementation supports.
51 void CompareSizes(const char* text) { 40 void CompareSizes(const char* text) {
52 const int kReallyLargeNumber = 12345678; 41 const float kReallyLargeNumber = 12345678;
53 FontList font_list(font_); 42 FontList font_list(font_);
54 base::string16 text16 = base::UTF8ToUTF16(text); 43 base::string16 text16 = base::UTF8ToUTF16(text);
55 44
56 int mac_width = kReallyLargeNumber; 45 float mac_width = GetStringNativeWidth(text16, font_list);
57 int mac_height = kReallyLargeNumber; 46 int mac_height = font_list.GetHeight();
58 CanvasMac_SizeStringInt(text16, font_list, &mac_width, &mac_height, 0, 0);
59 47
60 int canvas_width = kReallyLargeNumber; 48 float canvas_width = kReallyLargeNumber;
61 int canvas_height = kReallyLargeNumber; 49 float canvas_height = kReallyLargeNumber;
62 Canvas::SizeStringInt( 50 Canvas::SizeStringToFit(
63 text16, font_list, &canvas_width, &canvas_height, 0, 0); 51 text16, font_list, &canvas_width, &canvas_height, 0, 0);
64 52
65 EXPECT_NE(kReallyLargeNumber, mac_width) << "no width for " << text; 53 EXPECT_NE(kReallyLargeNumber, mac_width) << "no width for " << text;
66 EXPECT_NE(kReallyLargeNumber, mac_height) << "no height for " << text; 54 EXPECT_NE(kReallyLargeNumber, mac_height) << "no height for " << text;
67 EXPECT_EQ(mac_width, canvas_width) << " width for " << text; 55 EXPECT_EQ(mac_width, canvas_width) << " width for " << text;
68 EXPECT_EQ(mac_height, canvas_height) << " height for " << text; 56 // FontList::GetHeight returns a truncated height.
57 EXPECT_EQ(mac_height,
58 static_cast<int>(canvas_height)) << " height for " << text;
69 } 59 }
70 60
71 private: 61 private:
72 Font font_; 62 Font font_;
73 }; 63 };
74 64
75 // Tests that Canvas' SizeStringInt yields result consistent with a native 65 // Tests that Canvas' SizeStringToFit yields result consistent with a native
76 // implementation. 66 // implementation.
77 TEST_F(CanvasTestMac, StringSizeIdenticalForSkia) { 67 TEST_F(CanvasTestMac, StringSizeIdenticalForSkia) {
78 CompareSizes(""); 68 CompareSizes("");
79 CompareSizes("Foo"); 69 CompareSizes("Foo");
80 CompareSizes("Longword"); 70 CompareSizes("Longword");
81 CompareSizes("This is a complete sentence."); 71 CompareSizes("This is a complete sentence.");
82 } 72 }
83 73
74 TEST_F(CanvasTestMac, FractionalWidth) {
75 const float kReallyLargeNumber = 12345678;
76 float width = kReallyLargeNumber;
77 float height = kReallyLargeNumber;
78
79 FontList font_list;
80 Canvas::SizeStringToFit(
81 base::UTF8ToUTF16("Test"), font_list, &width, &height, 0, 0);
82
83 EXPECT_GT(width - static_cast<int>(width), 0);
84 }
85
84 } // namespace gfx 86 } // namespace gfx
OLDNEW
« ui/gfx/canvas.h ('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