deinit
Parameters
- self:*TextLayoutWidget
- *TextLayoutWidget
Source
Implementation
pub fn deinit(self: *TextLayoutWidget) void {
defer if (dvui.widgetIsAllocated(self)) dvui.widgetFree(self);
defer self.* = undefined;
if (!self.add_text_done) {
self.addTextDone(.{});
}
// handle mouse cursor here after all addText because some might set the cursor
const evts = dvui.events();
for (evts) |*e| {
if (!self.matchEvent(e))
continue;
if (e.evt == .mouse and e.evt.mouse.action == .position) {
dvui.cursorSet(.ibeam);
}
}
if (dvui.accesskit_enabled) {
const cw = dvui.currentWindow();
cw.accesskit.text_run_parent = self.textrun_parent_prev;
}
dvui.dataSet(null, self.data().id, "_touch_editing", self.touch_editing);
dvui.dataSet(null, self.data().id, "_te_first", self.te_first);
dvui.dataSet(null, self.data().id, "_te_show_draggables", self.te_show_draggables);
dvui.dataSet(null, self.data().id, "_te_show_context_menu", self.te_show_context_menu);
dvui.dataSet(null, self.data().id, "_te_focus_on_touchdown", self.te_focus_on_touchdown);
dvui.dataSet(null, self.data().id, "_sel_start_r", self.sel_start_r);
dvui.dataSet(null, self.data().id, "_sel_end_r", self.sel_end_r);
dvui.dataSet(null, self.data().id, "_selection", self.selection.*);
dvui.dataSetSlice(null, self.data().id, "_byte_heights", self.byte_heights_new.items);
dvui.dataSetSlice(null, self.data().id, "__line_ascents", self.line_ascents_new.items);
if (self.scroll_to_cursor_next_frame) {
dvui.dataSet(null, self.data().id, "_scroll_to_cursor", true);
}
if (dvui.captured(self.data().id)) {
if (self.sel_move == .mouse) {
// once we figure out where the mousedown was, we need to save it
// as long as we are dragging
dvui.dataSet(null, self.data().id, "_sel_move_mouse_byte", self.sel_move.mouse.byte.?);
} else if (self.sel_move == .expand_pt and (self.sel_move.expand_pt.which == .word or self.sel_move.expand_pt.which == .line)) {
dvui.dataSet(null, self.data().id, "_sel_move_expand_pt_which", self.sel_move.expand_pt.which);
dvui.dataSet(null, self.data().id, "_sel_move_expand_pt_bytes", self.sel_move.expand_pt.bytes);
}
}
if (self.click_num == 0) {
dvui.dataRemove(null, self.data().id, "_click_num");
dvui.dataRemove(null, self.data().id, "_click_num_pt");
} else {
dvui.dataSet(null, self.data().id, "_click_num", self.click_num);
dvui.dataSet(null, self.data().id, "_click_num_pt", self.click_num_pt);
}
dvui.clipSet(self.prevClip);
// check if the widgets are taller than the text
const left_height = (self.corners_min_size[0] orelse Size{}).h + (self.corners_min_size[2] orelse Size{}).h;
const right_height = (self.corners_min_size[1] orelse Size{}).h + (self.corners_min_size[3] orelse Size{}).h;
// adjust for corner widgets not being inside textLayout's padding
const padded = self.data().options.padSize(.{ .h = @max(left_height, right_height) }).padNeg(self.data().options.paddingGet());
self.data().min_size.h = @max(self.data().min_size.h, padded.h);
self.data().minSizeSetAndRefresh();
self.data().minSizeReportToParent();
dvui.parentReset(self.data().id, self.data().parent);
}