| 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/canvas.h" | 5 #include "ui/gfx/canvas.h" |
| 6 | 6 |
| 7 #include "base/i18n/rtl.h" | 7 #include "base/i18n/rtl.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "ui/base/text/text_elider.h" | |
| 11 #include "ui/gfx/font_list.h" | 10 #include "ui/gfx/font_list.h" |
| 12 #include "ui/gfx/insets.h" | 11 #include "ui/gfx/insets.h" |
| 13 #include "ui/gfx/range/range.h" | 12 #include "ui/gfx/range/range.h" |
| 14 #include "ui/gfx/rect.h" | 13 #include "ui/gfx/rect.h" |
| 15 #include "ui/gfx/render_text.h" | 14 #include "ui/gfx/render_text.h" |
| 16 #include "ui/gfx/shadow_value.h" | 15 #include "ui/gfx/shadow_value.h" |
| 16 #include "ui/gfx/text_elider.h" |
| 17 #include "ui/gfx/text_utils.h" | 17 #include "ui/gfx/text_utils.h" |
| 18 | 18 |
| 19 namespace gfx { | 19 namespace gfx { |
| 20 | 20 |
| 21 namespace { | 21 namespace { |
| 22 | 22 |
| 23 // If necessary, wraps |text| with RTL/LTR directionality characters based on | 23 // If necessary, wraps |text| with RTL/LTR directionality characters based on |
| 24 // |flags| and |text| content. | 24 // |flags| and |text| content. |
| 25 // Returns true if the text will be rendered right-to-left. | 25 // Returns true if the text will be rendered right-to-left. |
| 26 // TODO(msw): Nix this, now that RenderTextWin supports directionality directly. | 26 // TODO(msw): Nix this, now that RenderTextWin supports directionality directly. |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 } | 96 } |
| 97 | 97 |
| 98 // Elides |text| and adjusts |range| appropriately. If eliding causes |range| | 98 // Elides |text| and adjusts |range| appropriately. If eliding causes |range| |
| 99 // to no longer point to the same character in |text|, |range| is made invalid. | 99 // to no longer point to the same character in |text|, |range| is made invalid. |
| 100 void ElideTextAndAdjustRange(const FontList& font_list, | 100 void ElideTextAndAdjustRange(const FontList& font_list, |
| 101 int width, | 101 int width, |
| 102 base::string16* text, | 102 base::string16* text, |
| 103 gfx::Range* range) { | 103 gfx::Range* range) { |
| 104 const base::char16 start_char = | 104 const base::char16 start_char = |
| 105 (range->IsValid() ? text->at(range->start()) : 0); | 105 (range->IsValid() ? text->at(range->start()) : 0); |
| 106 *text = ui::ElideText(*text, font_list, width, ui::ELIDE_AT_END); | 106 *text = gfx::ElideText(*text, font_list, width, gfx::ELIDE_AT_END); |
| 107 if (!range->IsValid()) | 107 if (!range->IsValid()) |
| 108 return; | 108 return; |
| 109 if (range->start() >= text->length() || | 109 if (range->start() >= text->length() || |
| 110 text->at(range->start()) != start_char) { | 110 text->at(range->start()) != start_char) { |
| 111 *range = gfx::Range::InvalidRange(); | 111 *range = gfx::Range::InvalidRange(); |
| 112 } | 112 } |
| 113 } | 113 } |
| 114 | 114 |
| 115 // Updates |render_text| from the specified parameters. | 115 // Updates |render_text| from the specified parameters. |
| 116 void UpdateRenderText(const Rect& rect, | 116 void UpdateRenderText(const Rect& rect, |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 DCHECK_GE(*height, 0); | 176 DCHECK_GE(*height, 0); |
| 177 | 177 |
| 178 flags = AdjustPlatformSpecificFlags(text, flags); | 178 flags = AdjustPlatformSpecificFlags(text, flags); |
| 179 | 179 |
| 180 base::string16 adjusted_text = text; | 180 base::string16 adjusted_text = text; |
| 181 #if defined(OS_WIN) | 181 #if defined(OS_WIN) |
| 182 AdjustStringDirection(flags, &adjusted_text); | 182 AdjustStringDirection(flags, &adjusted_text); |
| 183 #endif | 183 #endif |
| 184 | 184 |
| 185 if ((flags & MULTI_LINE) && *width != 0) { | 185 if ((flags & MULTI_LINE) && *width != 0) { |
| 186 ui::WordWrapBehavior wrap_behavior = ui::TRUNCATE_LONG_WORDS; | 186 gfx::WordWrapBehavior wrap_behavior = gfx::TRUNCATE_LONG_WORDS; |
| 187 if (flags & CHARACTER_BREAK) | 187 if (flags & CHARACTER_BREAK) |
| 188 wrap_behavior = ui::WRAP_LONG_WORDS; | 188 wrap_behavior = gfx::WRAP_LONG_WORDS; |
| 189 else if (!(flags & NO_ELLIPSIS)) | 189 else if (!(flags & NO_ELLIPSIS)) |
| 190 wrap_behavior = ui::ELIDE_LONG_WORDS; | 190 wrap_behavior = gfx::ELIDE_LONG_WORDS; |
| 191 | 191 |
| 192 Rect rect(*width, INT_MAX); | 192 Rect rect(*width, INT_MAX); |
| 193 std::vector<base::string16> strings; | 193 std::vector<base::string16> strings; |
| 194 ui::ElideRectangleText(adjusted_text, font_list, | 194 gfx::ElideRectangleText(adjusted_text, font_list, |
| 195 rect.width(), rect.height(), | 195 rect.width(), rect.height(), |
| 196 wrap_behavior, &strings); | 196 wrap_behavior, &strings); |
| 197 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 197 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| 198 UpdateRenderText(rect, base::string16(), font_list, flags, 0, | 198 UpdateRenderText(rect, base::string16(), font_list, flags, 0, |
| 199 render_text.get()); | 199 render_text.get()); |
| 200 | 200 |
| 201 int h = 0; | 201 int h = 0; |
| 202 int w = 0; | 202 int w = 0; |
| 203 for (size_t i = 0; i < strings.size(); ++i) { | 203 for (size_t i = 0; i < strings.size(); ++i) { |
| 204 StripAcceleratorChars(flags, &strings[i]); | 204 StripAcceleratorChars(flags, &strings[i]); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 base::string16 adjusted_text = text; | 251 base::string16 adjusted_text = text; |
| 252 | 252 |
| 253 #if defined(OS_WIN) | 253 #if defined(OS_WIN) |
| 254 AdjustStringDirection(flags, &adjusted_text); | 254 AdjustStringDirection(flags, &adjusted_text); |
| 255 #endif | 255 #endif |
| 256 | 256 |
| 257 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 257 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| 258 render_text->SetTextShadows(shadows); | 258 render_text->SetTextShadows(shadows); |
| 259 | 259 |
| 260 if (flags & MULTI_LINE) { | 260 if (flags & MULTI_LINE) { |
| 261 ui::WordWrapBehavior wrap_behavior = ui::IGNORE_LONG_WORDS; | 261 gfx::WordWrapBehavior wrap_behavior = gfx::IGNORE_LONG_WORDS; |
| 262 if (flags & CHARACTER_BREAK) | 262 if (flags & CHARACTER_BREAK) |
| 263 wrap_behavior = ui::WRAP_LONG_WORDS; | 263 wrap_behavior = gfx::WRAP_LONG_WORDS; |
| 264 else if (!(flags & NO_ELLIPSIS)) | 264 else if (!(flags & NO_ELLIPSIS)) |
| 265 wrap_behavior = ui::ELIDE_LONG_WORDS; | 265 wrap_behavior = gfx::ELIDE_LONG_WORDS; |
| 266 | 266 |
| 267 std::vector<base::string16> strings; | 267 std::vector<base::string16> strings; |
| 268 ui::ElideRectangleText(adjusted_text, | 268 gfx::ElideRectangleText(adjusted_text, |
| 269 font_list, | 269 font_list, |
| 270 text_bounds.width(), text_bounds.height(), | 270 text_bounds.width(), text_bounds.height(), |
| 271 wrap_behavior, | 271 wrap_behavior, |
| 272 &strings); | 272 &strings); |
| 273 | 273 |
| 274 for (size_t i = 0; i < strings.size(); i++) { | 274 for (size_t i = 0; i < strings.size(); i++) { |
| 275 gfx::Range range = StripAcceleratorChars(flags, &strings[i]); | 275 gfx::Range range = StripAcceleratorChars(flags, &strings[i]); |
| 276 UpdateRenderText(rect, strings[i], font_list, flags, color, | 276 UpdateRenderText(rect, strings[i], font_list, flags, color, |
| 277 render_text.get()); | 277 render_text.get()); |
| 278 int line_padding = 0; | 278 int line_padding = 0; |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 463 size_t desired_characters_to_truncate_from_head, | 463 size_t desired_characters_to_truncate_from_head, |
| 464 const Font& font, | 464 const Font& font, |
| 465 SkColor color, | 465 SkColor color, |
| 466 const Rect& display_rect) { | 466 const Rect& display_rect) { |
| 467 DrawFadeTruncatingStringRect(text, truncate_mode, | 467 DrawFadeTruncatingStringRect(text, truncate_mode, |
| 468 desired_characters_to_truncate_from_head, | 468 desired_characters_to_truncate_from_head, |
| 469 FontList(font), color, display_rect); | 469 FontList(font), color, display_rect); |
| 470 } | 470 } |
| 471 | 471 |
| 472 } // namespace gfx | 472 } // namespace gfx |
| OLD | NEW |