Implement Enter
This commit is contained in:
parent
ad6555e79f
commit
369c265646
1 changed files with 43 additions and 22 deletions
|
|
@ -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 } => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue