init
FloatingTooltipWidget is a subwindow to show temporary floating tooltips, possibly nested. It doesn't focus itself (as a subwindow).
Will show when the mouse is in the active rect.
Will stop if the mouse is outside the active rect AND outside FloatingTooltipWidget's rect AND no nested FloatingTooltipWidget is still showing.
Don't put menus or menuItems in this those depend on focus to work. FloatingMenu is made for that.
Use FloatingWindowWidget for a floating window that the user can change size, move around, and adjust stacking.
Parameters
- self:*FloatingTooltipWidget
- *FloatingTooltipWidget
- src:std.builtin.SourceLocation
- std.builtin.SourceLocation
- init_opts:InitOptions
- InitOptions
- opts_in:Options
- Options
Source
Implementation
pub fn init(self: *FloatingTooltipWidget, src: std.builtin.SourceLocation, init_opts: InitOptions, opts_in: Options) void {
self.* = .{
.wd = WidgetData.init(src, .{ .subwindow = true }, (Options{ .name = "FloatingTooltip" }).override(.{
// passing options.rect will stop WidgetData.init from calling
// rectFor/minSizeForChild which is important because we are outside
// normal layout
.rect = opts_in.rect orelse .{},
})),
// get scale from parent
.scale_val = init_opts.scale orelse (dvui.parentGet().screenRectScale(Rect{}).s / dvui.windowNaturalScale()),
.options = defaults.override(opts_in),
.init_options = init_opts,
};
if (self.options.min_size_content) |msc| {
self.options.min_size_content = msc.scale(self.scale_val, Size);
}
// if a rect got passed, we don't want to also pass it to scaler
self.options.rect = null;
if (dvui.dataGet(null, self.wd.id, "_showing", bool)) |showing| self.showing = showing;
}