Skip to content

Blueprint navigation hint hosts ​

An optional host gives keyboard/controller descriptions a reserved place in your interface. Pointer hover keeps the anchor's popup. The same source object drives both presentations. Use this when a floating focus tooltip would cover status, commands or result messages.

Create your own body and host ​

  1. Create a Widget Blueprint with parent IFEntryWidget. Add your presentation widgets. The sample WBP_ForgeContextHint contains one InterfaceForge Text, HintDetail, Base Size11, Body role and automatic wrapping.
  2. Its On Entry Refreshed → Cast Entry Data to IFPresentationData → Get Detail → Set Text (HintDetail) graph displays the action description. On Entry Released → Set Text (empty) clears it. The source button already shows its title and unavailable reason. You can add title, icon, reason or another data type to your own body using the same entry contract.
  3. In your IFScreen Blueprint, add an empty InterfaceForge Surface, Border or other Content Widget. Put it in a bounded Overlay, with horizontal Fill and vertical Center. This container must belong to that screen and have no Designer content; its content is managed while a hint is visible.
  4. Event Construct → Register Navigation Hint Host, Host = your named container, Entry Class = your body Blueprint, Yield To Notifications = true. Check the Boolean return when debugging. Your owning player's IFRootLayout must be created and ticking as in the quick start.
  5. On your IFButton, use its named TooltipAnchor and Set Tooltip Data as before. Leave the anchor's Use Navigation Hint Host enabled. Without a registered host, it uses the existing popup behavior.

Expected result: after Tooltip Delay, keyboard/controller focus shows the host body. Meaningful pointer input switches to the normal popup body when the pointer is over the control; keyboard navigation restores the host. Both use the same Tooltip Data and preserve source focus. This uses the centralized input-presentation service, not a detector in every widget.

flowchart LR
  A[Set Tooltip Data] --> B[Local-player request and delay]
  B --> C{Input presentation}
  C -->|Keyboard / Gamepad| D[Registered screen host and chosen IFEntry]
  C -->|Pointer / explicit Touch gesture| E[Engine Menu Anchor popup and chosen IFEntry]
  F[Notify Data Changed] --> D
  F --> E

Get Tooltip Entry returns either body. Is Tooltip Shown includes both presentations; Is Tooltip Hosted distinguishes a docked body. The inherited Is Open reports only the engine popup. Update custom visibility checks accordingly.

Reading priority and lifetime ​

With Yield To Notifications enabled, a navigation description waits while this player has queued results and a registered notification presenter. A visible hosted description is released/collapsed, and returns after result reading and the normal tooltip delay. Pointer popups remain deliberate hover information. Disable the option if your layout reserves separate places for both. The policy does not delay gameplay or move CommonUI focus.

Only the current top screen's registered host is eligible. Modals, transitions, root removal and explicit Clear Tooltips close current/pending content. Unregister Navigation Hint Host removes the registration and releases its hosted body; pending requests may fall back to the normal popup. IFScreen unregisters its own host during Native Destruct. Registering an invalid/abstract/non-entry class, another screen's container or externally occupied content returns false and preserves the existing host. Changing a valid body class releases the previous entry subscription. Your own entry should make cleanup idempotent.

The host uses ordinary UMG layout and the owning player's existing DPI/UI scale. There is no extra width wrapper around a hosted body. Give it enough room for your largest text, translations and safe area. It is passive and cannot take focus or scrolling; long documents belong in a screen or panel.

The saved examples ​

Both HUDs use NavigationHintFit (Overlay) → NavigationHintHost (InterfaceForge Surface), Fill/Center, padding12horizontal/8vertical. RTS Canvas anchors span Y=.28→.46; RPG spans .36→.54, with24-unit side margins. Result notifications use those reserved lanes first. Their saved Construct graphs call the public registration node with the same shared WBP_ForgeContextHint.

The independent Sakura-derived center tint, icon layering and cooldown clock are unchanged. Native IFButton mouse enter/leave tracks pointer presence even when CommonUI suppresses hover for an interaction-disabled button. Its On Appearance Updated Hovered argument therefore includes that presence; CommonUI still blocks activation. There is no replacement gameplay validation.

Current runtime verification and rendered evidence are recorded in HUD hint polish. Physical-controller checks are deferred at the user's request; keyboard/pointer synthetic interactions do not certify hardware behavior. Automatic touch gestures, long localization, other layouts and final release acceptance remain separate work.

UIForge v0.1.0 · Blueprint and C++ development documentation.

Enlarged documentation image

Enlarged documentation image