init
Parameters
- src:std.builtin.SourceLocation
- std.builtin.SourceLocation
- init_options:InitOptions
- InitOptions
- opts:Options
- Options
Source
Implementation
pub fn init(src: std.builtin.SourceLocation, init_options: InitOptions, opts: Options) WidgetData {
const parent = dvui.parentGet();
const id = parent.extendId(src, opts.idExtra());
var options = if (dvui.debug.options_override.get(id)) |val| val.@"0" else opts;
if (options.corners) |*corners| corners.* = corners.finalize(options.theme);
if (options.box_shadow) |*box_shadow| {
if (box_shadow.corners) |*corners| corners.* = corners.finalize(options.theme);
}
const min_size = options.min_sizeGet().min(options.max_sizeGet());
const ms = dvui.minSize(id, min_size);
const rect = if (options.rect) |r|
r.toSize(.{
.w = if (options.expandGet().isHorizontal())
parent.data().contentRect().w
else if (r.w == 0) ms.w else r.w,
.h = if (options.expandGet().isVertical())
parent.data().contentRect().h
else if (r.h == 0) ms.h else r.h,
})
else blk: {
if (options.expandGet() == .ratio and (ms.w == 0 or ms.h == 0)) {
dvui.log.debug("rectFor {x} expand is .ratio but min size is zero\n", .{id});
}
break :blk parent.rectFor(id, ms, options.expandGet(), options.gravityGet());
};
return .{
.id = id,
.parent = parent,
.init_options = init_options,
.min_size = min_size,
.rect = rect,
.options = options,
.src = src,
};
}