DVUI

init

It's expected to call this when self is undefined

Parameters

#
self:*ScrollBarWidget
*ScrollBarWidget
src:std.builtin.SourceLocation
std.builtin.SourceLocation
init_opts:InitOptions
InitOptions
opts:Options
Options

Source

Implementation

#
pub fn init(self: *ScrollBarWidget, src: std.builtin.SourceLocation, init_opts: InitOptions, opts: Options) void {
    self.* = .{
        .si = init_opts.scroll_info,
        .focus_id = init_opts.focus_id,
        .dir = init_opts.direction,
        .wd = WidgetData.init(src, .{}, defaults.override(opts)),
    };

    self.data().register();
    self.data().borderAndBackground(.{});

    self.grabRect = self.data().contentRect();
    switch (self.dir) {
        .vertical => {
            self.grabRect.h = @min(self.grabRect.h, @max(20.0, self.grabRect.h * self.si.visibleFraction(self.dir)));
            const insideH = self.data().contentRect().h - self.grabRect.h;
            self.grabRect.y += insideH * self.si.offsetFraction(self.dir);
        },
        .horizontal => {
            self.grabRect.w = @min(self.grabRect.w, @max(20.0, self.grabRect.w * self.si.visibleFraction(self.dir)));
            const insideH = self.data().contentRect().w - self.grabRect.w;
            self.grabRect.x += insideH * self.si.offsetFraction(self.dir);
        },
    }

    const grabrs = self.data().parent.screenRectScale(self.grabRect);
    self.processEvents(grabrs.r);

    if (self.data().accesskit_node()) |ak_node| {
        switch (self.dir) {
            .horizontal => {
                AccessKit.nodeSetLabel(ak_node, "Horizontal");
                AccessKit.nodeSetOrientation(ak_node, AccessKit.Orientation.horizontal);
                AccessKit.nodeSetNumericValue(ak_node, self.si.viewport.x);
                AccessKit.nodeSetMinNumericValue(ak_node, 0);
                AccessKit.nodeSetMaxNumericValue(ak_node, self.si.virtual_size.w - self.si.viewport.w);
                AccessKit.nodeSetNumericValueStep(ak_node, 1); // AK TODO: What should these steps be?
                AccessKit.nodeSetNumericValueJump(ak_node, 100);

                AccessKit.nodeAddAction(ak_node, AccessKit.Action.click);
                AccessKit.nodeAddAction(ak_node, AccessKit.Action.focus);
                AccessKit.nodeAddAction(ak_node, AccessKit.Action.scroll_to_point); // AK TODO: Not implemented
                AccessKit.nodeAddAction(ak_node, AccessKit.Action.set_value);
            },

            .vertical => {
                AccessKit.nodeSetLabel(ak_node, "Vertical");
                AccessKit.nodeSetOrientation(ak_node, AccessKit.Orientation.vertical);
                AccessKit.nodeSetNumericValue(ak_node, self.si.viewport.y);
                AccessKit.nodeSetMinNumericValue(ak_node, 0);
                AccessKit.nodeSetMaxNumericValue(ak_node, self.si.virtual_size.h - self.si.viewport.h);
                AccessKit.nodeSetNumericValueStep(ak_node, 1);
                AccessKit.nodeSetNumericValueJump(ak_node, 100);

                AccessKit.nodeAddAction(ak_node, AccessKit.Action.click);
                AccessKit.nodeAddAction(ak_node, AccessKit.Action.focus);
                AccessKit.nodeAddAction(ak_node, AccessKit.Action.scroll_to_point); // AK TODO: Not implemented
                AccessKit.nodeAddAction(ak_node, AccessKit.Action.set_value);
            },
        }
    }
}