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

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

Issue 7841056: fix know issues in RenderText (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: aupdate RenderTextWin. update test for Win platform. upload RenderTextTest that was missed Created 9 years, 3 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "base/i18n/break_iterator.h" 7 #include "base/i18n/break_iterator.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 bool leading = selection.caret_placement() == SelectionModel::LEADING; 184 bool leading = selection.caret_placement() == SelectionModel::LEADING;
185 // Adjust the x value for right-side placement. 185 // Adjust the x value for right-side placement.
186 if (run->script_analysis.fRTL == leading) 186 if (run->script_analysis.fRTL == leading)
187 rect.set_x(rect.right()); 187 rect.set_x(rect.right());
188 rect.set_width(0); 188 rect.set_width(0);
189 } 189 }
190 rect.set_origin(ToViewPoint(rect.origin())); 190 rect.set_origin(ToViewPoint(rect.origin()));
191 return rect; 191 return rect;
192 } 192 }
193 193
194 size_t RenderTextWin::GetIndexOfNextGrapheme(size_t position) {
195 return IndexOfAdjacentGrapheme(position, true);
196 }
197
194 SelectionModel RenderTextWin::GetLeftSelectionModel( 198 SelectionModel RenderTextWin::GetLeftSelectionModel(
195 const SelectionModel& selection, 199 const SelectionModel& selection,
196 BreakType break_type) { 200 BreakType break_type) {
197 if (break_type == LINE_BREAK || text().empty()) 201 if (break_type == LINE_BREAK || text().empty())
198 return LeftEndSelectionModel(); 202 return LeftEndSelectionModel();
199 if (break_type == CHARACTER_BREAK) 203 if (break_type == CHARACTER_BREAK)
200 return LeftSelectionModel(selection); 204 return LeftSelectionModel(selection);
201 // TODO(msw): Implement word breaking. 205 // TODO(msw): Implement word breaking.
202 return RenderText::GetLeftSelectionModel(selection, break_type); 206 return RenderText::GetLeftSelectionModel(selection, break_type);
203 } 207 }
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 if (!bounds.empty() && rect.SharesEdgeWith(bounds.back())) { 292 if (!bounds.empty() && rect.SharesEdgeWith(bounds.back())) {
289 rect = rect.Union(bounds.back()); 293 rect = rect.Union(bounds.back());
290 bounds.pop_back(); 294 bounds.pop_back();
291 } 295 }
292 bounds.push_back(rect); 296 bounds.push_back(rect);
293 } 297 }
294 } 298 }
295 return bounds; 299 return bounds;
296 } 300 }
297 301
302 bool RenderTextLinux::IsCursorablePosition(size_t position) {
msw 2011/09/14 02:43:48 RenderText*Win*
xji 2011/09/15 23:38:13 Done.
303 if (position == 0 || position == text().length())
304 return true;
305
306 size_t run_index = GetRunContainingPosition(position);
307 internal::TextRun* run = run_index < runs_.size() ? runs_[run_index] : NULL;
308 if (!run)
msw 2011/09/14 02:43:48 This could just be "if (run_index >= runs_.size())
xji 2011/09/15 23:38:13 Done.
309 return false;
310 if (position == run->range.start())
311 return true;
312 return run->logical_clusters[position] != run->logical_clusters[position -1];
msw 2011/09/14 02:43:48 The logical clusters array is indexed by offsets f
xji 2011/09/15 23:38:13 Done.
313 }
314
298 void RenderTextWin::ItemizeLogicalText() { 315 void RenderTextWin::ItemizeLogicalText() {
299 text_is_dirty_ = false; 316 text_is_dirty_ = false;
300 STLDeleteContainerPointers(runs_.begin(), runs_.end()); 317 STLDeleteContainerPointers(runs_.begin(), runs_.end());
301 runs_.clear(); 318 runs_.clear();
302 if (text().empty()) 319 if (text().empty())
303 return; 320 return;
304 321
305 const wchar_t* raw_text = text().c_str(); 322 const wchar_t* raw_text = text().c_str();
306 const int text_length = text().length(); 323 const int text_length = text().length();
307 324
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 Rect r(GetUpdatedCursorBounds()); 654 Rect r(GetUpdatedCursorBounds());
638 canvas->DrawRectInt(kCursorColor, r.x(), r.y(), r.width(), r.height()); 655 canvas->DrawRectInt(kCursorColor, r.x(), r.y(), r.width(), r.height());
639 } 656 }
640 } 657 }
641 658
642 RenderText* RenderText::CreateRenderText() { 659 RenderText* RenderText::CreateRenderText() {
643 return new RenderTextWin; 660 return new RenderTextWin;
644 } 661 }
645 662
646 } // namespace gfx 663 } // namespace gfx
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698