refactor: replace cursel_length with Buffer.Node.get_range
get_range is likely much faster because it only walks the buffer tree once. Besides the performance difference it should give identical results.
This commit is contained in:
parent
8246f2b0ba
commit
18bc89edf8
2 changed files with 2 additions and 22 deletions
|
|
@ -1632,26 +1632,6 @@ pub const Editor = struct {
|
||||||
return self.primary.col - self.view.col;
|
return self.primary.col - self.view.col;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn cursel_length(root: Buffer.Root, cursel_: CurSel, metrics: Buffer.Metrics) usize {
|
|
||||||
var length: usize = 0;
|
|
||||||
var cursel = cursel_;
|
|
||||||
cursel.check_selection(root, metrics);
|
|
||||||
if (cursel.selection) |*sel| {
|
|
||||||
sel.normalize();
|
|
||||||
if (sel.begin.row == sel.end.row) {
|
|
||||||
length = sel.end.col - sel.begin.col;
|
|
||||||
} else {
|
|
||||||
var row = sel.begin.row;
|
|
||||||
while (row < sel.end.row) {
|
|
||||||
length += root.line_width(row, metrics) catch 0;
|
|
||||||
row += 1;
|
|
||||||
}
|
|
||||||
length = length + sel.end.col - sel.begin.col;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return length;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn update_event(self: *Self) !void {
|
fn update_event(self: *Self) !void {
|
||||||
const primary = self.get_primary();
|
const primary = self.get_primary();
|
||||||
const dirty = if (self.buffer) |buf| buf.is_dirty() else false;
|
const dirty = if (self.buffer) |buf| buf.is_dirty() else false;
|
||||||
|
|
|
||||||
|
|
@ -615,12 +615,12 @@ fn replace_cursel_with_character(ed: *Editor, root: Buffer.Root, cursel: *CurSel
|
||||||
return error.Stop;
|
return error.Stop;
|
||||||
const no_selection = try select_char_if_no_selection(cursel, root, ed.metrics);
|
const no_selection = try select_char_if_no_selection(cursel, root, ed.metrics);
|
||||||
var begin: Cursor = undefined;
|
var begin: Cursor = undefined;
|
||||||
|
var sel_length: usize = 1;
|
||||||
if (cursel.selection) |*sel| {
|
if (cursel.selection) |*sel| {
|
||||||
sel.normalize();
|
sel.normalize();
|
||||||
begin = sel.*.begin;
|
begin = sel.*.begin;
|
||||||
|
_ = root.get_range(sel.*, null, null, &sel_length, ed.metrics) catch return error.Stop;
|
||||||
}
|
}
|
||||||
|
|
||||||
const sel_length = Editor.cursel_length(root, cursel.*, ed.metrics);
|
|
||||||
const total_length = sel_length * egc.len;
|
const total_length = sel_length * egc.len;
|
||||||
var sfa = std.heap.stackFallback(4096, ed.allocator);
|
var sfa = std.heap.stackFallback(4096, ed.allocator);
|
||||||
const sfa_allocator = sfa.get();
|
const sfa_allocator = sfa.get();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue