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