Fix bug in reshape lines
This commit is contained in:
parent
bc953df0d6
commit
682407d15a
1 changed files with 22 additions and 27 deletions
|
|
@ -14,11 +14,11 @@ use text::{
|
||||||
fn main() {
|
fn main() {
|
||||||
let display_scale = match orbclient::get_display_size() {
|
let display_scale = match orbclient::get_display_size() {
|
||||||
Ok((w, h)) => {
|
Ok((w, h)) => {
|
||||||
println!("Display size: {}, {}", w, h);
|
eprintln!("Display size: {}, {}", w, h);
|
||||||
(h as i32 / 1600) + 1
|
(h as i32 / 1600) + 1
|
||||||
},
|
},
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
println!("Failed to get display size: {}", err);
|
eprintln!("Failed to get display size: {}", err);
|
||||||
1
|
1
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -99,6 +99,14 @@ fn main() {
|
||||||
font_size *= display_scale;
|
font_size *= display_scale;
|
||||||
line_height *= display_scale;
|
line_height *= display_scale;
|
||||||
|
|
||||||
|
let window_lines = (window.height() as i32 + line_height - 1) / line_height;
|
||||||
|
scroll = cmp::max(0, cmp::min(
|
||||||
|
layout_lines.len() as i32 - (window_lines - 1),
|
||||||
|
scroll
|
||||||
|
));
|
||||||
|
|
||||||
|
let line_x = 8 * display_scale;
|
||||||
|
|
||||||
if reshape {
|
if reshape {
|
||||||
let instant = Instant::now();
|
let instant = Instant::now();
|
||||||
|
|
||||||
|
|
@ -108,10 +116,11 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
reshape = false;
|
reshape = false;
|
||||||
|
reshape_lines.clear();
|
||||||
relayout = true;
|
relayout = true;
|
||||||
|
|
||||||
let duration = instant.elapsed();
|
let duration = instant.elapsed();
|
||||||
println!("reshape: {:?}", duration);
|
eprintln!("reshape: {:?}", duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
for line_i in reshape_lines.drain(..) {
|
for line_i in reshape_lines.drain(..) {
|
||||||
|
|
@ -122,7 +131,7 @@ fn main() {
|
||||||
relayout = true;
|
relayout = true;
|
||||||
|
|
||||||
let duration = instant.elapsed();
|
let duration = instant.elapsed();
|
||||||
println!("reshape line {}: {:?}", line_i, duration);
|
eprintln!("reshape line {}: {:?}", line_i, duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
if relayout {
|
if relayout {
|
||||||
|
|
@ -130,7 +139,7 @@ fn main() {
|
||||||
|
|
||||||
layout_lines.clear();
|
layout_lines.clear();
|
||||||
for line in shape_lines.iter() {
|
for line in shape_lines.iter() {
|
||||||
let line_width = window.width() as i32 - 16 * display_scale;
|
let line_width = window.width() as i32 - line_x * 2;
|
||||||
line.layout(font_size, line_width, &mut layout_lines);
|
line.layout(font_size, line_width, &mut layout_lines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -138,19 +147,12 @@ fn main() {
|
||||||
redraw = true;
|
redraw = true;
|
||||||
|
|
||||||
let duration = instant.elapsed();
|
let duration = instant.elapsed();
|
||||||
println!("relayout: {:?}", duration);
|
eprintln!("relayout: {:?}", duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
if rehit {
|
if rehit {
|
||||||
let instant = Instant::now();
|
let instant = Instant::now();
|
||||||
|
|
||||||
let window_lines = (window.height() as i32 + line_height - 1) / line_height;
|
|
||||||
scroll = cmp::max(0, cmp::min(
|
|
||||||
layout_lines.len() as i32 - (window_lines - 1),
|
|
||||||
scroll
|
|
||||||
));
|
|
||||||
|
|
||||||
let line_x = 8 * display_scale;
|
|
||||||
let mut line_y = line_height;
|
let mut line_y = line_height;
|
||||||
for (line_i, line) in layout_lines.iter().skip(scroll as usize).enumerate() {
|
for (line_i, line) in layout_lines.iter().skip(scroll as usize).enumerate() {
|
||||||
if line_y >= window.height() as i32 {
|
if line_y >= window.height() as i32 {
|
||||||
|
|
@ -183,7 +185,7 @@ fn main() {
|
||||||
rehit = false;
|
rehit = false;
|
||||||
|
|
||||||
let duration = instant.elapsed();
|
let duration = instant.elapsed();
|
||||||
println!("rehit: {:?}", duration);
|
eprintln!("rehit: {:?}", duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
if redraw {
|
if redraw {
|
||||||
|
|
@ -191,13 +193,6 @@ fn main() {
|
||||||
|
|
||||||
window.set(bg_color);
|
window.set(bg_color);
|
||||||
|
|
||||||
let window_lines = (window.height() as i32 + line_height - 1) / line_height;
|
|
||||||
scroll = cmp::max(0, cmp::min(
|
|
||||||
layout_lines.len() as i32 - (window_lines - 1),
|
|
||||||
scroll
|
|
||||||
));
|
|
||||||
|
|
||||||
let line_x = 8 * display_scale;
|
|
||||||
let mut line_y = line_height;
|
let mut line_y = line_height;
|
||||||
for (line_i, line) in layout_lines.iter().skip(scroll as usize).enumerate() {
|
for (line_i, line) in layout_lines.iter().skip(scroll as usize).enumerate() {
|
||||||
if line_y >= window.height() as i32 {
|
if line_y >= window.height() as i32 {
|
||||||
|
|
@ -228,7 +223,7 @@ fn main() {
|
||||||
);
|
);
|
||||||
|
|
||||||
let text_line = &text_lines[glyph.line_i];
|
let text_line = &text_lines[glyph.line_i];
|
||||||
println!("{}, {}: '{}'", glyph.start, glyph.end, &text_line[glyph.start..glyph.end]);
|
eprintln!("{}, {}: '{}'", glyph.start, glyph.end, &text_line[glyph.start..glyph.end]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -247,7 +242,7 @@ fn main() {
|
||||||
redraw = false;
|
redraw = false;
|
||||||
|
|
||||||
let duration = instant.elapsed();
|
let duration = instant.elapsed();
|
||||||
println!("redraw: {:?}", duration);
|
eprintln!("redraw: {:?}", duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
for event in window.events() {
|
for event in window.events() {
|
||||||
|
|
@ -295,7 +290,7 @@ fn main() {
|
||||||
let glyph = &line.glyphs[cursor_glyph];
|
let glyph = &line.glyphs[cursor_glyph];
|
||||||
let text_line = &mut text_lines[glyph.line_i];
|
let text_line = &mut text_lines[glyph.line_i];
|
||||||
text_line.remove(glyph.start);
|
text_line.remove(glyph.start);
|
||||||
reshape_lines.push(cursor_line);
|
reshape_lines.push(glyph.line_i);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
orbclient::K_DEL => {
|
orbclient::K_DEL => {
|
||||||
|
|
@ -304,7 +299,7 @@ fn main() {
|
||||||
let glyph = &line.glyphs[cursor_glyph];
|
let glyph = &line.glyphs[cursor_glyph];
|
||||||
let text_line = &mut text_lines[glyph.line_i];
|
let text_line = &mut text_lines[glyph.line_i];
|
||||||
text_line.remove(glyph.start);
|
text_line.remove(glyph.start);
|
||||||
reshape_lines.push(cursor_line);
|
reshape_lines.push(glyph.line_i);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
orbclient::K_0 => {
|
orbclient::K_0 => {
|
||||||
|
|
@ -330,7 +325,7 @@ fn main() {
|
||||||
let text_line = &mut text_lines[glyph.line_i];
|
let text_line = &mut text_lines[glyph.line_i];
|
||||||
text_line.insert(glyph.end, event.character);
|
text_line.insert(glyph.end, event.character);
|
||||||
cursor_glyph += 1;
|
cursor_glyph += 1;
|
||||||
reshape_lines.push(cursor_line);
|
reshape_lines.push(glyph.line_i);
|
||||||
},
|
},
|
||||||
None => () // TODO
|
None => () // TODO
|
||||||
}
|
}
|
||||||
|
|
@ -339,7 +334,7 @@ fn main() {
|
||||||
let text_line = &mut text_lines[glyph.line_i];
|
let text_line = &mut text_lines[glyph.line_i];
|
||||||
text_line.insert(glyph.start, event.character);
|
text_line.insert(glyph.start, event.character);
|
||||||
cursor_glyph += 1;
|
cursor_glyph += 1;
|
||||||
reshape_lines.push(cursor_line);
|
reshape_lines.push(glyph.line_i);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
EventOption::Mouse(event) => {
|
EventOption::Mouse(event) => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue