diff --git a/crates/egui/src/containers/mod.rs b/crates/egui/src/containers/mod.rs index a7ffce71c..c1f80cb5e 100644 --- a/crates/egui/src/containers/mod.rs +++ b/crates/egui/src/containers/mod.rs @@ -21,7 +21,7 @@ pub use { combo_box::*, frame::Frame, modal::{Modal, ModalResponse}, - panel::{CentralPanel, Panel}, + panel::{CentralPanel, Panel, PanelSide, VerticalSide, HorizontalSide}, popup::*, resize::Resize, scene::Scene, diff --git a/crates/egui/src/containers/panel.rs b/crates/egui/src/containers/panel.rs index aff10996e..5d22ee747 100644 --- a/crates/egui/src/containers/panel.rs +++ b/crates/egui/src/containers/panel.rs @@ -64,32 +64,32 @@ pub enum HorizontalSide { Bottom, } -/// [`Horizontal`](Side::Horizontal) or [`Vertical`](Side::Vertical) +/// [`Horizontal`](PanelSide::Horizontal) or [`Vertical`](PanelSide::Vertical) #[derive(Clone, Copy, Debug, PartialEq, Eq)] -pub enum Side { +pub enum PanelSide { Vertical(VerticalSide), Horizontal(HorizontalSide), } -impl Side { +impl PanelSide { fn opposite(self) -> Self { - let opposite_vertical = |side: VerticalSide| -> Side { + let opposite_vertical = |side: VerticalSide| -> PanelSide { match side { - VerticalSide::Left => Side::Vertical(VerticalSide::Right), - VerticalSide::Right => Side::Vertical(VerticalSide::Left), + VerticalSide::Left => PanelSide::Vertical(VerticalSide::Right), + VerticalSide::Right => PanelSide::Vertical(VerticalSide::Left), } }; - let opposite_horizontal = |side: HorizontalSide| -> Side { + let opposite_horizontal = |side: HorizontalSide| -> PanelSide { match side { - HorizontalSide::Top => Side::Horizontal(HorizontalSide::Bottom), - HorizontalSide::Bottom => Side::Horizontal(HorizontalSide::Top), + HorizontalSide::Top => PanelSide::Horizontal(HorizontalSide::Bottom), + HorizontalSide::Bottom => PanelSide::Horizontal(HorizontalSide::Top), } }; match self { - Side::Vertical(side) => opposite_vertical(side), - Side::Horizontal(side) => opposite_horizontal(side), + PanelSide::Vertical(side) => opposite_vertical(side), + PanelSide::Horizontal(side) => opposite_horizontal(side), } } @@ -105,8 +105,8 @@ impl Side { }; match self { - Side::Vertical(side) => set_rect_size_vertical(side), - Side::Horizontal(side) => set_rect_size_horizontal(side), + PanelSide::Vertical(side) => set_rect_size_vertical(side), + PanelSide::Horizontal(side) => set_rect_size_horizontal(side), } } @@ -126,8 +126,8 @@ impl Side { }; match self { - Side::Vertical(side) => side_axe_vertical(side, rect), - Side::Horizontal(side) => side_axe_horizontal(side, rect), + PanelSide::Vertical(side) => side_axe_vertical(side, rect), + PanelSide::Horizontal(side) => side_axe_horizontal(side, rect), } } @@ -147,8 +147,8 @@ impl Side { }; match self { - Side::Vertical(side) => sign_vertical(side), - Side::Horizontal(side) => sign_horizontal(side), + PanelSide::Vertical(side) => sign_vertical(side), + PanelSide::Horizontal(side) => sign_horizontal(side), } } } @@ -185,15 +185,15 @@ impl<'a> PanelSizer<'a> { fn get_size_from_state_or_default(panel: &Panel, ui: &mut Ui, frame: Frame) -> f32 { if let Some(state) = PanelState::load(ui.ctx(), panel.id) { match panel.side { - Side::Vertical(_) => state.rect.width(), - Side::Horizontal(_) => state.rect.height(), + PanelSide::Vertical(_) => state.rect.width(), + PanelSide::Horizontal(_) => state.rect.height(), } } else { match panel.side { - Side::Vertical(_) => panel.default_size.unwrap_or_else(|| { + PanelSide::Vertical(_) => panel.default_size.unwrap_or_else(|| { ui.style().spacing.interact_size.x + frame.inner_margin.sum().x }), - Side::Horizontal(_) => panel.default_size.unwrap_or_else(|| { + PanelSide::Horizontal(_) => panel.default_size.unwrap_or_else(|| { ui.style().spacing.interact_size.y + frame.inner_margin.sum().y }), } @@ -207,10 +207,10 @@ impl<'a> PanelSizer<'a> { let mut panel_rect = available_rect; match side { - Side::Vertical(_) => { + PanelSide::Vertical(_) => { size = clamp_to_range(size, size_range).at_most(available_rect.width()); } - Side::Horizontal(_) => { + PanelSide::Horizontal(_) => { size = clamp_to_range(size, size_range).at_most(available_rect.height()); } } @@ -226,12 +226,12 @@ impl<'a> PanelSizer<'a> { let pointer = pointer.unwrap(); match side { - Side::Vertical(_) => { + PanelSide::Vertical(_) => { self.size = (pointer.x - side.side_axe(self.panel_rect)).abs(); self.size = clamp_to_range(self.size, size_range).at_most(self.available_rect.width()); } - Side::Horizontal(_) => { + PanelSide::Horizontal(_) => { self.size = (pointer.y - side.side_axe(self.panel_rect)).abs(); self.size = clamp_to_range(self.size, size_range).at_most(self.available_rect.height()); @@ -266,7 +266,7 @@ impl<'a> PanelSizer<'a> { /// ``` #[must_use = "You should call .show()"] pub struct Panel { - side: Side, + side: PanelSide, id: Id, frame: Option, resizable: bool, @@ -286,42 +286,42 @@ impl Panel { /// /// The id should be globally unique, e.g. `Id::new("my_left_panel")`. pub fn left(id: impl Into) -> Self { - Self::new(Side::Vertical(VerticalSide::Left), id) + Self::new(PanelSide::Vertical(VerticalSide::Left), id) } /// Create a right panel. /// /// The id should be globally unique, e.g. `Id::new("my_right_panel")`. pub fn right(id: impl Into) -> Self { - Self::new(Side::Vertical(VerticalSide::Right), id) + Self::new(PanelSide::Vertical(VerticalSide::Right), id) } /// Create a top panel. /// /// The id should be globally unique, e.g. `Id::new("my_top_panel")`. pub fn top(id: impl Into) -> Self { - Self::new(Side::Horizontal(HorizontalSide::Top), id) + Self::new(PanelSide::Horizontal(HorizontalSide::Top), id) } /// Create a bottom panel. /// /// The id should be globally unique, e.g. `Id::new("my_bottom_panel")`. pub fn bottom(id: impl Into) -> Self { - Self::new(Side::Horizontal(HorizontalSide::Bottom), id) + Self::new(PanelSide::Horizontal(HorizontalSide::Bottom), id) } /// Create a panel. /// /// The id should be globally unique, e.g. `Id::new("my_panel")`. - pub fn new(side: Side, id: impl Into) -> Self { + pub fn new(side: PanelSide, id: impl Into) -> Self { let default_size: Option = match side { - Side::Vertical(_) => Some(200.0), - Side::Horizontal(_) => None, + PanelSide::Vertical(_) => Some(200.0), + PanelSide::Horizontal(_) => None, }; let size_range: Rangef = match side { - Side::Vertical(_) => Rangef::new(96.0, f32::INFINITY), - Side::Horizontal(_) => Rangef::new(20.0, f32::INFINITY), + PanelSide::Vertical(_) => Rangef::new(96.0, f32::INFINITY), + PanelSide::Horizontal(_) => Rangef::new(20.0, f32::INFINITY), }; Self { @@ -567,11 +567,11 @@ impl Panel { panel_sizer.panel_rect = panel_sizer.panel_rect.round_ui(); let get_ui_kind = || match side { - Side::Vertical(v_side) => match v_side { + PanelSide::Vertical(v_side) => match v_side { VerticalSide::Left => UiKind::LeftPanel, VerticalSide::Right => UiKind::RightPanel, }, - Side::Horizontal(h_side) => match h_side { + PanelSide::Horizontal(h_side) => match h_side { HorizontalSide::Top => UiKind::TopPanel, HorizontalSide::Bottom => UiKind::BottomPanel, }, @@ -589,13 +589,13 @@ impl Panel { let inner_response = panel_sizer.frame.show(&mut panel_ui, |ui| { match side { - Side::Vertical(_) => { + PanelSide::Vertical(_) => { ui.set_min_height(ui.max_rect().height()); // Make sure the frame fills the full height ui.set_min_width( (size_range.min - panel_sizer.frame.inner_margin.sum().x).at_least(0.0), ); } - Side::Horizontal(_) => { + PanelSide::Horizontal(_) => { ui.set_min_width(ui.max_rect().width()); // Make the frame fill full width ui.set_min_height( (size_range.min - panel_sizer.frame.inner_margin.sum().y).at_least(0.0), @@ -611,11 +611,11 @@ impl Panel { { let mut cursor = ui.cursor(); match side { - Side::Vertical(v_side) => match v_side { + PanelSide::Vertical(v_side) => match v_side { VerticalSide::Left => cursor.min.x = rect.max.x, VerticalSide::Right => cursor.max.x = rect.min.x, }, - Side::Horizontal(h_side) => match h_side { + PanelSide::Horizontal(h_side) => match h_side { HorizontalSide::Top => cursor.min.y = rect.max.y, HorizontalSide::Bottom => cursor.max.y = rect.min.y, }, @@ -655,11 +655,11 @@ impl Panel { let resize_axe = side.opposite().side_axe(rect); let resize_axe = resize_axe + 0.5 * side.sign() * stroke.width; match side { - Side::Vertical(_) => { + PanelSide::Vertical(_) => { ui.painter() .vline(resize_axe, panel_sizer.panel_rect.y_range(), stroke); } - Side::Horizontal(_) => { + PanelSide::Horizontal(_) => { ui.painter() .hline(panel_sizer.panel_rect.x_range(), resize_axe, stroke); } @@ -690,7 +690,7 @@ impl Panel { let rect = inner_response.response.rect; match side { - Side::Vertical(v_side) => match v_side { + PanelSide::Vertical(v_side) => match v_side { VerticalSide::Left => ctx.pass_state_mut(|state| { state.allocate_left_panel(Rect::from_min_max(available_rect.min, rect.max)); }), @@ -698,7 +698,7 @@ impl Panel { state.allocate_right_panel(Rect::from_min_max(rect.min, available_rect.max)); }), }, - Side::Horizontal(h_side) => match h_side { + PanelSide::Horizontal(h_side) => match h_side { HorizontalSide::Top => { ctx.pass_state_mut(|state| { state.allocate_top_panel(Rect::from_min_max(available_rect.min, rect.max)); @@ -734,7 +734,7 @@ impl Panel { fn resize_panel(&self, panel_sizer: &mut PanelSizer<'_>, ui: &mut Ui) -> (bool, bool) { let (resize_x, resize_y, amount): (Rangef, Rangef, Vec2) = match self.side { - Side::Vertical(_) => { + PanelSide::Vertical(_) => { let resize_x = self.side.opposite().side_axe(panel_sizer.panel_rect); let resize_y = panel_sizer.panel_rect.y_range(); ( @@ -743,7 +743,7 @@ impl Panel { vec2(ui.style().interaction.resize_grab_radius_side, 0.0), ) } - Side::Horizontal(_) => { + PanelSide::Horizontal(_) => { let resize_x = panel_sizer.panel_rect.x_range(); let resize_y = self.side.opposite().side_axe(panel_sizer.panel_rect); ( @@ -764,27 +764,27 @@ impl Panel { fn get_cursor_icon(&self, panel_sizer: &PanelSizer<'_>) -> CursorIcon { if panel_sizer.size <= self.size_range.min { match self.side { - Side::Vertical(v_side) => match v_side { + PanelSide::Vertical(v_side) => match v_side { VerticalSide::Left => CursorIcon::ResizeEast, VerticalSide::Right => CursorIcon::ResizeWest, }, - Side::Horizontal(h_side) => match h_side { + PanelSide::Horizontal(h_side) => match h_side { HorizontalSide::Top => CursorIcon::ResizeSouth, HorizontalSide::Bottom => CursorIcon::ResizeNorth, }, } } else if panel_sizer.size < self.size_range.max { match self.side { - Side::Vertical(_) => CursorIcon::ResizeHorizontal, - Side::Horizontal(_) => CursorIcon::ResizeVertical, + PanelSide::Vertical(_) => CursorIcon::ResizeHorizontal, + PanelSide::Horizontal(_) => CursorIcon::ResizeVertical, } } else { match self.side { - Side::Vertical(v_side) => match v_side { + PanelSide::Vertical(v_side) => match v_side { VerticalSide::Left => CursorIcon::ResizeWest, VerticalSide::Right => CursorIcon::ResizeEast, }, - Side::Horizontal(h_side) => match h_side { + PanelSide::Horizontal(h_side) => match h_side { HorizontalSide::Top => CursorIcon::ResizeNorth, HorizontalSide::Bottom => CursorIcon::ResizeSouth, }, @@ -848,13 +848,13 @@ impl Panel { fn get_animated_size(ctx: &Context, panel: &Panel) -> f32 { let get_rect_state_size = |state: PanelState| match panel.side { - Side::Vertical(_) => state.rect.width(), - Side::Horizontal(_) => state.rect.height(), + PanelSide::Vertical(_) => state.rect.width(), + PanelSide::Horizontal(_) => state.rect.height(), }; let get_spacing_size = || match panel.side { - Side::Vertical(_) => ctx.style().spacing.interact_size.x, - Side::Horizontal(_) => ctx.style().spacing.interact_size.y, + PanelSide::Vertical(_) => ctx.style().spacing.interact_size.x, + PanelSide::Horizontal(_) => ctx.style().spacing.interact_size.y, }; PanelState::load(ctx, panel.id) diff --git a/crates/egui_demo_app/src/apps/image_viewer.rs b/crates/egui_demo_app/src/apps/image_viewer.rs index 001860c64..c75e8c686 100644 --- a/crates/egui_demo_app/src/apps/image_viewer.rs +++ b/crates/egui_demo_app/src/apps/image_viewer.rs @@ -1,6 +1,6 @@ use egui::emath::Rot2; use egui::panel::HorizontalSide; -use egui::panel::Side; +use egui::panel::PanelSide; use egui::panel::VerticalSide; use egui::ImageFit; use egui::Slider; @@ -53,7 +53,7 @@ impl Default for ImageViewer { impl eframe::App for ImageViewer { fn update(&mut self, ctx: &egui::Context, _: &mut eframe::Frame) { - egui::Panel::new(Side::Horizontal(HorizontalSide::Top), "url bar").show( + egui::Panel::new(PanelSide::Horizontal(HorizontalSide::Top), "url bar").show( ctx, |ui| { ui.horizontal_centered(|ui| { @@ -77,7 +77,7 @@ impl eframe::App for ImageViewer { }, ); - egui::Panel::new(Side::Vertical(VerticalSide::Left), "controls").show(ctx, |ui| { + egui::Panel::new(PanelSide::Vertical(VerticalSide::Left), "controls").show(ctx, |ui| { // uv ui.label("UV"); ui.add(Slider::new(&mut self.image_options.uv.min.x, 0.0..=1.0).text("min x"));