[][src]Struct egui::Ui

pub struct Ui { /* fields omitted */ }

Represents a region of the screen with a type of layout (horizontal or vertical).

Implementations

impl Ui[src]

pub fn new(
    ctx: CtxRef,
    layer_id: LayerId,
    id: Id,
    max_rect: Rect,
    clip_rect: Rect
) -> Self
[src]

pub fn child_ui(&mut self, max_rect: Rect, layout: Layout) -> Self[src]

pub fn __test() -> Self[src]

Empty Ui for use in tests.

pub fn id(&self) -> Id[src]

pub fn style(&self) -> &Style[src]

Style options for this Ui and its children.

pub fn style_mut(&mut self) -> &mut Style[src]

Mutably borrow internal Style. Changes apply to this Ui and its subsequent children.

pub fn set_style(&mut self, style: impl Into<Arc<Style>>)[src]

pub fn ctx(&self) -> &CtxRef[src]

pub fn painter(&self) -> &Painter[src]

Use this to paint stuff within this Ui.

pub fn layout(&self) -> &Layout[src]

pub fn painter_at(&self, rect: Rect) -> Painter[src]

Create a painter for a sub-region of this Ui.

The clip-rect of the returned Painter will be the intersection of the given rectangle and the clip_rect() of this Ui.

pub fn layer_id(&self) -> LayerId[src]

Use this to paint stuff within this Ui.

pub fn input(&self) -> &InputState[src]

The Input of the Context associated with the Ui. Equivalent to .ctx().input().

pub fn memory(&self) -> MutexGuard<'_, Memory>[src]

The Memory of the Context associated with the Ui. Equivalent to .ctx().memory().

pub fn output(&self) -> MutexGuard<'_, Output>[src]

The Output of the Context associated with the Ui. Equivalent to .ctx().output().

pub fn fonts(&self) -> &Fonts[src]

The Fonts of the Context associated with the Ui. Equivalent to .ctx().fonts().

pub fn clip_rect(&self) -> Rect[src]

Screen-space rectangle for clipping what we paint in this ui. This is used, for instance, to avoid painting outside a window that is smaller than its contents.

pub fn set_clip_rect(&mut self, clip_rect: Rect)[src]

Screen-space rectangle for clipping what we paint in this ui. This is used, for instance, to avoid painting outside a window that is smaller than its contents.

impl Ui[src]

pub fn min_rect(&self) -> Rect[src]

Where and how large the Ui is already. All widgets that have been added ot this Ui fits within this rectangle.

No matter what, the final Ui will be at least this large.

This will grow as new widgets are added, but never shrink.

pub fn min_size(&self) -> Vec2[src]

Size of content; same as min_rect().size()

pub fn max_rect(&self) -> Rect[src]

New widgets will try to fit within this rectangle.

Text labels will wrap to fit within max_rect. Separator lines will span the max_rect.

If a new widget doesn't fit within the max_rect then the Ui will make room for it by expanding both min_rect and max_rect.

pub fn max_rect_finite(&self) -> Rect[src]

This is like max_rect(), but will never be infinite. If the desired rect is infinite ("be as big as you want") this will be bounded by min_rect instead.

pub fn set_max_size(&mut self, size: Vec2)[src]

Set the maximum size of the ui. You won't be able to shrink it below the current minimum size.

pub fn set_max_width(&mut self, width: f32)[src]

Set the maximum width of the ui. You won't be able to shrink it below the current minimum size.

pub fn set_max_height(&mut self, height: f32)[src]

Set the maximum height of the ui. You won't be able to shrink it below the current minimum size.

pub fn set_min_size(&mut self, size: Vec2)[src]

Set the minimum size of the ui. This can't shrink the ui, only make it larger.

pub fn set_min_width(&mut self, width: f32)[src]

Set the minimum width of the ui. This can't shrink the ui, only make it larger.

pub fn set_min_height(&mut self, height: f32)[src]

