| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_harfbuzz.h" | 5 #include "ui/gfx/render_text_harfbuzz.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 #include <set> | 8 #include <set> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 889 SizeF RenderTextHarfBuzz::GetStringSizeF() { | 889 SizeF RenderTextHarfBuzz::GetStringSizeF() { |
| 890 EnsureLayout(); | 890 EnsureLayout(); |
| 891 return total_size_; | 891 return total_size_; |
| 892 } | 892 } |
| 893 | 893 |
| 894 SelectionModel RenderTextHarfBuzz::FindCursorPosition(const Point& view_point) { | 894 SelectionModel RenderTextHarfBuzz::FindCursorPosition(const Point& view_point) { |
| 895 EnsureLayout(); | 895 EnsureLayout(); |
| 896 DCHECK(!lines().empty()); | 896 DCHECK(!lines().empty()); |
| 897 | 897 |
| 898 int line_index = GetLineContainingYCoord((view_point - GetLineOffset(0)).y()); | 898 int line_index = GetLineContainingYCoord((view_point - GetLineOffset(0)).y()); |
| 899 // Clip line index to a valid value in case kDragToEndIfOutsideVerticalBounds | 899 // Handle kDragToEndIfOutsideVerticalBounds above or below the text in a |
| 900 // is false. Else, drag to end. | 900 // single-line by extending towards the mouse cursor. |
| 901 if (RenderText::kDragToEndIfOutsideVerticalBounds && !multiline() && |
| 902 (line_index < 0 || line_index >= static_cast<int>(lines().size()))) { |
| 903 SelectionModel selection_start = GetSelectionModelForSelectionStart(); |
| 904 bool left = view_point.x() < GetCursorBounds(selection_start, true).x(); |
| 905 return EdgeSelectionModel(left ? CURSOR_LEFT : CURSOR_RIGHT); |
| 906 } |
| 907 // Otherwise, clamp |line_index| to a valid value or drag to logical ends. |
| 901 if (line_index < 0) { | 908 if (line_index < 0) { |
| 902 if (RenderText::kDragToEndIfOutsideVerticalBounds) | 909 if (RenderText::kDragToEndIfOutsideVerticalBounds) |
| 903 return EdgeSelectionModel(GetVisualDirectionOfLogicalBeginning()); | 910 return EdgeSelectionModel(GetVisualDirectionOfLogicalBeginning()); |
| 904 else | 911 line_index = 0; |
| 905 line_index = 0; | |
| 906 } | 912 } |
| 907 if (line_index >= static_cast<int>(lines().size())) { | 913 if (line_index >= static_cast<int>(lines().size())) { |
| 908 if (RenderText::kDragToEndIfOutsideVerticalBounds) | 914 if (RenderText::kDragToEndIfOutsideVerticalBounds) |
| 909 return EdgeSelectionModel(GetVisualDirectionOfLogicalEnd()); | 915 return EdgeSelectionModel(GetVisualDirectionOfLogicalEnd()); |
| 910 else | 916 line_index = lines().size() - 1; |
| 911 line_index = lines().size() - 1; | |
| 912 } | 917 } |
| 913 const internal::Line& line = lines()[line_index]; | 918 const internal::Line& line = lines()[line_index]; |
| 914 | 919 |
| 915 float point_offset_relative_segment = 0; | 920 float point_offset_relative_segment = 0; |
| 916 const int segment_index = GetLineSegmentContainingXCoord( | 921 const int segment_index = GetLineSegmentContainingXCoord( |
| 917 line, (view_point - GetLineOffset(line_index)).x(), | 922 line, (view_point - GetLineOffset(line_index)).x(), |
| 918 &point_offset_relative_segment); | 923 &point_offset_relative_segment); |
| 919 if (segment_index < 0) | 924 if (segment_index < 0) |
| 920 return LineSelectionModel(line_index, CURSOR_LEFT); | 925 return LineSelectionModel(line_index, CURSOR_LEFT); |
| 921 if (segment_index >= static_cast<int>(line.segments.size())) | 926 if (segment_index >= static_cast<int>(line.segments.size())) |
| (...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1726 | 1731 |
| 1727 attribute.strike = run.strike; | 1732 attribute.strike = run.strike; |
| 1728 attribute.diagonal_strike = run.diagonal_strike; | 1733 attribute.diagonal_strike = run.diagonal_strike; |
| 1729 decorated_text->attributes.push_back(attribute); | 1734 decorated_text->attributes.push_back(attribute); |
| 1730 } | 1735 } |
| 1731 } | 1736 } |
| 1732 return true; | 1737 return true; |
| 1733 } | 1738 } |
| 1734 | 1739 |
| 1735 } // namespace gfx | 1740 } // namespace gfx |
| OLD | NEW |