radio
Parameters
- src:std.builtin.SourceLocation
- std.builtin.SourceLocation
- active:bool
- bool
- label_str:?[]const u8
- ?[]const u8
- opts:Options
- Options
Source
Implementation
pub fn radio(src: std.builtin.SourceLocation, active: bool, label_str: ?[]const u8, opts: Options) bool {
const options = radio_defaults.override(opts);
var ret = false;
var b = box(src, .{ .dir = .horizontal }, options);
defer b.deinit();
dvui.tabIndexSet(b.data().id, b.data().options.tab_index, b.data().rectScale().r);
var hovered: bool = false;
if (dvui.clicked(b.data(), .{ .hovered = &hovered })) {
ret = true;
}
if (b.data().accesskit_node()) |ak_node| {
AccessKit.nodeAddAction(ak_node, AccessKit.Action.focus);
AccessKit.nodeAddAction(ak_node, AccessKit.Action.click);
AccessKit.nodeSetToggled(ak_node, if (active) AccessKit.Toggled.ak_true else AccessKit.Toggled.ak_false);
}
const radio_size = options.fontGet().textHeight();
const s = spacer(@src(), .{ .min_size_content = Size.all(radio_size), .gravity_y = 0.5 });
const rs = s.borderRectScale();
if (b.data().visible()) {
const focused = b.data().id == dvui.focusedWidgetId();
const pressed = dvui.captured(b.data().id);
radioCircle(active or ret, focused, rs, pressed, hovered, options);
}
if (label_str) |str| {
_ = spacer(@src(), .{ .min_size_content = .width(radio_defaults.paddingGet().w) });
labelNoFmt(@src(), str, .{}, options.strip().override(.{ .gravity_y = 0.5 }));
}
return ret;
}