Implement Enter

This commit is contained in:
Jeremy Soller 2022-10-19 11:04:26 -06:00
parent ad6555e79f
commit 369c265646
No known key found for this signature in database
GPG key ID: 87F211AF2BE4C2FE

View file

@ -392,30 +392,51 @@ impl<'a> TextBuffer<'a> {
self.redraw = true; self.redraw = true;
self.shape_until_scroll(); self.shape_until_scroll();
}, },
TextAction::Insert(character) => { TextAction::Insert(character) => match character {
//TODO: handle Enter '\r' | '\n' => {
let line = &self.layout_lines[self.cursor.line]; //TODO: handle Enter
if self.cursor.glyph >= line.glyphs.len() { let line = &self.layout_lines[self.cursor.line];
match line.glyphs.last() { let new_line = if self.cursor.glyph >= line.glyphs.len() {
Some(glyph) => { String::new()
let text_line = &mut self.text_lines[line.line_i.get()]; } else {
text_line.insert(glyph.end, character); let glyph = &line.glyphs[self.cursor.glyph];
self.cursor.glyph += 1; self.text_lines[line.line_i.get()].split_off(glyph.start)
self.reshape_line(line.line_i); };
} self.text_lines.insert(line.line_i.get() + 1, new_line);
None => {
let text_line = &mut self.text_lines[line.line_i.get()]; // Reshape all lines after new line
text_line.push(character); //TODO: improve performance
self.cursor.glyph += 1; self.shape_lines.truncate(line.line_i.get());
self.reshape_line(line.line_i); self.relayout();
self.shape_until_scroll();
self.cursor.glyph = 0;
self.cursor.line += 1;
},
_ => {
let line = &self.layout_lines[self.cursor.line];
if self.cursor.glyph >= line.glyphs.len() {
match line.glyphs.last() {
Some(glyph) => {
let text_line = &mut self.text_lines[line.line_i.get()];
text_line.insert(glyph.end, character);
self.cursor.glyph += 1;
self.reshape_line(line.line_i);
}
None => {
let text_line = &mut self.text_lines[line.line_i.get()];
text_line.push(character);
self.cursor.glyph += 1;
self.reshape_line(line.line_i);
}
} }
} else {
let glyph = &line.glyphs[self.cursor.glyph];
let text_line = &mut self.text_lines[line.line_i.get()];
text_line.insert(glyph.start, character);
self.cursor.glyph += 1;
self.reshape_line(line.line_i);
} }
} else {
let glyph = &line.glyphs[self.cursor.glyph];
let text_line = &mut self.text_lines[line.line_i.get()];
text_line.insert(glyph.start, character);
self.cursor.glyph += 1;
self.reshape_line(line.line_i);
} }
}, },
TextAction::Click { x, y } => { TextAction::Click { x, y } => {