DVUI

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());
        }
    }