DVUI

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