install
Parameters
- self:*Reorderable
- *Reorderable
Source
Implementation
pub fn install(self: *Reorderable) void {
self.installed = true;
if (self.reorder.drag_ending or dvui.captured(self.reorder.data().id) or (self.reorder.init_opts.drag_name != null and dvui.dragName(self.reorder.init_opts.drag_name.?))) {
const topleft = dvui.currentWindow().mouse_pt.plus(dvui.dragOffset());
if (self.reorder.drag_point != null and self.reorder.id_reorderable.? == (self.init_options.reorder_id orelse self.data().id.asUsize())) {
// we are being dragged - put in floating widget
self.data().register();
dvui.parentSet(self.widget());
self.floating_widget = @as(dvui.FloatingWidget, undefined);
self.floating_widget.?.init(@src(), .{ .mouse_events = false }, .{ .rect = Rect.fromPoint(.cast(topleft.toNatural())), .min_size_content = self.reorder.reorderable_size });
} else {
if (self.init_options.last_slot) {
self.wd = WidgetData.init(self.data().src, .{}, self.options.override(.{ .min_size_content = self.reorder.reorderable_size }));
} else {
self.wd = WidgetData.init(self.data().src, .{}, self.options);
}
const rs = self.data().rectScale();
if (!self.reorder.found_slot and rs.r.contains(dvui.currentWindow().mouse_pt)) {
// user is dragging something over this rect
self.target_rs = rs;
self.reorder.found_slot = true;
if (self.init_options.draw_target) {
rs.r.fill(.{}, .{ .color = dvui.themeGet().focus, .fade = 1.0 });
}
if (self.init_options.reinstall and !self.init_options.last_slot) {
self.reinstall();
}
}
if (self.target_rs == null or self.init_options.last_slot) {
self.data().register();
dvui.parentSet(self.widget());
}
}
} else {
self.wd = WidgetData.init(self.data().src, .{}, self.options);
self.reorder.reorderable_size = self.wd.rect.size();
self.wd.register();
dvui.parentSet(self.widget());
}
}