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

Side by Side Diff: ui/gfx/render_text_win.cc

Issue 10807082: Add RenderText DirectionalityMode enum and support; etc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Restore Label::SetURL; derive the direction from display text. Created 8 years, 5 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 (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_win.h" 5 #include "ui/gfx/render_text_win.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/i18n/break_iterator.h" 9 #include "base/i18n/break_iterator.h"
10 #include "base/i18n/rtl.h" 10 #include "base/i18n/rtl.h"
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 needs_layout_(false) { 295 needs_layout_(false) {
296 memset(&script_control_, 0, sizeof(script_control_)); 296 memset(&script_control_, 0, sizeof(script_control_));
297 memset(&script_state_, 0, sizeof(script_state_)); 297 memset(&script_state_, 0, sizeof(script_state_));
298 298
299 MoveCursorTo(EdgeSelectionModel(CURSOR_LEFT)); 299 MoveCursorTo(EdgeSelectionModel(CURSOR_LEFT));
300 } 300 }
301 301
302 RenderTextWin::~RenderTextWin() { 302 RenderTextWin::~RenderTextWin() {
303 } 303 }
304 304
305 base::i18n::TextDirection RenderTextWin::GetTextDirection() {
306 EnsureLayout();
307 return (script_state_.uBidiLevel == 0) ?
308 base::i18n::LEFT_TO_RIGHT : base::i18n::RIGHT_TO_LEFT;
309 }
310
311 Size RenderTextWin::GetStringSize() { 305 Size RenderTextWin::GetStringSize() {
312 EnsureLayout(); 306 EnsureLayout();
313 return string_size_; 307 return string_size_;
314 } 308 }
315 309
316 int RenderTextWin::GetBaseline() { 310 int RenderTextWin::GetBaseline() {
317 EnsureLayout(); 311 EnsureLayout();
318 return common_baseline_; 312 return common_baseline_;
319 } 313 }
320 314
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 584
591 x = glyph_x; 585 x = glyph_x;
592 } 586 }
593 } 587 }
594 588
595 void RenderTextWin::ItemizeLogicalText() { 589 void RenderTextWin::ItemizeLogicalText() {
596 runs_.clear(); 590 runs_.clear();
597 string_size_ = Size(0, GetFont().GetHeight()); 591 string_size_ = Size(0, GetFont().GetHeight());
598 common_baseline_ = 0; 592 common_baseline_ = 0;
599 593
600 // Use the first strong character direction as the base text direction. 594 // Set the base text direction yeilded by the directionality mode.
601 // TODO(msw): Use the application text direction instead of LTR by default?
602 script_state_.uBidiLevel = 595 script_state_.uBidiLevel =
603 (base::i18n::GetFirstStrongCharacterDirection(text()) == 596 (GetTextDirection() == base::i18n::RIGHT_TO_LEFT) ? 1 : 0;
604 base::i18n::RIGHT_TO_LEFT) ? 1 : 0;
605 597
606 if (text().empty()) 598 if (text().empty())
607 return; 599 return;
608 600
609 const wchar_t* raw_text = text().c_str(); 601 const wchar_t* raw_text = text().c_str();
610 const int text_length = text().length(); 602 const int text_length = text().length();
611 603
612 HRESULT hr = E_OUTOFMEMORY; 604 HRESULT hr = E_OUTOFMEMORY;
613 int script_items_count = 0; 605 int script_items_count = 0;
614 std::vector<SCRIPT_ITEM> script_items; 606 std::vector<SCRIPT_ITEM> script_items;
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 const internal::TextRun* run) { 941 const internal::TextRun* run) {
950 size_t caret = IndexOfAdjacentGrapheme(run->range.end(), CURSOR_BACKWARD); 942 size_t caret = IndexOfAdjacentGrapheme(run->range.end(), CURSOR_BACKWARD);
951 return SelectionModel(caret, CURSOR_FORWARD); 943 return SelectionModel(caret, CURSOR_FORWARD);
952 } 944 }
953 945
954 RenderText* RenderText::CreateInstance() { 946 RenderText* RenderText::CreateInstance() {
955 return new RenderTextWin; 947 return new RenderTextWin;
956 } 948 }
957 949
958 } // namespace gfx 950 } // namespace gfx
OLDNEW
« ui/gfx/render_text.h ('K') | « ui/gfx/render_text_win.h ('k') | ui/views/controls/label.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698