diff options
author | bors-servo <metajack+bors@gmail.com> | 2014-12-08 09:04:14 -0700 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2014-12-08 09:04:14 -0700 |
commit | 9ac817523c463f2e64a73fef069316f7976063e8 (patch) | |
tree | cd916012821a2de06dc792fd6f2f2f111f00dae3 /components/script/textinput.rs | |
parent | ea907c1311051506bc3e7ef6fef8857968c71387 (diff) | |
parent | b5e7cba598302d3d35ba8a3b735501b1be23b67f (diff) | |
download | servo-9ac817523c463f2e64a73fef069316f7976063e8.tar.gz servo-9ac817523c463f2e64a73fef069316f7976063e8.zip |
auto merge of #4267 : ema-fox/servo/textinput, r=jdm
Diffstat (limited to 'components/script/textinput.rs')
-rw-r--r-- | components/script/textinput.rs | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/components/script/textinput.rs b/components/script/textinput.rs index 6903dfc5c4a..d94ae6c4ee6 100644 --- a/components/script/textinput.rs +++ b/components/script/textinput.rs @@ -163,9 +163,9 @@ impl TextInput { self.edit_point.index = 0; self.edit_point.line = 0; return; - } else if adjust > 0 && self.edit_point.line >= min(0, self.lines.len() - adjust as uint) { - self.edit_point.index = self.current_line_length(); + } else if adjust > 0 && self.edit_point.line + adjust as uint >= self.lines.len() { self.edit_point.line = self.lines.len() - 1; + self.edit_point.index = self.current_line_length(); return; } @@ -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); @@ -268,6 +259,14 @@ impl TextInput { self.edit_point.index = self.current_line_length(); Nothing } + "PageUp" => { + self.adjust_vertical(-28); + Nothing + } + "PageDown" => { + self.adjust_vertical(28); + Nothing + } "Tab" => TriggerDefaultAction, _ => Nothing, } |