Set the minimum height of the ui. This can't shrink the ui, only make it larger.

pub fn shrink_width_to_current(&mut self)[src]

Helper: shrinks the max width to the current width, so further widgets will try not to be wider than previous widgets. Useful for normal vertical layouts.

pub fn shrink_height_to_current(&mut self)[src]

Helper: shrinks the max height to the current height, so further widgets will try not to be wider than previous widgets.

pub fn expand_to_include_rect(&mut self, rect: Rect)[src]

Expand the min_rect and max_rect of this ui to include a child at the given rect.

pub fn set_width_range(&mut self, width: RangeInclusive<f32>)[src]

ui.set_width_range(min..=max); is equivalent to ui.set_min_width(min); ui.set_max_width(max);.

pub fn set_width(&mut self, width: f32)[src]

ui.set_width_range(width); is equivalent to ui.set_min_width(width); ui.set_max_width(width);.

pub fn available_size(&self) -> Vec2[src]

The available space at the moment, given the current cursor. This how much more space we can take up without overflowing our parent. Shrinks as widgets allocate space and the cursor moves. A small size should be interpreted as "as little as possible". An infinite size should be interpreted as "as much as you want".

pub fn available_width(&self) -> f32[src]

pub fn available_size_before_wrap(&self) -> Vec2[src]

In case of a wrapping layout, how much space is left on this row/column?

pub fn available_size_before_wrap_finite(&self) -> Vec2[src]

