fix: incorrect clamping on highlight ranges
This commit is contained in:
parent
37bbb17da6
commit
763935912f
1 changed files with 19 additions and 14 deletions
|
|
@ -1673,23 +1673,15 @@ pub const Editor = struct {
|
||||||
const style_ = style_cache_lookup(ctx.theme, ctx.cache, scope, id);
|
const style_ = style_cache_lookup(ctx.theme, ctx.cache, scope, id);
|
||||||
const style = if (style_) |sty| sty.style else return;
|
const style = if (style_) |sty| sty.style else return;
|
||||||
|
|
||||||
if (sel.end.row < ctx.self.view.row) return;
|
ctx.clamp_to_view(&sel.begin);
|
||||||
if (sel.begin.row > ctx.self.view.row + ctx.self.view.rows) return;
|
ctx.clamp_to_view(&sel.end);
|
||||||
if (sel.begin.row < ctx.self.view.row) sel.begin.row = ctx.self.view.row;
|
|
||||||
if (sel.end.row > ctx.self.view.row + ctx.self.view.rows) sel.end.row = ctx.self.view.row + ctx.self.view.rows;
|
|
||||||
|
|
||||||
if (sel.end.col < ctx.self.view.col) return;
|
|
||||||
if (sel.begin.col > ctx.self.view.col + ctx.self.view.cols) return;
|
|
||||||
if (sel.begin.col < ctx.self.view.col) sel.begin.col = ctx.self.view.col;
|
|
||||||
if (sel.end.col > ctx.self.view.col + ctx.self.view.cols) sel.end.col = ctx.self.view.col + ctx.self.view.cols;
|
|
||||||
|
|
||||||
for (sel.begin.row..sel.end.row + 1) |row| {
|
for (sel.begin.row..sel.end.row + 1) |row| {
|
||||||
const begin_col = if (row == sel.begin.row) sel.begin.col else 0;
|
const begin_col = if (row == sel.begin.row) sel.begin.col else ctx.self.view.col;
|
||||||
const end_col = if (row == sel.end.row) sel.end.col else ctx.self.view.col + ctx.self.view.cols;
|
const end_col = if (row == sel.end.row) sel.end.col else ctx.self.view.col + ctx.self.view.cols;
|
||||||
const y = @max(ctx.self.view.row, row) - ctx.self.view.row;
|
const y = row - ctx.self.view.row;
|
||||||
const x = @max(ctx.self.view.col, begin_col) - ctx.self.view.col;
|
const x = begin_col - ctx.self.view.col;
|
||||||
const end_x = @max(ctx.self.view.col, end_col) - ctx.self.view.col;
|
const end_x = end_col - ctx.self.view.col;
|
||||||
if (x >= end_x) return;
|
|
||||||
for (x..end_x) |x_|
|
for (x..end_x) |x_|
|
||||||
try ctx.render_cell(y, x_, style);
|
try ctx.render_cell(y, x_, style);
|
||||||
}
|
}
|
||||||
|
|
@ -1701,6 +1693,19 @@ pub const Editor = struct {
|
||||||
cell.set_style(style);
|
cell.set_style(style);
|
||||||
_ = ctx.self.plane.putc(&cell) catch {};
|
_ = ctx.self.plane.putc(&cell) catch {};
|
||||||
}
|
}
|
||||||
|
fn clamp_to_view(ctx: *const @This(), cursor: *Cursor) void {
|
||||||
|
const row_off: u32 = @intCast(ctx.self.view.row);
|
||||||
|
const col_off: u32 = @intCast(ctx.self.view.col);
|
||||||
|
if (cursor.row < row_off) {
|
||||||
|
cursor.row = row_off;
|
||||||
|
cursor.col = col_off;
|
||||||
|
}
|
||||||
|
if (cursor.row >= row_off + ctx.self.view.rows) {
|
||||||
|
cursor.row = row_off + ctx.self.view.rows;
|
||||||
|
cursor.col = col_off + ctx.self.view.cols;
|
||||||
|
}
|
||||||
|
cursor.col = std.math.clamp(cursor.col, col_off, col_off + ctx.self.view.cols);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
var ctx: Ctx = .{
|
var ctx: Ctx = .{
|
||||||
.self = self,
|
.self = self,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue