ui#
Fury UI module.
|
Enum for Position Anchor Points. |
|
A 2D disk UI component. |
|
A 2D Line Slider component. |
|
A 2D UI Panel. |
|
A playback controller designed for FURY v2. |
|
A 2D rectangle sub-classed from UI. |
|
A disk slider. |
|
A 2D text component with optional background. |
|
A button component that updates text and color based on state. |
|
A button component that swaps textures based on interaction state. |
|
An umbrella class for all UI elements. |
Anchor#
Disk2D#
- class fury.ui.Disk2D(outer_radius, *, inner_radius=0, center=(0, 0), color=(1, 1, 1), opacity=1.0)[source]#
Bases:
UIA 2D disk UI component.
- Parameters:
outer_radius (int) – Outer radius of the disk.
inner_radius (int, optional) – Inner radius of the disk.
center ((float, float), optional) – Coordinates (x, y) of the center of the disk.
color ((float, float, float), optional) – Must take values in [0, 1].
opacity (float, optional) – Must take values in [0, 1].
- __init__(outer_radius, *, inner_radius=0, center=(0, 0), color=(1, 1, 1), opacity=1.0)[source]#
Initialize a 2D Disk.
- property color#
Get the color of this UI component.
- property inner_radius#
Get the inner radius of the disk.
- Returns:
Inner radius in pixels.
- Return type:
LineSlider2D#
- class fury.ui.LineSlider2D(*, position=(0, 0), initial_value=50, min_value=0, max_value=100, length=200, line_width=5, inner_radius=0, outer_radius=10, handle_side=20, font_size=16, orientation='horizontal', text_template='{value:.1f} ({ratio:.0%})', shape='disk', z_order=0)[source]#
Bases:
Slider2DA 2D Line Slider component.
- Parameters:
position ((float, float), optional) – Absolute coordinates (x, y) for placement.
initial_value (float, optional) – The starting value of the slider.
min_value (float, optional) – The minimum value of the slider range.
max_value (float, optional) – The maximum value of the slider range.
length (int, optional) – The length of the slider track in pixels.
line_width (int, optional) – The thickness of the slider track.
inner_radius (int, optional) – The inner radius for disk-shaped handles (for rings).
outer_radius (int, optional) – The outer radius for disk-shaped handles.
handle_side (int, optional) – The side length for square-shaped handles.
font_size (int, optional) – The font size for the value label.
orientation (str, optional) – The slider orientation: “horizontal” or “vertical”.
text_template (str, optional) – A formatting string for the label. Supports {value} and {ratio}.
shape (str, optional) – The handle shape: “disk” or “square”.
z_order (int, optional) – The stacking priority. The handle is assigned z_order + 1.
Panel2D#
- class fury.ui.Panel2D(size, *, position=(0, 0), color=(0.1, 0.1, 0.1), opacity=0.7, align='left', border_color=(1, 1, 1), border_width=0, has_border=False)[source]#
Bases:
UIA 2D UI Panel.
Can contain one or more UI elements.
- Parameters:
size ((int, int)) – Size (width, height) in pixels of the panel.
position ((float, float)) – Absolute coordinates (x, y) of the lower-left corner of the panel.
opacity (float) – Must take values in [0, 1].
align ([left, right]) – Alignment of the panel with respect to the overall screen.
border_color ((float, float, float), optional) – RGB color of the border. Must take values in [0, 1].
border_width (float, optional) – Width of the border.
has_border (bool, optional) – If the panel should have borders.
- alignment#
Alignment of the panel with respect to the overall screen.
- Type:
[left, right]
- __init__(size, *, position=(0, 0), color=(0.1, 0.1, 0.1), opacity=0.7, align='left', border_color=(1, 1, 1), border_width=0, has_border=False)[source]#
Initialize class instance.
- add_element(element, coords, *, anchor='position', _is_internal=False)[source]#
Add a UI component to the panel.
The coordinates represent an offset from the lower left corner of the panel.
- Parameters:
element (UI) – The UI item to be added.
coords ((float, float) or (int, int)) – If float, normalized coordinates are assumed and they must be between [0,1]. If int, pixels coordinates are assumed and it must fit within the panel’s size.
anchor (str, optional) – Supported anchors are ‘position’ (top-left) and ‘center’.
_is_internal (bool, optional) – Flag used to distinguish between user-added elements and internal elements added by the Panel itself.
- Raises:
ValueError – If coordinates are normalized but outside the [0,1] range, or if an unknown anchor is provided.
- property border_color#
Get the current color of all four borders.
- Returns:
A list containing the color (RGB tuple) of the left, right, top, and bottom borders, respectively.
- Return type:
- property border_width#
Get the current width/height of the borders.
- Returns:
A list containing the width (for left/right) and height (for top/bottom) of the borders.
- Return type:
- property color#
Get the background color of the panel.
- left_button_dragged(event)[source]#
Handle left mouse button drag event for panel movement.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- left_button_pressed(event)[source]#
Handle left mouse button press event for panel.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- re_align(window_size_change)[source]#
Re-organise the elements in case the window size is changed.
- Parameters:
window_size_change ((int, int)) – New window size (width, height) in pixels.
- Raises:
ValueError – If alignment is not ‘left’ or ‘right’.
- remove_element(element)[source]#
Remove a UI component from the panel.
- Parameters:
element (UI) – The UI item to be removed.
- Raises:
ValueError – If the element is not found in the panel’s elements list.
- set_visibility(visibility)[source]#
Set visibility of this UI component.
- Parameters:
visibility (bool) – If True, the panel and its elements will be visible. If False, it will be hidden.
- update_element(element, coords, *, anchor='position')[source]#
Update the position of a UI component in the panel.
- Parameters:
element (UI) – The UI item to be updated.
coords ((float, float) or (int, int)) – New coordinates. If float, normalized coordinates are assumed and they must be between [0,1]. If int, pixel coordinates are assumed and it must fit within the panel’s size.
anchor (str, optional) – Supported anchors are ‘position’ (top-left) and ‘center’.
- Raises:
ValueError – If coordinates are normalized but outside the [0,1] range, or if an unknown anchor is provided.
PlaybackPanel#
- class fury.ui.PlaybackPanel(*, loop=False, position=(0, 0), width=900, z_order=0)[source]#
Bases:
UIA playback controller designed for FURY v2.
- Parameters:
- __init__(*, loop=False, position=(0, 0), width=900, z_order=0)[source]#
Initialize the playback panel instance.
- property current_time#
Get the current playback time.
- Returns:
Current time in seconds.
- Return type:
- property current_time_str#
Get the formatted string representation of current time.
- Returns:
Formatted time string.
- Return type:
- property final_time#
Get the total duration of the playback.
- Returns:
Total duration in seconds.
- Return type:
- left_button_dragged(event)[source]#
Handle left mouse button drag event for PlaybackPanel.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- left_button_pressed(event)[source]#
Handle left mouse button press event for PlaybackPanel.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- property speed#
Get the current playback speed.
- Returns:
Playback speed multiplier.
- Return type:
Rectangle2D#
- class fury.ui.Rectangle2D(*, size=(100, 100), position=(0, 0), color=(1, 1, 1), opacity=1.0)[source]#
Bases:
UIA 2D rectangle sub-classed from UI.
- Parameters:
- __init__(*, size=(100, 100), position=(0, 0), color=(1, 1, 1), opacity=1.0)[source]#
Initialize a rectangle.
- property height#
Get the current height of the rectangle.
- Returns:
The height of the rectangle in pixels.
- Return type:
RingSlider2D#
- class fury.ui.RingSlider2D(*, center=(0, 0), initial_value=0, min_value=0, max_value=360, slider_inner_radius=40, slider_outer_radius=44, handle_inner_radius=0, handle_outer_radius=10, handle_side=20, font_size=16, text_template='{ratio:.0%}', shape='disk', z_order=0)[source]#
Bases:
Slider2DA disk slider.
A disk moves along the boundary of a ring. Goes from 0-360 degrees.
- Parameters:
center ((float, float), optional) – Position (x, y) of the slider’s center.
initial_value (float, optional) – Initial value of the slider.
min_value (float, optional) – Minimum value of the slider.
max_value (float, optional) – Maximum value of the slider.
slider_inner_radius (int, optional) – Inner radius of the base disk.
slider_outer_radius (int, optional) – Outer radius of the base disk.
handle_inner_radius (int, optional) – Inner radius of the slider’s handle.
handle_outer_radius (int, optional) – Outer radius of the slider’s handle.
handle_side (int, optional) – The side length of the square handle when shape=”square”.
font_size (int, optional) – Size of the text to display alongside the slider (pt).
text_template (str or callable, optional) – If str, text template can contain one or multiple of the replacement fields: {value:}, {ratio:}, {angle:}. If callable, this instance of :class:RingSlider2D will be passed as argument to the text template function.
shape (str, optional) – The handle shape. Supported values are “disk” and “square”.
z_order (int, optional) – Stacking priority of the slider. The handle and text are placed above the track.
- text#
The text that shows percentage.
- Type:
- __init__(*, center=(0, 0), initial_value=0, min_value=0, max_value=360, slider_inner_radius=40, slider_outer_radius=44, handle_inner_radius=0, handle_outer_radius=10, handle_side=20, font_size=16, text_template='{ratio:.0%}', shape='disk', z_order=0)[source]#
Init this UI element.
- Parameters:
center ((float, float), optional) – Position (x, y) of the slider’s center.
initial_value (float, optional) – Initial value of the slider.
min_value (float, optional) – Minimum value of the slider.
max_value (float, optional) – Maximum value of the slider.
slider_inner_radius (int, optional) – Inner radius of the base disk.
slider_outer_radius (int, optional) – Outer radius of the base disk.
handle_inner_radius (int, optional) – Inner radius of the slider’s handle.
handle_outer_radius (int, optional) – Outer radius of the slider’s handle.
handle_side (int, optional) – The side length of the square handle when shape=”square”.
font_size (int, optional) – Size of the text to display alongside the slider (pt).
text_template (str or callable, optional) – If str, text template can contain one or multiple of the replacement fields: {value:}, {ratio:}, {angle:}. If callable, this instance of :class:RingSlider2D will be passed as argument to the text template function.
shape (str, optional) – The handle shape. Supported values are “disk” and “square”.
z_order (int, optional) – Stacking priority of the slider. The handle and text are placed above the track.
- property angle#
Return Angle (in rad) the handle makes with the y-axis.
- Returns:
The angle.
- Return type:
TextBlock2D#
- class fury.ui.TextBlock2D(*, text='Text Block', font_size=18, font_family='Arial', justification='left', vertical_justification='top', bold=False, italic=False, size=None, color=(1, 1, 1), bg_color=None, position=(0, 0), dynamic_bbox=False)[source]#
Bases:
UIA 2D text component with optional background.
- Parameters:
text (str, optional) – The initial text message.
font_size (int, optional) – Size of the text font.
font_family (str, optional) – The font family name.
justification (str, optional) – Horizontal alignment (“left”, “center”, “right”).
vertical_justification (str, optional) – Vertical alignment (“top”, “middle”, “bottom”).
bold (bool, optional) – If True, makes text bold.
italic (bool, optional) – If True, makes text italicized.
size ((int, int), optional) – The (width, height) in pixels for the text bounding box.
color ((float, float, float), optional) – RGB color for the text (0-1).
bg_color ((float, float, float), optional) – RGB color for the background (0-1). If None, no background is drawn.
position ((float, float), optional) – Absolute coordinates (x, y) for placement.
dynamic_bbox (bool, optional) – If True, resizes the bounding box to fit the content.
- __init__(*, text='Text Block', font_size=18, font_family='Arial', justification='left', vertical_justification='top', bold=False, italic=False, size=None, color=(1, 1, 1), bg_color=None, position=(0, 0), dynamic_bbox=False)[source]#
Initialize the text block instance.
- property background_color#
Get the background color.
- property color#
Get text color.
- property dynamic_bbox#
Check if the bounding box is dynamic.
- Returns:
True if dynamic, False otherwise.
- Return type:
- get_formatted_text(text)[source]#
Format the given text with markdown syntax for bold/italic styles.
- property italic#
Return whether the text is italicised.
- Returns:
Text is italicised if True.
- Return type:
UI#
- class fury.ui.UI(*, position=(0, 0), x_anchor=Anchor.LEFT, y_anchor=Anchor.TOP, z_order=0)[source]#
Bases:
objectAn umbrella class for all UI elements.
While adding UI elements to the scene, we go over all the sub-elements that come with it and add those to the scene automatically.
- Parameters:
position ((float, float)) – Absolute pixel coordinates (x, y) which, in combination with x_anchor and y_anchor, define the initial placement of this UI component.
x_anchor (str, optional) – Define the horizontal anchor point for position. Can be “LEFT”, “CENTER”, or “RIGHT”.
y_anchor (str, optional) – Define the vertical anchor point for position. Can be “BOTTOM”, “CENTER”, or “TOP”.
z_order (int, optional) – The initial Z-order of the UI component.
- position#
Absolute coordinates (x, y) of the lower-left corner of this UI component.
- on_left_mouse_button_pressed#
Callback function for when the left mouse button is pressed.
- Type:
function
- on_left_mouse_button_released#
Callback function for when the left mouse button is released.
- Type:
function
- on_left_mouse_button_clicked#
Callback function for when clicked using the left mouse button (i.e. pressed -> released).
- Type:
function
- on_left_mouse_double_clicked#
Callback function for when left mouse button is double clicked (i.e pressed -> released -> pressed -> released).
- Type:
function
- on_left_mouse_button_dragged#
Callback function for when dragging using the left mouse button.
- Type:
function
- on_right_mouse_button_pressed#
Callback function for when the right mouse button is pressed.
- Type:
function
- on_right_mouse_button_released#
Callback function for when the right mouse button is released.
- Type:
function
- on_right_mouse_button_clicked#
Callback function for when clicking using the right mouse button (i.e. pressed -> released).
- Type:
function
- on_right_mouse_double_clicked#
Callback function for when right mouse button is double clicked (i.e pressed -> released -> pressed -> released).
- Type:
function
- on_right_mouse_button_dragged#
Callback function for when dragging using the right mouse button.
- Type:
function
- on_middle_mouse_button_pressed#
Callback function for when the middle mouse button is pressed.
- Type:
function
- on_middle_mouse_button_released#
Callback function for when the middle mouse button is released.
- Type:
function
- on_middle_mouse_button_clicked#
Callback function for when clicking using the middle mouse button (i.e. pressed -> released).
- Type:
function
- on_middle_mouse_double_clicked#
Callback function for when middle mouse button is double clicked (i.e pressed -> released -> pressed -> released).
- Type:
function
- on_middle_mouse_button_dragged#
Callback function for when dragging using the middle mouse button.
- Type:
function
- on_key_press#
Callback function for when a keyboard key is pressed.
- Type:
function
- __init__(*, position=(0, 0), x_anchor=Anchor.LEFT, y_anchor=Anchor.TOP, z_order=0)[source]#
Init scene.
- property actors#
Get actors composing this UI component.
- Returns:
List of actors composing this UI component.
- Return type:
- get_position(x_anchor=Anchor.LEFT, y_anchor=Anchor.TOP)[source]#
Get the position of this UI component according to the specified anchor.
- Parameters:
- Returns:
The (x, y) pixel coordinates of the specified anchor point.
- Return type:
- handle_events(actor)[source]#
Attach event handlers to the UI object.
- Parameters:
actor (Mesh) – The PyGfx mesh to which event handlers should be attached.
- key_press_callback(event)[source]#
Handle key press event.
- Parameters:
event (KeyboardEvent) – The PyGfx keyboard event object.
- left_button_click_callback(event)[source]#
Handle left mouse button press event.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- left_button_release_callback(event)[source]#
Handle left mouse button release event.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- middle_button_click_callback(event)[source]#
Handle middle mouse button press event.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- middle_button_release_callback(event)[source]#
Handle middle mouse button release event.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- mouse_button_down_callback(event)[source]#
Handle mouse button press event.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- mouse_button_up_callback(event)[source]#
Handle mouse button release event.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- mouse_move_callback(event)[source]#
Handle mouse move event.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- perform_position_validation(x_anchor, y_anchor)[source]#
Perform validation checks for anchor string and the ‘size’ property.
- pointer_enter_callback(event)[source]#
Handle pointer enter event.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- pointer_leave_callback(event)[source]#
Handle pointer leave event.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- right_button_click_callback(event)[source]#
Handle right mouse button press event.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- right_button_release_callback(event)[source]#
Handle right mouse button release event.
- Parameters:
event (PointerEvent) – The PyGfx pointer event object.
- set_position(coords, x_anchor=Anchor.LEFT, y_anchor=Anchor.TOP)[source]#
Position this UI component according to the specified anchor.
- Parameters:
coords ((float, float)) – Absolute pixel coordinates (x, y). These coordinates are interpreted based on x_anchor and y_anchor.
x_anchor (str, optional) – Define the horizontal anchor point for coords. Can be “LEFT”, “CENTER”, or “RIGHT”.
y_anchor (str, optional) – Define the vertical anchor point for coords. Can be “TOP”, “CENTER”, or “BOTTOM”.
- set_visibility(visibility)[source]#
Set visibility of this UI component.
- Parameters:
visibility (bool) – If True, the UI component will be visible. If False, it will be hidden.
- property size#
Get width and height of this UI component.