OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/render_text.h" | 5 #include "ui/gfx/render_text.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
10 #include "base/i18n/break_iterator.h" | 10 #include "base/i18n/break_iterator.h" |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
187 int left, | 187 int left, |
188 int top, | 188 int top, |
189 int width, | 189 int width, |
190 int height) const { | 190 int height) const { |
191 ASSERT_LT(top, row_count_) << string_; | 191 ASSERT_LT(top, row_count_) << string_; |
192 ASSERT_LE(top + height, row_count_) << string_; | 192 ASSERT_LE(top + height, row_count_) << string_; |
193 ASSERT_LT(left, stride_) << string_; | 193 ASSERT_LT(left, stride_) << string_; |
194 ASSERT_LE(left + width, stride_) << string_ << ", left " << left | 194 ASSERT_LE(left + width, stride_) << string_ << ", left " << left |
195 << ", width " << width << ", stride_ " | 195 << ", width " << width << ", stride_ " |
196 << stride_; | 196 << stride_; |
197 // Only report the first N failures. | |
198 uint32_t fail_limit = 5; | |
197 for (int y = top; y < top + height; ++y) { | 199 for (int y = top; y < top + height; ++y) { |
198 for (int x = left; x < left + width; ++x) { | 200 for (int x = left; x < left + width; ++x) { |
199 SkColor buffer_color = buffer_[x + y * stride_]; | 201 SkColor buffer_color = buffer_[x + y * stride_]; |
202 if (color != buffer_color && !(--fail_limit)) { | |
203 EXPECT_TRUE(fail_limit) << "fail_limit reached"; | |
204 return; | |
205 } | |
200 EXPECT_EQ(color, buffer_color) << string_ << " at " << x << ", " << y; | 206 EXPECT_EQ(color, buffer_color) << string_ << " at " << x << ", " << y; |
201 } | 207 } |
202 } | 208 } |
203 } | 209 } |
204 | 210 |
211 void EnsureSolidBorder(SkColor color, const Rect& rect) const { | |
212 { | |
213 SCOPED_TRACE("EnsureSolidBorder Top Side"); | |
214 EnsureSolidRect(SK_ColorWHITE, 0, 0, stride_, rect.y()); | |
215 } | |
216 { | |
217 SCOPED_TRACE("EnsureSolidBorder Bottom Side"); | |
218 EnsureSolidRect(SK_ColorWHITE, 0, rect.bottom(), stride_, | |
219 row_count_ - rect.bottom()); | |
220 } | |
221 { | |
222 SCOPED_TRACE("EnsureSolidBorder Left Side"); | |
223 EnsureSolidRect(SK_ColorWHITE, 0, rect.y(), rect.x(), rect.height()); | |
224 } | |
225 { | |
226 SCOPED_TRACE("EnsureSolidBorder Right Side"); | |
227 EnsureSolidRect(SK_ColorWHITE, rect.right(), rect.y(), | |
228 stride_ - rect.right(), rect.height()); | |
229 } | |
230 } | |
231 | |
205 private: | 232 private: |
206 const wchar_t* string_; | 233 const wchar_t* string_; |
207 const SkColor* buffer_; | 234 const SkColor* buffer_; |
208 int stride_; | 235 int stride_; |
209 int row_count_; | 236 int row_count_; |
210 | 237 |
211 DISALLOW_COPY_AND_ASSIGN(TestRectangleBuffer); | 238 DISALLOW_COPY_AND_ASSIGN(TestRectangleBuffer); |
212 }; | 239 }; |
213 | 240 |
214 } // namespace | 241 } // namespace |
(...skipping 2434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2649 render_text->SetText(kString); | 2676 render_text->SetText(kString); |
2650 render_text->ApplyStyle(BOLD, true, Range(0, 3)); | 2677 render_text->ApplyStyle(BOLD, true, Range(0, 3)); |
2651 render_text->SetElideBehavior(ELIDE_TAIL); | 2678 render_text->SetElideBehavior(ELIDE_TAIL); |
2652 | 2679 |
2653 render_text->SetDisplayRect(Rect(0, 0, 500, 100)); | 2680 render_text->SetDisplayRect(Rect(0, 0, 500, 100)); |
2654 EXPECT_EQ(kString, render_text->GetDisplayText()); | 2681 EXPECT_EQ(kString, render_text->GetDisplayText()); |
2655 render_text->SetDisplayRect(Rect(0, 0, render_text->GetContentWidth(), 100)); | 2682 render_text->SetDisplayRect(Rect(0, 0, render_text->GetContentWidth(), 100)); |
2656 EXPECT_EQ(kString, render_text->GetDisplayText()); | 2683 EXPECT_EQ(kString, render_text->GetDisplayText()); |
2657 } | 2684 } |
2658 | 2685 |
2686 // TODO(dschuyler): Alignment tests disabled on Mac because RenderTextMac | |
2687 // does not implement this yet. | |
2688 #if !defined(OS_MACOSX) | |
2689 TEST_F(RenderTextTest, VerticalAlignment) { | |
2690 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | |
2691 const wchar_t* string = L"g Hello g"; | |
2692 render_text->SetText(WideToUTF16(string)); | |
2693 render_text->ApplyStyle(BOLD, true, Range(0, 3)); | |
2694 const Size kCanvasSize(171, 50); | |
2695 const int kTestSize = 10; | |
2696 const Size string_size(render_text->GetContentWidth(), | |
2697 render_text->GetStringSize().height()); | |
2698 // The + 1 accounts for legacy behavior in GetAlignmentOffset(). | |
2699 const int kCenterBegin = (kCanvasSize.width() + 1 - string_size.width()) / 2; | |
2700 const int kRightBegin = kCanvasSize.width() - string_size.width() - kTestSize; | |
2701 // TODO(dschuyler): Determine where the need for the -1 below originates from. | |
2702 const int kMiddleBegin = | |
2703 ((kCanvasSize.height()) / 2) - 1 + | |
2704 (render_text->GetBaseline() - render_text->GetDisplayTextBaseline()); | |
2705 const int kBottomBegin = | |
2706 kCanvasSize.height() - string_size.height() - kTestSize; | |
2707 | |
2708 struct Tests { | |
2709 HorizontalAlignment horizontal; | |
2710 VerticalAlignment vertical; | |
2711 int x; | |
2712 int y; | |
2713 } const kTests[] = { | |
2714 {ALIGN_LEFT, VALIGN_TOP, kTestSize, kTestSize}, | |
2715 {ALIGN_LEFT, VALIGN_MIDDLE, kTestSize, kMiddleBegin}, | |
2716 {ALIGN_LEFT, VALIGN_BOTTOM, kTestSize, kBottomBegin}, | |
2717 {ALIGN_CENTER, VALIGN_TOP, kCenterBegin, kTestSize}, | |
2718 {ALIGN_CENTER, VALIGN_MIDDLE, kCenterBegin, kMiddleBegin}, | |
2719 {ALIGN_CENTER, VALIGN_BOTTOM, kCenterBegin, kBottomBegin}, | |
2720 {ALIGN_RIGHT, VALIGN_TOP, kRightBegin, kTestSize}, | |
2721 {ALIGN_RIGHT, VALIGN_MIDDLE, kRightBegin, kMiddleBegin}, | |
2722 {ALIGN_RIGHT, VALIGN_BOTTOM, kRightBegin, kBottomBegin}, | |
2723 }; | |
2724 | |
2725 skia::RefPtr<SkSurface> surface = skia::AdoptRef( | |
2726 SkSurface::NewRasterN32Premul(kCanvasSize.width(), kCanvasSize.height())); | |
2727 scoped_ptr<Canvas> canvas( | |
2728 Canvas::CreateCanvasWithoutScaling(surface->getCanvas(), 1.0f)); | |
2729 render_text->SetColor(SK_ColorBLACK); | |
2730 Rect bounds = Rect(kTestSize, kTestSize, kCanvasSize.width() - kTestSize * 2, | |
2731 kCanvasSize.height() - kTestSize * 2); | |
2732 render_text->SetDisplayRect(bounds); | |
2733 // Allow the RenderText to paint outside of its display rect. | |
2734 render_text->set_clip_to_display_rect(false); | |
2735 const uint32* buffer = | |
2736 static_cast<const uint32*>(surface->peekPixels(nullptr, nullptr)); | |
2737 ASSERT_NE(nullptr, buffer); | |
2738 TestRectangleBuffer rect_buffer(string, buffer, kCanvasSize.width(), | |
2739 kCanvasSize.height()); | |
2740 ASSERT_LE(string_size.width() + kTestSize * 2, kCanvasSize.width()); | |
2741 ASSERT_LE(string_size.height() + kTestSize * 2, kCanvasSize.height()); | |
2742 for (const auto& test : kTests) { | |
2743 SCOPED_TRACE(base::StringPrintf("VerticalAlignement H %i, V %i", | |
2744 test.horizontal, test.vertical)); | |
2745 | |
2746 surface->getCanvas()->clear(SK_ColorWHITE); | |
2747 render_text->SetHorizontalAlignment(test.horizontal); | |
2748 render_text->SetVerticalAlignment(test.vertical); | |
2749 EXPECT_EQ(test.x - kTestSize, render_text->GetAlignmentOffset(0).x()); | |
2750 EXPECT_EQ(test.y - kTestSize, render_text->GetAlignmentOffset(0).y()); | |
2751 Rect expected_rect(test.x, test.y, string_size.width(), | |
2752 string_size.height()); | |
2753 expected_rect.Inset(-1, -1); | |
2754 render_text->Draw(canvas.get()); | |
2755 rect_buffer.EnsureSolidBorder(SK_ColorWHITE, expected_rect); | |
2756 } | |
2757 } | |
2758 #endif // !defined(OS_MACOSX) | |
2759 | |
2659 // TODO(derat): Figure out why this fails on Windows: http://crbug.com/427184 | 2760 // TODO(derat): Figure out why this fails on Windows: http://crbug.com/427184 |
2660 #if !defined(OS_WIN) | 2761 #if !defined(OS_WIN) |
2661 // Ensure that RenderText examines all of the fonts in its FontList before | 2762 // Ensure that RenderText examines all of the fonts in its FontList before |
2662 // falling back to other fonts. | 2763 // falling back to other fonts. |
2663 TEST_F(RenderTextTest, HarfBuzz_FontListFallback) { | 2764 TEST_F(RenderTextTest, HarfBuzz_FontListFallback) { |
2664 // Double-check that the requested fonts are present. | 2765 // Double-check that the requested fonts are present. |
2665 FontList font_list("Arial, Symbol, 12px"); | 2766 FontList font_list("Arial, Symbol, 12px"); |
2666 const std::vector<Font>& fonts = font_list.GetFonts(); | 2767 const std::vector<Font>& fonts = font_list.GetFonts(); |
2667 ASSERT_EQ(2u, fonts.size()); | 2768 ASSERT_EQ(2u, fonts.size()); |
2668 ASSERT_EQ("arial", | 2769 ASSERT_EQ("arial", |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2743 SkSurface::NewRasterN32Premul(kCanvasSize.width(), kCanvasSize.height())); | 2844 SkSurface::NewRasterN32Premul(kCanvasSize.width(), kCanvasSize.height())); |
2744 scoped_ptr<Canvas> canvas( | 2845 scoped_ptr<Canvas> canvas( |
2745 Canvas::CreateCanvasWithoutScaling(surface->getCanvas(), 1.0f)); | 2846 Canvas::CreateCanvasWithoutScaling(surface->getCanvas(), 1.0f)); |
2746 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 2847 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
2747 render_text->SetHorizontalAlignment(ALIGN_LEFT); | 2848 render_text->SetHorizontalAlignment(ALIGN_LEFT); |
2748 render_text->SetColor(SK_ColorBLACK); | 2849 render_text->SetColor(SK_ColorBLACK); |
2749 | 2850 |
2750 for (auto string : kTestStrings) { | 2851 for (auto string : kTestStrings) { |
2751 surface->getCanvas()->clear(SK_ColorWHITE); | 2852 surface->getCanvas()->clear(SK_ColorWHITE); |
2752 render_text->SetText(WideToUTF16(string)); | 2853 render_text->SetText(WideToUTF16(string)); |
2753 const Size string_size = render_text->GetStringSize(); | 2854 const Size string_size(render_text->GetContentWidth(), |
msw
2015/03/30 19:19:12
I don't think this is correct, the cursor shouldn'
dschuyler
2015/03/31 18:38:14
The value of cursor_enabled_ defaults to true. It
msw
2015/04/01 15:07:17
Ah, you should probably disable the cursor for the
| |
2855 render_text->GetStringSize().height()); | |
2754 render_text->ApplyBaselineStyle(SUPERSCRIPT, Range(1, 2)); | 2856 render_text->ApplyBaselineStyle(SUPERSCRIPT, Range(1, 2)); |
2755 render_text->ApplyBaselineStyle(SUPERIOR, Range(3, 4)); | 2857 render_text->ApplyBaselineStyle(SUPERIOR, Range(3, 4)); |
2756 render_text->ApplyBaselineStyle(INFERIOR, Range(5, 6)); | 2858 render_text->ApplyBaselineStyle(INFERIOR, Range(5, 6)); |
2757 render_text->ApplyBaselineStyle(SUBSCRIPT, Range(7, 8)); | 2859 render_text->ApplyBaselineStyle(SUBSCRIPT, Range(7, 8)); |
2758 render_text->SetStyle(BOLD, true); | 2860 render_text->SetStyle(BOLD, true); |
2759 render_text->SetDisplayRect( | 2861 render_text->SetDisplayRect( |
2760 Rect(kTestSize, kTestSize, string_size.width(), string_size.height())); | 2862 Rect(kTestSize, kTestSize, string_size.width(), string_size.height())); |
2761 // Allow the RenderText to paint outside of its display rect. | 2863 // Allow the RenderText to paint outside of its display rect. |
2762 render_text->set_clip_to_display_rect(false); | 2864 render_text->set_clip_to_display_rect(false); |
2763 ASSERT_LE(string_size.width() + kTestSize * 2, kCanvasSize.width()); | 2865 ASSERT_LE(string_size.width() + kTestSize * 2, kCanvasSize.width()); |
2866 ASSERT_LE(string_size.height() + kTestSize * 2, kCanvasSize.height()); | |
2764 | 2867 |
2765 render_text->Draw(canvas.get()); | 2868 render_text->Draw(canvas.get()); |
2766 ASSERT_LT(string_size.width() + kTestSize, kCanvasSize.width()); | |
2767 const uint32* buffer = | 2869 const uint32* buffer = |
2768 static_cast<const uint32*>(surface->peekPixels(nullptr, nullptr)); | 2870 static_cast<const uint32*>(surface->peekPixels(nullptr, nullptr)); |
2769 ASSERT_NE(nullptr, buffer); | 2871 ASSERT_NE(nullptr, buffer); |
2770 TestRectangleBuffer rect_buffer(string, buffer, kCanvasSize.width(), | 2872 TestRectangleBuffer rect_buffer(string, buffer, kCanvasSize.width(), |
2771 kCanvasSize.height()); | 2873 kCanvasSize.height()); |
2874 // TODO(dschuyler): After platform issues are resolved below, change to | |
2875 // using EnsureSolidBorder() rather than EnsureSolidRect(). | |
2772 { | 2876 { |
2773 #if !defined(OS_CHROMEOS) | 2877 #if !defined(OS_CHROMEOS) |
2774 // TODO(dschuyler): On ChromeOS text draws above the GetStringSize rect. | 2878 // TODO(dschuyler): On ChromeOS text draws above the GetStringSize rect. |
2775 SCOPED_TRACE("TextDoesntClip Top Side"); | 2879 SCOPED_TRACE("TextDoesntClip Top Side"); |
2776 rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, 0, kCanvasSize.width(), | 2880 rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, 0, kCanvasSize.width(), |
2777 kTestSize); | 2881 kTestSize); |
2778 #endif | 2882 #endif |
2779 } | 2883 } |
2780 { | 2884 { |
2781 SCOPED_TRACE("TextDoesntClip Bottom Side"); | 2885 SCOPED_TRACE("TextDoesntClip Bottom Side"); |
(...skipping 29 matching lines...) Expand all Loading... | |
2811 kTestSize + string_size.width(), kTestSize, | 2915 kTestSize + string_size.width(), kTestSize, |
2812 kTestSize, string_size.height()); | 2916 kTestSize, string_size.height()); |
2813 #endif | 2917 #endif |
2814 } | 2918 } |
2815 } | 2919 } |
2816 } | 2920 } |
2817 | 2921 |
2818 // Ensure that the text will clip to the display rect. Draws to a canvas and | 2922 // Ensure that the text will clip to the display rect. Draws to a canvas and |
2819 // checks whether any pixel beyond the bounding rectangle is colored. | 2923 // checks whether any pixel beyond the bounding rectangle is colored. |
2820 TEST_F(RenderTextTest, TextDoesClip) { | 2924 TEST_F(RenderTextTest, TextDoesClip) { |
2925 SCOPED_TRACE("TextDoesClip"); | |
msw
2015/03/30 19:19:12
Remove this scoped trace.
dschuyler
2015/03/31 18:38:14
Done.
| |
2821 const wchar_t* kTestStrings[] = {L"TEST", L"W", L"WWWW", L"gAXAXWWWW"}; | 2926 const wchar_t* kTestStrings[] = {L"TEST", L"W", L"WWWW", L"gAXAXWWWW"}; |
2822 const Size kCanvasSize(300, 50); | 2927 const Size kCanvasSize(300, 50); |
2823 const int kTestSize = 10; | 2928 const int kTestSize = 10; |
2824 | 2929 |
2825 skia::RefPtr<SkSurface> surface = skia::AdoptRef( | 2930 skia::RefPtr<SkSurface> surface = skia::AdoptRef( |
2826 SkSurface::NewRasterN32Premul(kCanvasSize.width(), kCanvasSize.height())); | 2931 SkSurface::NewRasterN32Premul(kCanvasSize.width(), kCanvasSize.height())); |
2827 scoped_ptr<Canvas> canvas( | 2932 scoped_ptr<Canvas> canvas( |
2828 Canvas::CreateCanvasWithoutScaling(surface->getCanvas(), 1.0f)); | 2933 Canvas::CreateCanvasWithoutScaling(surface->getCanvas(), 1.0f)); |
2829 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 2934 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
2830 render_text->SetHorizontalAlignment(ALIGN_LEFT); | 2935 render_text->SetHorizontalAlignment(ALIGN_LEFT); |
2831 render_text->SetColor(SK_ColorBLACK); | 2936 render_text->SetColor(SK_ColorBLACK); |
2832 | 2937 |
2833 for (auto string : kTestStrings) { | 2938 for (auto string : kTestStrings) { |
2834 surface->getCanvas()->clear(SK_ColorWHITE); | 2939 surface->getCanvas()->clear(SK_ColorWHITE); |
2835 render_text->SetText(WideToUTF16(string)); | 2940 render_text->SetText(WideToUTF16(string)); |
2836 const Size string_size = render_text->GetStringSize(); | 2941 const Size string_size(render_text->GetContentWidth(), |
msw
2015/03/30 19:19:12
Ditto.
dschuyler
2015/03/31 18:38:14
Acknowledged.
| |
2942 render_text->GetStringSize().height()); | |
2837 int fake_width = string_size.width() / 2; | 2943 int fake_width = string_size.width() / 2; |
2838 int fake_height = string_size.height() / 2; | 2944 int fake_height = string_size.height() / 2; |
2839 render_text->SetDisplayRect( | 2945 const Rect bounds(kTestSize, kTestSize, fake_width, fake_height); |
2840 Rect(kTestSize, kTestSize, fake_width, fake_height)); | 2946 render_text->SetDisplayRect(bounds); |
2841 render_text->set_clip_to_display_rect(true); | 2947 render_text->set_clip_to_display_rect(true); |
2948 ASSERT_LE(string_size.width() + kTestSize * 2, kCanvasSize.width()); | |
2949 ASSERT_LE(string_size.height() + kTestSize * 2, kCanvasSize.height()); | |
2842 render_text->Draw(canvas.get()); | 2950 render_text->Draw(canvas.get()); |
2843 ASSERT_LT(string_size.width() + kTestSize, kCanvasSize.width()); | |
2844 const uint32* buffer = | 2951 const uint32* buffer = |
2845 static_cast<const uint32*>(surface->peekPixels(nullptr, nullptr)); | 2952 static_cast<const uint32*>(surface->peekPixels(nullptr, nullptr)); |
2846 ASSERT_NE(nullptr, buffer); | 2953 ASSERT_NE(nullptr, buffer); |
2847 TestRectangleBuffer rect_buffer(string, buffer, kCanvasSize.width(), | 2954 TestRectangleBuffer rect_buffer(string, buffer, kCanvasSize.width(), |
2848 kCanvasSize.height()); | 2955 kCanvasSize.height()); |
2849 { | 2956 rect_buffer.EnsureSolidBorder(SK_ColorWHITE, bounds); |
2850 SCOPED_TRACE("TextDoesClip Top Side"); | |
2851 rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, 0, kCanvasSize.width(), | |
2852 kTestSize); | |
2853 } | |
2854 | |
2855 { | |
2856 SCOPED_TRACE("TextDoesClip Bottom Side"); | |
2857 rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, kTestSize + fake_height, | |
2858 kCanvasSize.width(), kTestSize); | |
2859 } | |
2860 { | |
2861 SCOPED_TRACE("TextDoesClip Left Side"); | |
2862 rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, kTestSize, kTestSize, | |
2863 fake_height); | |
2864 } | |
2865 { | |
2866 SCOPED_TRACE("TextDoesClip Right Side"); | |
2867 rect_buffer.EnsureSolidRect(SK_ColorWHITE, kTestSize + fake_width, | |
2868 kTestSize, kTestSize, fake_height); | |
2869 } | |
2870 } | 2957 } |
2871 } | 2958 } |
2872 | 2959 |
2873 #if defined(OS_MACOSX) | 2960 #if defined(OS_MACOSX) |
2874 TEST_F(RenderTextTest, Mac_ElidedText) { | 2961 TEST_F(RenderTextTest, Mac_ElidedText) { |
2875 RenderTextMac render_text; | 2962 RenderTextMac render_text; |
2876 base::string16 text(ASCIIToUTF16("This is an example.")); | 2963 base::string16 text(ASCIIToUTF16("This is an example.")); |
2877 render_text.SetText(text); | 2964 render_text.SetText(text); |
2878 gfx::Size string_size = render_text.GetStringSize(); | 2965 gfx::Size string_size = render_text.GetStringSize(); |
2879 render_text.SetDisplayRect(gfx::Rect(string_size)); | 2966 render_text.SetDisplayRect(gfx::Rect(string_size)); |
2880 render_text.EnsureLayout(); | 2967 render_text.EnsureLayout(); |
2881 // NOTE: Character and glyph counts are only comparable for simple text. | 2968 // NOTE: Character and glyph counts are only comparable for simple text. |
2882 EXPECT_EQ(text.size(), | 2969 EXPECT_EQ(text.size(), |
2883 static_cast<size_t>(CTLineGetGlyphCount(render_text.line_))); | 2970 static_cast<size_t>(CTLineGetGlyphCount(render_text.line_))); |
2884 | 2971 |
2885 render_text.SetElideBehavior(ELIDE_TAIL); | 2972 render_text.SetElideBehavior(ELIDE_TAIL); |
2886 string_size.set_width(string_size.width() / 2); | 2973 string_size.set_width(string_size.width() / 2); |
2887 render_text.SetDisplayRect(gfx::Rect(string_size)); | 2974 render_text.SetDisplayRect(gfx::Rect(string_size)); |
2888 render_text.EnsureLayout(); | 2975 render_text.EnsureLayout(); |
2889 CFIndex glyph_count = CTLineGetGlyphCount(render_text.line_); | 2976 CFIndex glyph_count = CTLineGetGlyphCount(render_text.line_); |
2890 EXPECT_GT(text.size(), static_cast<size_t>(glyph_count)); | 2977 EXPECT_GT(text.size(), static_cast<size_t>(glyph_count)); |
2891 EXPECT_NE(0, glyph_count); | 2978 EXPECT_NE(0, glyph_count); |
2892 } | 2979 } |
2893 #endif | 2980 #endif |
2894 | 2981 |
2895 } // namespace gfx | 2982 } // namespace gfx |
OLD | NEW |