textChanged
Parameters
- self:*TextEntryWidget
- *TextEntryWidget
- start:usize
- usize
- end:usize
- usize
- added:i64
- i64
Source
Implementation
pub fn textChanged(self: *TextEntryWidget, start: usize, end: usize, added: i64) void {
self.text_changed = true;
if (end > self.text_changed_start) {
// end is in current bytes, so we update it to previous frame's indexing
var end_old: usize = undefined;
if (self.text_changed_added >= 0) {
end_old = end - @as(usize, @intCast(self.text_changed_added));
} else {
end_old = end + @as(usize, @intCast(-self.text_changed_added));
}
// This assumes that the current update happens after (in bytes) all
// previous updates. This is not exact, but will always give an
// interval that includes all the updates.
self.text_changed_end = @max(self.text_changed_end, end_old);
} else {
// before previous updates then indexing is the same
self.text_changed_end = @max(self.text_changed_end, end);
}
// if we are before the previous updates then the indexing is the same
self.text_changed_start = @min(self.text_changed_start, start);
self.text_changed_added += added;
if (self.textLayout.add_text_done) {
self.edited_outside_last_frame.* = true;
}
//std.debug.print("textChanged {d} {d} {d}\n", .{ self.text_changed_start, self.text_changed_end, self.text_changed_added });
}