OLD | NEW |
1 /* | 1 /* |
2 * (C) 1999 Lars Knoll (knoll@kde.org) | 2 * (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 2000 Dirk Mueller (mueller@kde.org) | 3 * (C) 2000 Dirk Mueller (mueller@kde.org) |
4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. | 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. |
5 * All rights reserved. | 5 * All rights reserved. |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 // See the corresponding code in InlineTextBox::getSelectionState. | 131 // See the corresponding code in InlineTextBox::getSelectionState. |
132 int e_pos = std::min(end_pos - start_, int(len_) + (IsLineBreak() ? 0 : 1)); | 132 int e_pos = std::min(end_pos - start_, int(len_) + (IsLineBreak() ? 0 : 1)); |
133 return (s_pos < e_pos); | 133 return (s_pos < e_pos); |
134 } | 134 } |
135 | 135 |
136 SelectionState InlineTextBox::GetSelectionState() const { | 136 SelectionState InlineTextBox::GetSelectionState() const { |
137 SelectionState state = GetLineLayoutItem().GetSelectionState(); | 137 SelectionState state = GetLineLayoutItem().GetSelectionState(); |
138 if (state == SelectionStart || state == SelectionEnd || | 138 if (state == SelectionStart || state == SelectionEnd || |
139 state == SelectionBoth) { | 139 state == SelectionBoth) { |
140 int start_pos, end_pos; | 140 int start_pos, end_pos; |
141 GetLineLayoutItem().SelectionStartEnd(start_pos, end_pos); | 141 std::tie(start_pos, end_pos) = GetLineLayoutItem().SelectionStartEnd(); |
142 // The position after a hard line break is considered to be past its end. | 142 // The position after a hard line break is considered to be past its end. |
143 // See the corresponding code in InlineTextBox::isSelected. | 143 // See the corresponding code in InlineTextBox::isSelected. |
144 int last_selectable = Start() + Len() - (IsLineBreak() ? 1 : 0); | 144 int last_selectable = Start() + Len() - (IsLineBreak() ? 1 : 0); |
145 | 145 |
146 // FIXME: Remove -webkit-line-break: LineBreakAfterWhiteSpace. | 146 // FIXME: Remove -webkit-line-break: LineBreakAfterWhiteSpace. |
147 int end_of_line_adjustment_for_css_line_break = | 147 int end_of_line_adjustment_for_css_line_break = |
148 GetLineLayoutItem().Style()->GetLineBreak() == kLineBreakAfterWhiteSpace | 148 GetLineLayoutItem().Style()->GetLineBreak() == kLineBreakAfterWhiteSpace |
149 ? -1 | 149 ? -1 |
150 : 0; | 150 : 0; |
151 bool start = (state != SelectionEnd && start_pos >= start_ && | 151 bool start = (state != SelectionEnd && start_pos >= start_ && |
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 LayoutUnit /*lineBottom*/) const { | 495 LayoutUnit /*lineBottom*/) const { |
496 InlineTextBoxPainter(*this).Paint(paint_info, paint_offset); | 496 InlineTextBoxPainter(*this).Paint(paint_info, paint_offset); |
497 } | 497 } |
498 | 498 |
499 void InlineTextBox::SelectionStartEnd(int& s_pos, int& e_pos) const { | 499 void InlineTextBox::SelectionStartEnd(int& s_pos, int& e_pos) const { |
500 int start_pos, end_pos; | 500 int start_pos, end_pos; |
501 if (GetLineLayoutItem().GetSelectionState() == SelectionInside) { | 501 if (GetLineLayoutItem().GetSelectionState() == SelectionInside) { |
502 start_pos = 0; | 502 start_pos = 0; |
503 end_pos = GetLineLayoutItem().TextLength(); | 503 end_pos = GetLineLayoutItem().TextLength(); |
504 } else { | 504 } else { |
505 GetLineLayoutItem().SelectionStartEnd(start_pos, end_pos); | 505 std::tie(start_pos, end_pos) = GetLineLayoutItem().SelectionStartEnd(); |
506 if (GetLineLayoutItem().GetSelectionState() == SelectionStart) | 506 if (GetLineLayoutItem().GetSelectionState() == SelectionStart) |
507 end_pos = GetLineLayoutItem().TextLength(); | 507 end_pos = GetLineLayoutItem().TextLength(); |
508 else if (GetLineLayoutItem().GetSelectionState() == SelectionEnd) | 508 else if (GetLineLayoutItem().GetSelectionState() == SelectionEnd) |
509 start_pos = 0; | 509 start_pos = 0; |
510 } | 510 } |
511 | 511 |
512 s_pos = std::max(start_pos - start_, 0); | 512 s_pos = std::max(start_pos - start_, 0); |
513 e_pos = std::min(end_pos - start_, (int)len_); | 513 e_pos = std::min(end_pos - start_, (int)len_); |
514 } | 514 } |
515 | 515 |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 for (; printed_characters < kLayoutObjectCharacterOffset; | 722 for (; printed_characters < kLayoutObjectCharacterOffset; |
723 printed_characters++) | 723 printed_characters++) |
724 fputc(' ', stderr); | 724 fputc(' ', stderr); |
725 fprintf(stderr, "(%d,%d) \"%s\"\n", Start(), Start() + Len(), | 725 fprintf(stderr, "(%d,%d) \"%s\"\n", Start(), Start() + Len(), |
726 value.Utf8().data()); | 726 value.Utf8().data()); |
727 } | 727 } |
728 | 728 |
729 #endif | 729 #endif |
730 | 730 |
731 } // namespace blink | 731 } // namespace blink |
OLD | NEW |