Draggable Window
🪟 DraggableWindow Class
The DraggableWindow
class is a parent class of all split UI windows. It essentially allows the windows to be draggable. The window must be created with the UI Toolkit and must have a button named 'Dragger' that will begin dragging and it should have an element named 'Root' that contains all content.
Namespace:
Esper.Inventool.UI
Access:public
Type:class
Inherits:CrossInputSupportedWindow
📦 Fields
public
activeSortingOrder
int
Sorting order when window is active.
public
inactiveSortingOrder
int
Sorting order when window is inactive.
public
startingPosition
StartingPosition
Initial placement anchor and offset.
protected
dragger
Button
UI element used to drag the window.
protected
root
VisualElement
Root container of window content.
protected
startingMousePosition
Vector3
Mouse position at start of drag.
protected
startingWindowPosition
Vector3
Window position at drag start.
protected
pointerDown
bool
True while mouse button is held on dragger.
protected
firstOpen
bool
True until the window opens for the first time.
public static
windows
List<DraggableWindow>
All instantiated draggable windows.
public static
active
DraggableWindow
Currently active window.
public static
onDragStarted
UnityEvent
Event when any window drag begins.
public static
onDrag
UnityEvent
Event when any window is being dragged.
public static
onStopDrag
UnityEvent
Event when any window drag ends.
🧰 Methods
protected override
Awake()
void
Initialize UI elements, register drag callbacks.
private
OnDestroy()
void
Remove this window from static registry.
protected virtual
RegisterButtonEvents(Button button)
void
Wire hover and click events for a button.
public
SetNextAsActive()
void
Activate the next open window in stacking order.
public virtual
Open()
void
Prepare window placement on first open.
public
PlaceAtStartingPosition(GeometryChangedEvent e)
void
Position window based on startingPosition
.
public virtual
Close()
void
Hide window and clear active status.
public
SetAsActive()
void
Mark this window as topmost active.
public
SetAsInactive()
void
Mark this window as inactive.
protected
SetActive(PointerDownEvent e)
void
Handle pointer-down to activate window.
protected
StartDrag(PointerDownEvent e)
void
Begin drag, capture positions, invoke onDragStarted
.
protected
Drag(PointerMoveEvent e)
void
Move window with pointer, clamp to panel bounds.
protected
StopDrag(PointerUpEvent e)
void
End drag and invoke onStopDrag
.
🧩 Nested Types
public struct StartingPosition
public struct StartingPosition
anchor
Anchor
Screen anchor for placement.
offset
Vector2
Pixel offset from anchor.
public enum StartingPosition.Anchor
public enum StartingPosition.Anchor
Center
Center of the panel.
TopLeft
Top-left corner.
TopRight
Top-right corner.
BottomLeft
Bottom-left corner.
BottomRight
Bottom-right corner.
Active Window
The active draggable window is the one that was last interacted with. This happens automatically. You can access the active draggable window with DraggableWindow.active
.
You can set a draggable window as the active one with the SetAsActive
method. Use SetAsInactive
to have the opposite effect.
myDraggableWindow.SetAsActive();
To set the next one as active, use SetNextAsActive
.
myDraggableWindow.SetNextAsActive();
Last updated