pub struct Window {Show 21 fields
pub widget: Widget,
pub mouse_click_pos: Vector2<f32>,
pub initial_position: Vector2<f32>,
pub initial_size: Vector2<f32>,
pub is_dragging: bool,
pub minimized: bool,
pub can_minimize: bool,
pub can_maximize: bool,
pub can_close: bool,
pub can_resize: bool,
pub header: Handle<UiNode>,
pub minimize_button: Handle<UiNode>,
pub maximize_button: Handle<UiNode>,
pub close_button: Handle<UiNode>,
pub drag_delta: Vector2<f32>,
pub content: Handle<UiNode>,
pub grips: RefCell<[Grip; 8]>,
pub title: Handle<UiNode>,
pub title_grid: Handle<UiNode>,
pub safe_border_size: Option<Vector2<f32>>,
pub prev_bounds: Option<Rect<f32>>,
}Expand description
The Window widget provides a standard window that can contain another widget. Based on setting windows can be configured so users can do any of the following:
- Movable by the user. Not configurable.
- Have title text on the title bar. Set by the with_title function.
- Able to be exited by the user. Set by the can_close function.
- Able to be minimized to just the Title bar, and of course maximized again. Set by the can_minimize function.
- Able to resize the window. Set by the can_resize function.
As with other UI elements, you create and configure the window using the WindowBuilder.
fn create_window(ui: &mut UserInterface) {
WindowBuilder::new(
WidgetBuilder::new()
.with_desired_position(Vector2::new(300.0, 0.0))
.with_width(300.0),
)
.with_content(
TextBuilder::new(WidgetBuilder::new())
.with_text("Example Window content.")
.build(&mut ui.build_ctx())
)
.with_title(WindowTitle::text("Window"))
.can_close(true)
.can_minimize(true)
.open(true)
.can_resize(false)
.build(&mut ui.build_ctx());
}You will likely want to constrain the initial size of the window to something as shown in the example by providing a set width and/or height to the base WidgetBuilder. Otherwise it will expand to fit it’s content.
You may also want to set an initial position with the with_desired_position function called on the base WidgetBuilder which sets the position of the window’s top-left corner. Otherwise all your windows will start with it’s top-left corner at 0,0 and be stacked on top of each other.
Windows can only contain a single direct child widget, set by using the with_content function. Additional calls to with_content replaces the widgets given in previous calls, and the old widgets exist outside the window, so you should delete old widgets before changing a window’s widget. If you want multiple widgets, you need to use one of the layout container widgets like the Grid, Stack Panel, etc then add the additional widgets to that widget as needed.
The Window is a user editable object, but can only be affected by UI Messages they trigger if the message’s corresponding variable has been set to true aka what is set by the can_close, can_minimize, and can_resize functions.
Initial Open State
By default, the window will be created in the open, or maximized, state. You can manually set this state via the open function providing a true or false as desired.
Styling the Buttons
The window close and minimise buttons can be configured with the with_close_button and with_minimize_button functions. You will want to pass them a button widget, but can do anything else you like past that.
Modal (AKA Forced Focus)
A Modal in UI design terms indicates a window or box that has forced focus. The user is not able to interact with anything else until the modal is dismissed.
Any window can be set and unset as a modal via the modal function.
Fields§
§widget: WidgetBase widget of the window.
mouse_click_pos: Vector2<f32>Mouse click position.
initial_position: Vector2<f32>Initial mouse position.
initial_size: Vector2<f32>Initial size of the window.
is_dragging: boolWhether the window is being dragged or not.
minimized: boolWhether the window is minimized or not.
can_minimize: boolWhether the window can be minimized or not.
can_maximize: boolWhether the window can be maximized or not.
can_close: boolWhether the window can be closed or not.
can_resize: boolWhether the window can be resized or not.
header: Handle<UiNode>Handle of a header widget.
Handle of a minimize button.
Handle of a maximize button.
Handle of a close button.
drag_delta: Vector2<f32>A distance per each axis when the dragging starts.
content: Handle<UiNode>Handle of a current content.
grips: RefCell<[Grip; 8]>Eight grips of the window that are used to resize the window.
title: Handle<UiNode>Handle of a title widget of the window.
title_grid: Handle<UiNode>Handle of a container widget of the title.
safe_border_size: Option<Vector2<f32>>Optional size of the border around the screen in which the window will be forced to stay.
prev_bounds: Option<Rect<f32>>Bounds of the window before maximization, it is used to return the window to previous size when it is either “unmaximized” or dragged.
Implementations§
Methods from Deref<Target = Widget>§
sourcepub fn set_name<P: AsRef<str>>(&mut self, name: P) -> &mut Self
pub fn set_name<P: AsRef<str>>(&mut self, name: P) -> &mut Self
Sets the new name of the widget.
sourcepub fn actual_local_size(&self) -> Vector2<f32>
pub fn actual_local_size(&self) -> Vector2<f32>
Returns the actual size of the widget after the full layout cycle.
sourcepub fn actual_initial_size(&self) -> Vector2<f32>
pub fn actual_initial_size(&self) -> Vector2<f32>
Returns size of the widget without any layout or rendering transform applied.
sourcepub fn actual_global_size(&self) -> Vector2<f32>
pub fn actual_global_size(&self) -> Vector2<f32>
Returns the actual global size of the widget after the full layout cycle.
sourcepub fn set_min_size(&mut self, value: Vector2<f32>) -> &mut Self
pub fn set_min_size(&mut self, value: Vector2<f32>) -> &mut Self
Sets the new minimum size of the widget.
sourcepub fn set_min_width(&mut self, value: f32) -> &mut Self
pub fn set_min_width(&mut self, value: f32) -> &mut Self
Sets the new minimum width of the widget.
sourcepub fn set_min_height(&mut self, value: f32) -> &mut Self
pub fn set_min_height(&mut self, value: f32) -> &mut Self
Sets the new minimum height of the widget.
sourcepub fn min_height(&self) -> f32
pub fn min_height(&self) -> f32
Returns the minimum height of the widget.
sourcepub fn is_drag_allowed(&self) -> bool
pub fn is_drag_allowed(&self) -> bool
Return true if the dragging of the widget is allowed, false - otherwise.
sourcepub fn is_drop_allowed(&self) -> bool
pub fn is_drop_allowed(&self) -> bool
Return true if the dropping of other widgets is allowed on this widget, false - otherwise.
sourcepub fn screen_to_local(&self, point: Vector2<f32>) -> Vector2<f32>
pub fn screen_to_local(&self, point: Vector2<f32>) -> Vector2<f32>
Maps the given point from screen to local widget’s coordinates.
sourcepub fn invalidate_layout(&self)
pub fn invalidate_layout(&self)
Invalidates layout of the widget. WARNING: Do not use this method, unless you understand what you’re doing, it will cause new layout pass for this widget which could be quite heavy and doing so on every frame for multiple widgets will cause severe performance issues.
sourcepub fn invalidate_measure(&self)
pub fn invalidate_measure(&self)
Invalidates measurement results of the widget. WARNING: Do not use this method, unless you understand what you’re doing, it will cause new measurement pass for this widget which could be quite heavy and doing so on every frame for multiple widgets will cause severe performance issues.
sourcepub fn invalidate_arrange(&self)
pub fn invalidate_arrange(&self)
Invalidates arrangement results of the widget. WARNING: Do not use this method, unless you understand what you’re doing, it will cause new arrangement pass for this widget which could be quite heavy and doing so on every frame for multiple widgets will cause severe performance issues.
sourcepub fn is_hit_test_visible(&self) -> bool
pub fn is_hit_test_visible(&self) -> bool
Returns true if the widget is able to participate in hit testing, false - otherwise.
sourcepub fn set_max_size(&mut self, value: Vector2<f32>) -> &mut Self
pub fn set_max_size(&mut self, value: Vector2<f32>) -> &mut Self
Sets the new maximum size of the widget.
sourcepub fn max_height(&self) -> f32
pub fn max_height(&self) -> f32
Return maximum height of the widget.
sourcepub fn set_z_index(&mut self, z_index: usize) -> &mut Self
pub fn set_z_index(&mut self, z_index: usize) -> &mut Self
Sets new Z index for the widget. Z index defines the sorting (stable) index which will be used to “arrange” widgets in the correct order.
sourcepub fn set_background(&mut self, brush: Brush) -> &mut Self
pub fn set_background(&mut self, brush: Brush) -> &mut Self
Sets the new background of the widget.
sourcepub fn background(&self) -> Brush
pub fn background(&self) -> Brush
Returns current background of the widget.
sourcepub fn set_foreground(&mut self, brush: Brush) -> &mut Self
pub fn set_foreground(&mut self, brush: Brush) -> &mut Self
Sets new foreground of the widget.
sourcepub fn foreground(&self) -> Brush
pub fn foreground(&self) -> Brush
Returns current foreground of the widget.
sourcepub fn is_draw_on_top(&self) -> bool
pub fn is_draw_on_top(&self) -> bool
Return true if the widget is set to be drawn on top of every other, normally drawn, widgets, false - otherwise.
sourcepub fn set_height(&mut self, height: f32) -> &mut Self
pub fn set_height(&mut self, height: f32) -> &mut Self
Sets new height of the widget.
sourcepub fn set_desired_local_position(&mut self, pos: Vector2<f32>) -> &mut Self
pub fn set_desired_local_position(&mut self, pos: Vector2<f32>) -> &mut Self
Sets the desired local position of the widget.
sourcepub fn screen_position(&self) -> Vector2<f32>
pub fn screen_position(&self) -> Vector2<f32>
Returns current screen-space position of the widget.
sourcepub fn children(&self) -> &[Handle<UiNode>]
pub fn children(&self) -> &[Handle<UiNode>]
Returns a reference to the slice with the children widgets of this widget.
sourcepub fn set_column(&mut self, column: usize) -> &mut Self
pub fn set_column(&mut self, column: usize) -> &mut Self
Sets new column of the widget. Columns are used only by crate::grid::Grid widget.
sourcepub fn column(&self) -> usize
pub fn column(&self) -> usize
Returns current column of the widget. Columns are used only by crate::grid::Grid widget.
sourcepub fn set_row(&mut self, row: usize) -> &mut Self
pub fn set_row(&mut self, row: usize) -> &mut Self
Sets new row of the widget. Rows are used only by crate::grid::Grid widget.
sourcepub fn row(&self) -> usize
pub fn row(&self) -> usize
Returns current row of the widget. Rows are used only by crate::grid::Grid widget.
sourcepub fn desired_size(&self) -> Vector2<f32>
pub fn desired_size(&self) -> Vector2<f32>
Returns the desired size of the widget.
sourcepub fn desired_local_position(&self) -> Vector2<f32>
pub fn desired_local_position(&self) -> Vector2<f32>
Returns current desired local position of the widget.
sourcepub fn screen_bounds(&self) -> Rect<f32>
pub fn screen_bounds(&self) -> Rect<f32>
Returns current screen-space bounds of the widget.
sourcepub fn bounding_rect(&self) -> Rect<f32>
pub fn bounding_rect(&self) -> Rect<f32>
Returns local-space bounding rect of the widget.
sourcepub fn visual_transform(&self) -> &Matrix3<f32>
pub fn visual_transform(&self) -> &Matrix3<f32>
Returns current visual transform of the widget.
sourcepub fn render_transform(&self) -> &Matrix3<f32>
pub fn render_transform(&self) -> &Matrix3<f32>
Returns current render transform of the widget.
sourcepub fn layout_transform(&self) -> &Matrix3<f32>
pub fn layout_transform(&self) -> &Matrix3<f32>
Returns current layout transform of the widget.
sourcepub fn has_descendant(
&self,
node_handle: Handle<UiNode>,
ui: &UserInterface
) -> bool
pub fn has_descendant( &self, node_handle: Handle<UiNode>, ui: &UserInterface ) -> bool
Returns true, if the widget has a descendant widget with the specified handle, false - otherwise.
sourcepub fn find_by_criteria_up<Func: Fn(&UiNode) -> bool>(
&self,
ui: &UserInterface,
func: Func
) -> Handle<UiNode>
pub fn find_by_criteria_up<Func: Fn(&UiNode) -> bool>( &self, ui: &UserInterface, func: Func ) -> Handle<UiNode>
Searches a node up on tree starting from the given root that matches a criteria defined by the given func.
sourcepub fn handle_routed_message(
&mut self,
_ui: &mut UserInterface,
msg: &mut UiMessage
)
pub fn handle_routed_message( &mut self, _ui: &mut UserInterface, msg: &mut UiMessage )
Handles incoming WidgetMessages. This method must be called in crate::control::Control::handle_routed_message
of any derived widgets!
sourcepub fn set_vertical_alignment(
&mut self,
vertical_alignment: VerticalAlignment
) -> &mut Self
pub fn set_vertical_alignment( &mut self, vertical_alignment: VerticalAlignment ) -> &mut Self
Sets new vertical alignment of the widget.
sourcepub fn vertical_alignment(&self) -> VerticalAlignment
pub fn vertical_alignment(&self) -> VerticalAlignment
Returns current vertical alignment of the widget.
sourcepub fn set_horizontal_alignment(
&mut self,
horizontal_alignment: HorizontalAlignment
) -> &mut Self
pub fn set_horizontal_alignment( &mut self, horizontal_alignment: HorizontalAlignment ) -> &mut Self
Sets new horizontal alignment of the widget.
sourcepub fn horizontal_alignment(&self) -> HorizontalAlignment
pub fn horizontal_alignment(&self) -> HorizontalAlignment
Returns current horizontal alignment of the widget.
sourcepub fn set_margin(&mut self, margin: Thickness) -> &mut Self
pub fn set_margin(&mut self, margin: Thickness) -> &mut Self
Sets new margin of the widget.
sourcepub fn measure_override(
&self,
ui: &UserInterface,
available_size: Vector2<f32>
) -> Vector2<f32>
pub fn measure_override( &self, ui: &UserInterface, available_size: Vector2<f32> ) -> Vector2<f32>
Performs standard measurement of children nodes. It provides available size as a constraint and returns the maximum desired size across all children. As a result, this widget will have this size as its desired size to fit all the children nodes.
sourcepub fn arrange_override(
&self,
ui: &UserInterface,
final_size: Vector2<f32>
) -> Vector2<f32>
pub fn arrange_override( &self, ui: &UserInterface, final_size: Vector2<f32> ) -> Vector2<f32>
Performs standard arrangement of the children nodes of the widget. It uses input final size to make a final bounding rectangle to arrange children. As a result, all the children nodes will be located at the top-left corner of this widget and stretched to fit its bounds.
sourcepub fn is_arrange_valid(&self) -> bool
pub fn is_arrange_valid(&self) -> bool
Returns true if the current results of arrangement of the widget are valid, false - otherwise.
sourcepub fn is_measure_valid(&self) -> bool
pub fn is_measure_valid(&self) -> bool
Returns true if the current results of measurement of the widget are valid, false - otherwise.
sourcepub fn actual_local_position(&self) -> Vector2<f32>
pub fn actual_local_position(&self) -> Vector2<f32>
Returns current actual local position of the widget. It is valid only after layout pass!
sourcepub fn center(&self) -> Vector2<f32>
pub fn center(&self) -> Vector2<f32>
Returns center point of the widget. It is valid only after layout pass!
sourcepub fn is_globally_visible(&self) -> bool
pub fn is_globally_visible(&self) -> bool
Returns true of the widget is globally visible, which means that all its parents are visible as well
as this widget. It is valid only after the first update of the layout, otherwise if will be always false.
sourcepub fn set_visibility(&mut self, visibility: bool) -> &mut Self
pub fn set_visibility(&mut self, visibility: bool) -> &mut Self
Sets new visibility of the widget.
sourcepub fn request_update_visibility(&self)
pub fn request_update_visibility(&self)
Requests (via event queue, so the request is deferred) the update of the visibility of the widget.
sourcepub fn visibility(&self) -> bool
pub fn visibility(&self) -> bool
Returns current visibility of the widget.
sourcepub fn set_enabled(&mut self, enabled: bool) -> &mut Self
pub fn set_enabled(&mut self, enabled: bool) -> &mut Self
Enables or disables the widget. Disabled widgets does not interact with user and usually greyed out.
sourcepub fn set_cursor(&mut self, cursor: Option<CursorIcon>)
pub fn set_cursor(&mut self, cursor: Option<CursorIcon>)
Sets new cursor of the widget.
sourcepub fn cursor(&self) -> Option<CursorIcon>
pub fn cursor(&self) -> Option<CursorIcon>
Returns current cursor of the widget.
sourcepub fn user_data_ref<T: 'static>(&self) -> Option<&T>
pub fn user_data_ref<T: 'static>(&self) -> Option<&T>
Tries to fetch user-defined data of the specified type T.
sourcepub fn clip_bounds(&self) -> Rect<f32>
pub fn clip_bounds(&self) -> Rect<f32>
Returns current clipping bounds of the widget. It is valid only after at least one layout pass.
sourcepub fn set_opacity(&mut self, opacity: Option<f32>) -> &mut Self
pub fn set_opacity(&mut self, opacity: Option<f32>) -> &mut Self
Set new opacity of the widget. Opacity should be in [0.0..1.0] range.
sourcepub fn tooltip(&self) -> Option<RcUiNodeHandle>
pub fn tooltip(&self) -> Option<RcUiNodeHandle>
Returns current tooltip handle of the widget.
sourcepub fn set_tooltip(&mut self, tooltip: Option<RcUiNodeHandle>) -> &mut Self
pub fn set_tooltip(&mut self, tooltip: Option<RcUiNodeHandle>) -> &mut Self
Sets new tooltip handle of the widget (if any).
sourcepub fn tooltip_time(&self) -> f32
pub fn tooltip_time(&self) -> f32
Returns maximum available time to show the tooltip after the cursor was moved away from the widget.
sourcepub fn set_tooltip_time(&mut self, tooltip_time: f32) -> &mut Self
pub fn set_tooltip_time(&mut self, tooltip_time: f32) -> &mut Self
Set the maximum available time to show the tooltip after the cursor was moved away from the widget.
Returns current context menu of the widget.
The context menu receives PopupMessages for being displayed, and so should support those.
Trait Implementations§
source§impl Control for Window
impl Control for Window
source§fn query_component(&self, type_id: TypeId) -> Option<&dyn Any>
fn query_component(&self, type_id: TypeId) -> Option<&dyn Any>
source§fn resolve(&mut self, node_map: &NodeHandleMapping)
fn resolve(&mut self, node_map: &NodeHandleMapping)
source§fn arrange_override(
&self,
ui: &UserInterface,
final_size: Vector2<f32>
) -> Vector2<f32>
fn arrange_override( &self, ui: &UserInterface, final_size: Vector2<f32> ) -> Vector2<f32>
source§fn handle_routed_message(
&mut self,
ui: &mut UserInterface,
message: &mut UiMessage
)
fn handle_routed_message( &mut self, ui: &mut UserInterface, message: &mut UiMessage )
source§fn on_remove(&self, sender: &Sender<UiMessage>)
fn on_remove(&self, sender: &Sender<UiMessage>)
crate::widget::WidgetMessage::remove.source§fn measure_override(
&self,
ui: &UserInterface,
available_size: Vector2<f32>
) -> Vector2<f32>
fn measure_override( &self, ui: &UserInterface, available_size: Vector2<f32> ) -> Vector2<f32>
source§fn draw(&self, drawing_context: &mut DrawingContext)
fn draw(&self, drawing_context: &mut DrawingContext)
source§fn update(&mut self, dt: f32, sender: &Sender<UiMessage>)
fn update(&mut self, dt: f32, sender: &Sender<UiMessage>)
source§fn preview_message(&self, ui: &UserInterface, message: &mut UiMessage)
fn preview_message(&self, ui: &UserInterface, message: &mut UiMessage)
preview_message used in a dropdown list:
dropdown list has two separate parts - a field with selected value and a popup for all possible
options. Visual parent of the popup in this case is the root canvas, but logical parent is the
dropdown list. Because of this fact, the field won’t receive any messages from popup, to solve
this we use preview_message. This method is much more restrictive - it does not allow you to
modify a node and ui, you can either request changes by sending a message or use internal
mutability (Cell, RefCell, etc). Read moresource§fn handle_os_event(
&mut self,
self_handle: Handle<UiNode>,
ui: &mut UserInterface,
event: &OsEvent
)
fn handle_os_event( &mut self, self_handle: Handle<UiNode>, ui: &mut UserInterface, event: &OsEvent )
handle_message because os events
are not dispatched - they’ll be passed to this method in any case. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for Window
impl !Send for Window
impl !Sync for Window
impl Unpin for Window
impl !UnwindSafe for Window
Blanket Implementations§
source§impl<T> BaseControl for Twhere
T: Any + Clone + 'static + Control,
impl<T> BaseControl for Twhere T: Any + Clone + 'static + Control,
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> FieldValue for Twhere
T: 'static,
impl<T> FieldValue for Twhere T: 'static,
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.