Chromium Code Reviews| 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_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 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 298 needs_layout_(false) { | 298 needs_layout_(false) { |
| 299 memset(&script_control_, 0, sizeof(script_control_)); | 299 memset(&script_control_, 0, sizeof(script_control_)); |
| 300 memset(&script_state_, 0, sizeof(script_state_)); | 300 memset(&script_state_, 0, sizeof(script_state_)); |
| 301 | 301 |
| 302 MoveCursorTo(EdgeSelectionModel(CURSOR_LEFT)); | 302 MoveCursorTo(EdgeSelectionModel(CURSOR_LEFT)); |
| 303 } | 303 } |
| 304 | 304 |
| 305 RenderTextWin::~RenderTextWin() { | 305 RenderTextWin::~RenderTextWin() { |
| 306 } | 306 } |
| 307 | 307 |
| 308 base::i18n::TextDirection RenderTextWin::GetTextDirection() { | |
| 309 EnsureLayout(); | |
| 310 return (script_state_.uBidiLevel == 0) ? | |
| 311 base::i18n::LEFT_TO_RIGHT : base::i18n::RIGHT_TO_LEFT; | |
| 312 } | |
| 313 | |
| 314 Size RenderTextWin::GetStringSize() { | 308 Size RenderTextWin::GetStringSize() { |
| 315 EnsureLayout(); | 309 EnsureLayout(); |
| 316 return string_size_; | 310 return string_size_; |
| 317 } | 311 } |
| 318 | 312 |
| 319 int RenderTextWin::GetBaseline() { | 313 int RenderTextWin::GetBaseline() { |
| 320 EnsureLayout(); | 314 EnsureLayout(); |
| 321 return common_baseline_; | 315 return common_baseline_; |
| 322 } | 316 } |
| 323 | 317 |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 593 | 587 |
| 594 x = glyph_x; | 588 x = glyph_x; |
| 595 } | 589 } |
| 596 } | 590 } |
| 597 | 591 |
| 598 void RenderTextWin::ItemizeLogicalText() { | 592 void RenderTextWin::ItemizeLogicalText() { |
| 599 runs_.clear(); | 593 runs_.clear(); |
| 600 string_size_ = Size(0, GetFont().GetHeight()); | 594 string_size_ = Size(0, GetFont().GetHeight()); |
| 601 common_baseline_ = 0; | 595 common_baseline_ = 0; |
| 602 | 596 |
| 603 // Use the first strong character direction as the base text direction. | 597 // Set the base text direction yeilded by the directionality mode. |
|
Alexei Svitkine (slow)
2012/07/30 22:29:16
Nit: yielded. Although, the comment isn't really c
msw
2012/07/31 03:03:06
Done ("Set Uniscribe's base text direction."), sim
| |
| 604 // TODO(msw): Use the application text direction instead of LTR by default? | |
| 605 script_state_.uBidiLevel = | 598 script_state_.uBidiLevel = |
| 606 (base::i18n::GetFirstStrongCharacterDirection(text()) == | 599 (GetTextDirection() == base::i18n::RIGHT_TO_LEFT) ? 1 : 0; |
| 607 base::i18n::RIGHT_TO_LEFT) ? 1 : 0; | |
| 608 | 600 |
| 609 if (text().empty()) | 601 if (text().empty()) |
| 610 return; | 602 return; |
| 611 | 603 |
| 612 const wchar_t* raw_text = text().c_str(); | 604 const wchar_t* raw_text = text().c_str(); |
| 613 const int text_length = text().length(); | 605 const int text_length = text().length(); |
| 614 | 606 |
| 615 HRESULT hr = E_OUTOFMEMORY; | 607 HRESULT hr = E_OUTOFMEMORY; |
| 616 int script_items_count = 0; | 608 int script_items_count = 0; |
| 617 std::vector<SCRIPT_ITEM> script_items; | 609 std::vector<SCRIPT_ITEM> script_items; |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 952 const internal::TextRun* run) { | 944 const internal::TextRun* run) { |
| 953 size_t caret = IndexOfAdjacentGrapheme(run->range.end(), CURSOR_BACKWARD); | 945 size_t caret = IndexOfAdjacentGrapheme(run->range.end(), CURSOR_BACKWARD); |
| 954 return SelectionModel(caret, CURSOR_FORWARD); | 946 return SelectionModel(caret, CURSOR_FORWARD); |
| 955 } | 947 } |
| 956 | 948 |
| 957 RenderText* RenderText::CreateInstance() { | 949 RenderText* RenderText::CreateInstance() { |
| 958 return new RenderTextWin; | 950 return new RenderTextWin; |
| 959 } | 951 } |
| 960 | 952 |
| 961 } // namespace gfx | 953 } // namespace gfx |
| OLD | NEW |