| OLD | NEW |
| 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_linux.h" | 5 #include "ui/gfx/render_text_linux.h" |
| 6 | 6 |
| 7 #include <pango/pangocairo.h> | 7 #include <pango/pangocairo.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 | 9 |
| 10 #include "base/i18n/break_iterator.h" | 10 #include "base/i18n/break_iterator.h" |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 // Vertically centered. | 277 // Vertically centered. |
| 278 int text_y = offset.y() + ((bounds.height() - text_height) / 2); | 278 int text_y = offset.y() + ((bounds.height() - text_height) / 2); |
| 279 // TODO(xji): need to use SkCanvas->drawPosText() for gpu acceleration. | 279 // TODO(xji): need to use SkCanvas->drawPosText() for gpu acceleration. |
| 280 cairo_move_to(cr, offset.x(), text_y); | 280 cairo_move_to(cr, offset.x(), text_y); |
| 281 pango_cairo_show_layout(cr, layout_); | 281 pango_cairo_show_layout(cr, layout_); |
| 282 | 282 |
| 283 cairo_restore(cr); | 283 cairo_restore(cr); |
| 284 } | 284 } |
| 285 | 285 |
| 286 size_t RenderTextLinux::IndexOfAdjacentGrapheme(size_t index, bool next) { | 286 size_t RenderTextLinux::IndexOfAdjacentGrapheme(size_t index, bool next) { |
| 287 if (index > text().length()) |
| 288 return text().length(); |
| 287 EnsureLayout(); | 289 EnsureLayout(); |
| 288 return Utf16IndexOfAdjacentGrapheme(Utf16IndexToUtf8Index(index), next); | 290 return Utf16IndexOfAdjacentGrapheme(Utf16IndexToUtf8Index(index), next); |
| 289 } | 291 } |
| 290 | 292 |
| 291 GSList* RenderTextLinux::GetRunContainingPosition(size_t position) const { | 293 GSList* RenderTextLinux::GetRunContainingPosition(size_t position) const { |
| 292 GSList* run = current_line_->runs; | 294 GSList* run = current_line_->runs; |
| 293 while (run) { | 295 while (run) { |
| 294 PangoItem* item = reinterpret_cast<PangoLayoutRun*>(run->data)->item; | 296 PangoItem* item = reinterpret_cast<PangoLayoutRun*>(run->data)->item; |
| 295 size_t run_start = Utf8IndexToUtf16Index(item->offset); | 297 size_t run_start = Utf8IndexToUtf16Index(item->offset); |
| 296 size_t run_end = Utf8IndexToUtf16Index(item->offset + item->length); | 298 size_t run_end = Utf8IndexToUtf16Index(item->offset + item->length); |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 } | 685 } |
| 684 | 686 |
| 685 void RenderTextLinux::GetSelectionBounds(std::vector<Rect>* bounds) { | 687 void RenderTextLinux::GetSelectionBounds(std::vector<Rect>* bounds) { |
| 686 if (selection_visual_bounds_.empty()) | 688 if (selection_visual_bounds_.empty()) |
| 687 CalculateSubstringBounds(GetSelectionStart(), GetCursorPosition(), | 689 CalculateSubstringBounds(GetSelectionStart(), GetCursorPosition(), |
| 688 &selection_visual_bounds_); | 690 &selection_visual_bounds_); |
| 689 *bounds = selection_visual_bounds_; | 691 *bounds = selection_visual_bounds_; |
| 690 } | 692 } |
| 691 | 693 |
| 692 } // namespace gfx | 694 } // namespace gfx |
| OLD | NEW |