diff options
Diffstat (limited to 'components/script/textinput.rs')
-rw-r--r-- | components/script/textinput.rs | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/components/script/textinput.rs b/components/script/textinput.rs index c925c0a5d82..d94ae6c4ee6 100644 --- a/components/script/textinput.rs +++ b/components/script/textinput.rs @@ -178,29 +178,20 @@ impl TextInput { /// adjusted vertically and the process repeats with the remaining adjustment requested. fn adjust_horizontal(&mut self, adjust: int) { if adjust < 0 { - if self.multiline { - let remaining = self.edit_point.index; - if adjust.abs() as uint > remaining { - self.edit_point.index = 0; - self.adjust_vertical(-1); - self.edit_point.index = self.current_line_length(); - self.adjust_horizontal(adjust + remaining as int); - } else { - self.edit_point.index = (self.edit_point.index as int + adjust) as uint; - } + let remaining = self.edit_point.index; + if adjust.abs() as uint > remaining && self.edit_point.line > 0 { + self.adjust_vertical(-1); + self.edit_point.index = self.current_line_length(); + self.adjust_horizontal(adjust + remaining as int); } else { self.edit_point.index = max(0, self.edit_point.index as int + adjust) as uint; } } else { - if self.multiline { - let remaining = self.current_line_length() - self.edit_point.index; - if adjust as uint > remaining { - self.edit_point.index = 0; - self.adjust_vertical(1); - self.adjust_horizontal(adjust - remaining as int); - } else { - self.edit_point.index += adjust as uint; - } + let remaining = self.current_line_length() - self.edit_point.index; + if adjust as uint > remaining && self.edit_point.line < self.lines.len() - 1 { + self.edit_point.index = 0; + self.adjust_vertical(1); + self.adjust_horizontal(adjust - remaining as int); } else { self.edit_point.index = min(self.current_line_length(), self.edit_point.index + adjust as uint); |