DVUI

Parameters

#
self:*ScrollContainerWidget
*ScrollContainerWidget

Source

Implementation

#
pub fn deinit(self: *ScrollContainerWidget) void {
    defer if (dvui.widgetIsAllocated(self)) dvui.widgetFree(self);
    defer self.* = undefined;

    // need to reset clip before processEventsAfter, event_rect could be
    // outside clip, and mouse events only match inside the clip
    dvui.clipSet(self.prevClip);

    if (self.init_opts.process_events_after) {
        self.processEventsAfter();
    }

    dvui.dataSet(null, self.data().id, "_fv_id", self.first_visible_id);
    dvui.dataSet(null, self.data().id, "_fv_offset", self.first_visible_offset);
    dvui.dataSet(null, self.data().id, "_fv_viewport", self.first_visible_viewport);
    dvui.dataSet(null, self.data().id, "_finger_down", self.finger_down);

    const padded = self.data().options.padSize(self.nextVirtualSize);
    switch (self.si.horizontal) {
        .none => self.data().min_size.w = padded.w,
        .auto => {
            self.data().min_size.w = padded.w;
            if (self.nextVirtualSize.w != self.si.virtual_size.w) {
                self.si.virtual_size.w = self.nextVirtualSize.w;
                dvui.refresh(null, @src(), self.data().id);
            }
        },
        .given => {},
    }

    switch (self.si.vertical) {
        .none => self.data().min_size.h = padded.h,
        .auto => {
            self.data().min_size.h = padded.h;
            if (self.nextVirtualSize.h != self.si.virtual_size.h) {
                self.si.virtual_size.h = self.nextVirtualSize.h;
                dvui.refresh(null, @src(), self.data().id);
            }
        },
        .given => {},
    }

    self.data().minSizeSetAndRefresh();
    self.data().minSizeReportToParent();
    _ = scrollSet(self.parentScroll);
    dvui.parentReset(self.data().id, self.data().parent);
}