This is like available_size_before_wrap(), but will never be infinite. Use this for components that want to grow without bounds (but shouldn't). In most layouts the next widget will be put in the top left corner of this Rect.

pub fn available_rect_before_wrap(&self) -> Rect[src]

pub fn available_rect_before_wrap_finite(&self) -> Rect[src]

This is like available_rect_before_wrap(), but will never be infinite. Use this for components that want to grow without bounds (but shouldn't). In most layouts the next widget will be put in the top left corner of this Rect.

impl Ui[src]

pub fn make_persistent_id<IdSource>(&self, id_source: IdSource) -> Id where
    IdSource: Hash + Debug
[src]

Use this to generate widget ids for widgets that have persistent state in Memory.

pub fn make_position_id(&self) -> Id[src]

👎 Deprecated:

This id now returned from ui.allocate_space

impl Ui[src]

pub fn interact(&self, rect: Rect, id: Id, sense: Sense) -> Response[src]

pub fn rect_contains_mouse(&self, rect: Rect) -> bool[src]

pub fn ui_contains_mouse(&self) -> bool[src]

Is the mouse above this Ui?

pub fn interact_hover(&self, rect: Rect) -> Response[src]

👎 Deprecated:

Use: interact(rect, id, Sense::hover())

pub fn hovered(&self, rect: Rect) -> bool[src]

👎 Deprecated:

Use: rect_contains_mouse()

pub fn advance_cursor(&mut self, amount: f32)[src]

Advance the cursor (where the next widget is put) by this many points. The direction is dependent on the layout. This is useful for creating some extra space between widgets.

pub fn allocate_response(
    &mut self,
    desired_size: Vec2,
    sense: Sense
) -> Response
[src]

Allocate space for a widget and check for interaction in the space. Returns a Response which contains a rectangle, id, and interaction info.

How sizes are negotiated

Each widget should have a minimum desired size and a desired size. When asking for space, ask AT LEAST for you minimum, and don't ask for more than you need. If you want to fill the space, ask about available().size() and use that.

You may get MORE space than you asked for, for instance for justified layouts, like in menus.

You will never get a rectangle that is smaller than the amount of space you asked for.

let response = ui.allocate_response(egui::vec2(100.0, 200.0), egui::Sense::click());
if response.clicked { /* … */ }
ui.painter().rect_stroke(response.rect, 0.0, (1.0, egui::color::WHITE));

pub fn allocate_space(&mut self, desired_size: Vec2) -> (Id, Rect)[src]

Reserve this much space and move the cursor. Returns where to put the widget.

How sizes are negotiated

Each widget should have a minimum desired size and a desired size. When asking for space, ask AT LEAST for you minimum, and don't ask for more than you need. If you want to fill the space, ask about available().size() and use that.

You may get MORE space than you asked for, for instance for justified layouts, like in menus.

You will never get a rectangle that is smaller than the amount of space you asked for.

Returns an automatic Id (which you can use for interaction) and the Rect of where to put your widget.

let (id, rect) = ui.allocate_space(egui::vec2(100.0, 200.0));
let response = ui.interact(rect, id, egui::Sense::click());

pub fn allocate_ui<R>(
    &mut self,
    desired_size: Vec2,
    add_contents: impl FnOnce(&mut Self) -> R
) -> (R, Response)
[src]

Allocated the given space and then adds content to that space. If the contents overflow, more space will be allocated. When finished, the amount of space actually used (min_rect) will be allocated. So you can request a lot of space and then use less.

pub fn allocate_painter(
    &mut self,
    desired_size: Vec2,
    sense: Sense
) -> (Response, Painter)
[src]

Convenience function to get a region to paint on

impl Ui[src]

pub fn add(&mut self, widget: impl Widget) -> Response[src]

pub fn label(&mut self, label: impl Into<Label>) -> Response[src]

Shortcut for add(Label::new(text))

pub fn colored_label(
    &mut self,
    color: impl Into<Srgba>,
    label: impl Into<Label>
) -> Response
[src]

Shortcut for add(Label::new(text).text_color(color))

pub fn heading(&mut self, label: impl Into<Label>) -> Response[src]

Shortcut for add(Label::new(text).heading())

pub fn monospace(&mut self, label: impl Into<Label>) -> Response[src]

Shortcut for add(Label::new(text).monospace())

pub fn small(&mut self, label: impl Into<Label>) -> Response[src]

Shortcut for add(Label::new(text).small())

Shortcut for add(Hyperlink::new(url))

pub fn text_edit(&mut self, text: &mut String) -> Response[src]

👎 Deprecated:

Use text_edit_singleline or text_edit_multiline

pub fn text_edit_singleline(&mut self, text: &mut String) -> Response[src]

Now newlines (\n) allowed. Pressing enter key will result in the TextEdit loosing focus (response.lost_kb_focus).

pub fn text_edit_multiline(&mut self, text: &mut String) -> Response[src]

A TextEdit for multiple lines. Pressing enter key will create a new line.

#[must_use = "You should check if the user clicked this with `if ui.button(...).clicked { ... } "]pub fn button(&mut self, text: impl Into<String>) -> Response[src]

Usage: if ui.button("Click me").clicked { ... }

Shortcut for add(Button::new(text))

#[must_use = "You should check if the user clicked this with `if ui.small_button(...).clicked { ... } "]pub fn small_button(&mut self, text: impl Into<String>) -> Response[src]

A button as small as normal body text.

Usage: if ui.small_button("Click me").clicked { ... }

Shortcut for add(Button::new(text).small())

pub fn checkbox(
    &mut self,
    checked: &mut bool,
    text: impl Into<String>
) -> Response
[src]

Show a checkbox.

pub fn radio(&mut self, selected: bool, text: impl Into<String>) -> Response[src]

Show a radio button. Often you want to use ui.radio_value instead.

pub fn radio_value<Value: PartialEq>(
    &mut self,
    current_value: &mut Value,
    selected_value: Value,
    text: impl Into<String>
) -> Response
[src]

Show a radio button. It is selected if *current_value == selected_value. If clicked, selected_value is assigned to *current_value.

Example: ui.radio_value(&mut my_enum, Enum::Alternative, "Alternative").

pub fn selectable_label(
    &mut self,
    checked: bool,
    text: impl Into<String>
) -> Response
[src]

Show a label which can be selected or not.

pub fn selectable_value<Value: PartialEq>(
    &mut self,
    current_value: &mut Value,
    selected_value: Value,
    text: impl Into<String>
) -> Response
[src]

Show selectable text. It is selected if *current_value == selected_value. If clicked, selected_value is assigned to *current_value.

Example: ui.selectable_value(&mut my_enum, Enum::Alternative, "Alternative").

pub fn separator(&mut self) -> Response[src]

Shortcut for add(Separator::new())

pub fn drag_angle(&mut self, radians: &mut f32) -> Response[src]

Modify an angle. The given angle should be in radians, but is shown to the user in degrees. The angle is NOT wrapped, so the user may select, for instance 720° = 2𝞃 = 4π

pub fn drag_angle_tau(&mut self, radians: &mut f32) -> Response[src]

Modify an angle. The given angle should be in radians, but is shown to the user in fractions of one Tau (i.e. fractions of one turn). The angle is NOT wrapped, so the user may select, for instance 2𝞃 (720°)

pub fn image(
    &mut self,
    texture_id: TextureId,
    desired_size: impl Into<Vec2>
) -> Response
[src]

Show an image here with the given size

impl Ui[src]

pub fn color_edit_button_srgba(&mut self, srgba: &mut Srgba) -> Response[src]

Shows a button with the given color. If the user clicks the button, a full color picker is shown.

pub fn color_edit_button_hsva(&mut self, hsva: &mut Hsva) -> Response[src]

Shows a button with the given color. If the user clicks the button, a full color picker is shown.

pub fn color_edit_button_srgba_premultiplied(
    &mut self,
    srgba: &mut [u8; 4]
) -> Response
[src]

Shows a button with the given color. If the user clicks the button, a full color picker is shown. The given color is in sRGBA space with premultiplied alpha

pub fn color_edit_button_srgba_unmultiplied(
    &mut self,
    srgba: &mut [u8; 4]
) -> Response
[src]

Shows a button with the given color. If the user clicks the button, a full color picker is shown. The given color is in sRGBA space without premultiplied alpha. If unsure, what "premultiplied alpha" is, then this is probably the function you want to use.

pub fn color_edit_button_rgba_premultiplied(
    &mut self,
    rgba: &mut [f32; 4]
) -> Response
[src]

Shows a button with the given color. If the user clicks the button, a full color picker is shown. The given color is in linear RGBA space with premultiplied alpha

pub fn color_edit_button_rgba_unmultiplied(
    &mut self,
    rgba: &mut [f32; 4]
) -> Response
[src]

Shows a button with the given color. If the user clicks the button, a full color picker is shown. The given color is in linear RGBA space without premultiplied alpha. If unsure, what "premultiplied alpha" is, then this is probably the function you want to use.

impl Ui[src]

pub fn wrap<R>(
    &mut self,
    add_contents: impl FnOnce(&mut Ui) -> R
) -> (R, Response)
[src]

Create a child ui. You can use this to temporarily change the Style of a sub-region, for instance.

pub fn with_layer_id<R>(
    &mut self,
    layer_id: LayerId,
    add_contents: impl FnOnce(&mut Self) -> R
) -> (R, Response)
[src]

Redirect paint commands to another paint layer.

pub fn add_custom_contents(
    &mut self,
    desired_size: Vec2,
    add_contents: impl FnOnce(&mut Ui)
) -> Rect
[src]

👎 Deprecated:

Use ui.allocate_ui instead

pub fn collapsing<R>(
    &mut self,
    heading: impl Into<String>,
    add_contents: impl FnOnce(&mut Ui) -> R
) -> CollapsingResponse<R>
[src]

A CollapsingHeader that starts out collapsed.

pub fn indent<R>(
    &mut self,
    id_source: impl Hash,
    add_contents: impl FnOnce(&mut Ui) -> R
) -> (R, Response)
[src]

Create a child ui which is indented to the right

pub fn left_column(&mut self, width: f32) -> Self[src]

👎 Deprecated

pub fn centered_column(&mut self, width: f32) -> Self[src]

👎 Deprecated

pub fn right_column(&mut self, width: f32) -> Self[src]

👎 Deprecated

pub fn column(&mut self, column_position: Align, width: f32) -> Self[src]

👎 Deprecated

A column ui with a given width.

pub fn horizontal<R>(
    &mut self,
    add_contents: impl FnOnce(&mut Ui) -> R
) -> (R, Response)
[src]

Start a ui with horizontal layout. After you have called this, the function registers the contents as any other widget.

Elements will be centered on the Y axis, i.e. adjusted up and down to lie in the center of the horizontal layout. The initial height is style.spacing.interact_size.y. Centering is almost always what you want if you are planning to to mix widgets or use different types of text.

The returned Response will only have checked for mouse hover but can be used for tooltips (on_hover_text). It also contains the Rect used by the horizontal layout.

pub fn horizontal_for_text<R>(
    &mut self,
    text_style: TextStyle,
    add_contents: impl FnOnce(&mut Ui) -> R
) -> (R, Response)
[src]

Like horizontal, but will set up the spacing to match that of a normal label.

In particular, the space between widgets is the same width as the space character.

You can still add any widgets to the layout (not only Labels).

pub fn horizontal_wrapped<R>(
    &mut self,
    add_contents: impl FnOnce(&mut Ui) -> R
) -> (R, Response)
[src]

Start a ui with horizontal layout that wraps to a new row when it reaches the right edge of the max_size. After you have called this, the function registers the contents as any other widget.

Elements will be centered on the Y axis, i.e. adjusted up and down to lie in the center of the horizontal layout. The initial height is style.spacing.interact_size.y. Centering is almost always what you want if you are planning to to mix widgets or use different types of text.

The returned Response will only have checked for mouse hover but can be used for tooltips (on_hover_text). It also contains the Rect used by the horizontal layout.

pub fn horizontal_wrapped_for_text<R>(
    &mut self,
    text_style: TextStyle,
    add_contents: impl FnOnce(&mut Ui) -> R
) -> (R, Response)
[src]

Like horizontal_wrapped, but will set up the spacing and line size to match that of a normal label.

In particular, the space between widgets is the same width as the space character and the line spacing is the same as that for text.

You can still add any widgets to the layout (not only Labels).

pub fn vertical<R>(
    &mut self,
    add_contents: impl FnOnce(&mut Ui) -> R
) -> (R, Response)
[src]

Start a ui with vertical layout. Widgets will be left-justified.

pub fn vertical_centered<R>(
    &mut self,
    add_contents: impl FnOnce(&mut Ui) -> R
) -> (R, Response)
[src]

Start a ui with vertical layout. Widgets will be centered.

pub fn vertical_centered_justified<R>(
    &mut self,
    add_contents: impl FnOnce(&mut Ui) -> R
) -> (R, Response)
[src]

Start a ui with vertical layout. Widgets will be centered and justified (fill full width).

pub fn with_layout<R>(
    &mut self,
    layout: Layout,
    add_contents: impl FnOnce(&mut Self) -> R
) -> (R, Response)
[src]

pub fn columns<F, R>(&mut self, num_columns: usize, add_contents: F) -> R where
    F: FnOnce(&mut [Self]) -> R, 
[src]

Temporarily split split an Ui into several columns.

ui.columns(2, |columns| {
    columns[0].label("First column");
    columns[1].label("Second column");
});

impl Ui[src]

pub fn debug_paint_cursor(&self)[src]

Shows where the next widget is going to be placed

Auto Trait Implementations

impl !RefUnwindSafe for Ui[src]

impl Send for Ui[src]

impl Sync for Ui[src]

impl Unpin for Ui[src]

impl !UnwindSafe for Ui[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.