diff --git a/crates/eframe/src/epi.rs b/crates/eframe/src/epi.rs
index bc19951bf..a9ce726fe 100644
--- a/crates/eframe/src/epi.rs
+++ b/crates/eframe/src/epi.rs
@@ -2,7 +2,7 @@
//!
//! `epi` provides interfaces for window management and serialization.
//!
-//! Start by looking at the [`App`] trait, and implement [`App::update`].
+//! Start by looking at the [`App`] trait, and implement [`App::ui`].
#![warn(missing_docs)] // Let's keep `epi` well-documented.
@@ -161,22 +161,6 @@ pub trait App {
/// (A "viewport" in egui means an native OS window).
fn ui(&mut self, ui: &mut egui::Ui, frame: &mut Frame);
- /// Called each time the UI needs repainting, which may be many times per second.
- ///
- /// Put your widgets into a [`egui::Panel`], [`egui::CentralPanel`], [`egui::Window`] or [`egui::Area`].
- ///
- /// The [`egui::Context`] can be cloned and saved if you like.
- ///
- /// To force a repaint, call [`egui::Context::request_repaint`] at any time (e.g. from another thread).
- ///
- /// This is called for the root viewport ([`egui::ViewportId::ROOT`]).
- /// Use [`egui::Context::show_viewport_deferred`] to spawn additional viewports (windows).
- /// (A "viewport" in egui means an native OS window).
- #[deprecated = "Use Self::ui instead"]
- fn update(&mut self, ctx: &egui::Context, frame: &mut Frame) {
- _ = (ctx, frame);
- }
-
/// Get a handle to the app.
///
/// Can be used from web to interact or other external context.
@@ -256,7 +240,7 @@ pub trait App {
true
}
- /// A hook for manipulating or filtering raw input before it is processed by [`Self::update`].
+ /// A hook for manipulating or filtering raw input before it is processed by [`Self::ui`].
///
/// This function provides a way to modify or filter input events before they are processed by egui.
///
@@ -780,7 +764,7 @@ impl Frame {
/// * Read the pixel buffer from the previous frame (`glow::Context::read_pixels`).
/// * Render things behind the egui windows.
///
- /// Note that all egui painting is deferred to after the call to [`App::update`]
+ /// Note that all egui painting is deferred to after the call to [`App::ui`]
/// ([`egui`] only collects [`egui::Shape`]s and then eframe paints them all in one go later on).
///
/// To get a [`glow`] context you need to compile with the `glow` feature flag,
@@ -886,7 +870,7 @@ pub struct IntegrationInfo {
/// Seconds of cpu usage (in seconds) on the previous frame.
///
- /// This includes [`App::update`] as well as rendering (except for vsync waiting).
+ /// This includes [`App::ui`] as well as rendering (except for vsync waiting).
///
/// For a more detailed view of cpu usage, connect your preferred profiler by enabling it's feature in [`profiling`](https://crates.io/crates/profiling).
///
diff --git a/crates/eframe/src/lib.rs b/crates/eframe/src/lib.rs
index c644289e0..9f7a4f3ef 100644
--- a/crates/eframe/src/lib.rs
+++ b/crates/eframe/src/lib.rs
@@ -6,7 +6,7 @@
//! To get started, see the [examples](https://github.com/emilk/egui/tree/main/examples).
//! To learn how to set up `eframe` for web and native, go to and follow the instructions there!
//!
-//! In short, you implement [`App`] (especially [`App::update`]) and then
+//! In short, you implement [`App`] (especially [`App::ui`]) and then
//! call [`crate::run_native`] from your `main.rs`, and/or use `eframe::WebRunner` from your `lib.rs`.
//!
//! ## Compiling for web
@@ -19,7 +19,7 @@
//!
//! ## Simplified usage
//! If your app is only for native, and you don't need advanced features like state persistence,
-//! then you can use the simpler function [`run_simple_native`].
+//! then you can use the simpler function [`run_ui_native`].
//!
//! ## Usage, native:
//! ``` no_run
@@ -446,67 +446,6 @@ pub fn run_ui_native(
)
}
-/// The simplest way to get started when writing a native app.
-///
-/// This does NOT support persistence of custom user data. For that you need to use [`run_native`].
-/// However, it DOES support persistence of egui data (window positions and sizes, how far the user has scrolled in a
-/// [`ScrollArea`](egui::ScrollArea), etc.) if the persistence feature is enabled.
-///
-/// # Example
-/// ``` no_run
-/// fn main() -> eframe::Result {
-/// // Our application state:
-/// let mut name = "Arthur".to_owned();
-/// let mut age = 42;
-///
-/// let options = eframe::NativeOptions::default();
-/// eframe::run_simple_native("My egui App", options, move |ctx, _frame| {
-/// egui::CentralPanel::default().show(ctx, |ui| {
-/// ui.heading("My egui Application");
-/// ui.horizontal(|ui| {
-/// let name_label = ui.label("Your name: ");
-/// ui.text_edit_singleline(&mut name)
-/// .labelled_by(name_label.id);
-/// });
-/// ui.add(egui::Slider::new(&mut age, 0..=120).text("age"));
-/// if ui.button("Increment").clicked() {
-/// age += 1;
-/// }
-/// ui.label(format!("Hello '{name}', age {age}"));
-/// });
-/// })
-/// }
-/// ```
-///
-/// # Errors
-/// This function can fail if we fail to set up a graphics context.
-#[deprecated = "Use run_ui_native instead"]
-#[cfg(not(target_arch = "wasm32"))]
-#[cfg(any(feature = "glow", feature = "wgpu_no_default_features"))]
-pub fn run_simple_native(
- app_name: &str,
- native_options: NativeOptions,
- update_fun: impl FnMut(&egui::Context, &mut Frame) + 'static,
-) -> Result {
- struct SimpleApp {
- update_fun: U,
- }
-
- impl App for SimpleApp {
- fn ui(&mut self, _ui: &mut egui::Ui, _frame: &mut Frame) {}
-
- fn update(&mut self, ctx: &egui::Context, frame: &mut Frame) {
- (self.update_fun)(ctx, frame);
- }
- }
-
- run_native(
- app_name,
- native_options,
- Box::new(|_cc| Ok(Box::new(SimpleApp { update_fun }))),
- )
-}
-
// ----------------------------------------------------------------------------
/// The different problems that can occur when trying to run `eframe`.
diff --git a/crates/eframe/src/native/epi_integration.rs b/crates/eframe/src/native/epi_integration.rs
index 5b22eb08c..e558b0a2b 100644
--- a/crates/eframe/src/native/epi_integration.rs
+++ b/crates/eframe/src/native/epi_integration.rs
@@ -259,7 +259,7 @@ impl EpiIntegration {
/// Run user code - this can create immediate viewports, so hold no locks over this!
///
- /// If `viewport_ui_cb` is None, we are in the root viewport and will call [`crate::App::update`].
+ /// If `viewport_ui_cb` is None, we are in the root viewport and will call [`crate::App::ui`].
pub fn update(
&mut self,
app: &mut dyn epi::App,
@@ -287,12 +287,6 @@ impl EpiIntegration {
}
if is_visible {
- {
- profiling::scope!("App::update");
- #[expect(deprecated)]
- app.update(ui.ctx(), &mut self.frame);
- }
-
{
profiling::scope!("App::ui");
app.ui(ui, &mut self.frame);
diff --git a/crates/eframe/src/web/app_runner.rs b/crates/eframe/src/web/app_runner.rs
index 7161a665e..c15e78d68 100644
--- a/crates/eframe/src/web/app_runner.rs
+++ b/crates/eframe/src/web/app_runner.rs
@@ -284,9 +284,6 @@ impl AppRunner {
self.app.logic(ui.ctx(), &mut self.frame);
if is_visible {
- #[expect(deprecated)]
- self.app.update(ui.ctx(), &mut self.frame);
-
self.app.ui(ui, &mut self.frame);
}
});
diff --git a/crates/egui/src/containers/area.rs b/crates/egui/src/containers/area.rs
index d44c0ae41..09488058d 100644
--- a/crates/egui/src/containers/area.rs
+++ b/crates/egui/src/containers/area.rs
@@ -280,7 +280,7 @@ impl Area {
self
}
- /// Constrains this area to [`Context::screen_rect`]?
+ /// Constrains this area to [`Context::content_rect`]?
///
/// Default: `true`.
#[inline]
@@ -291,7 +291,7 @@ impl Area {
/// Constrain the movement of the window to the given rectangle.
///
- /// For instance: `.constrain_to(ctx.screen_rect())`.
+ /// For instance: `.constrain_to(ctx.content_rect())`.
#[inline]
pub fn constrain_to(mut self, constrain_rect: Rect) -> Self {
self.constrain = true;
diff --git a/crates/egui/src/containers/collapsing_header.rs b/crates/egui/src/containers/collapsing_header.rs
index aca8ab138..de3581288 100644
--- a/crates/egui/src/containers/collapsing_header.rs
+++ b/crates/egui/src/containers/collapsing_header.rs
@@ -451,15 +451,6 @@ impl CollapsingHeader {
self
}
- /// Explicitly set the source of the [`Id`] of this widget, instead of using title label.
- /// This is useful if the title label is dynamic or not unique.
- #[deprecated = "Renamed id_salt"]
- #[inline]
- pub fn id_source(mut self, id_salt: impl Hash) -> Self {
- self.id_salt = Id::new(id_salt);
- self
- }
-
/// If you set this to `false`, the [`CollapsingHeader`] will be grayed out and un-clickable.
///
/// This is a convenience for [`Ui::disable`].
diff --git a/crates/egui/src/containers/combo_box.rs b/crates/egui/src/containers/combo_box.rs
index c4097f803..adbda583c 100644
--- a/crates/egui/src/containers/combo_box.rs
+++ b/crates/egui/src/containers/combo_box.rs
@@ -94,12 +94,6 @@ impl ComboBox {
}
}
- /// Without label.
- #[deprecated = "Renamed from_id_salt"]
- pub fn from_id_source(id_salt: impl std::hash::Hash) -> Self {
- Self::from_id_salt(id_salt)
- }
-
/// Set the outer width of the button and menu.
///
/// Default is [`Spacing::combo_width`].
diff --git a/crates/egui/src/containers/frame.rs b/crates/egui/src/containers/frame.rs
index d556f827e..5bbce626d 100644
--- a/crates/egui/src/containers/frame.rs
+++ b/crates/egui/src/containers/frame.rs
@@ -174,11 +174,6 @@ impl Frame {
Self::NONE
}
- #[deprecated = "Use `Frame::NONE` or `Frame::new()` instead."]
- pub const fn none() -> Self {
- Self::NONE
- }
-
/// For when you want to group a few widgets together within a frame.
pub fn group(style: &Style) -> Self {
Self::new()
@@ -283,16 +278,6 @@ impl Frame {
self
}
- /// The rounding of the _outer_ corner of the [`Self::stroke`]
- /// (or, if there is no stroke, the outer corner of [`Self::fill`]).
- ///
- /// In other words, this is the corner radius of the _widget rect_.
- #[inline]
- #[deprecated = "Renamed to `corner_radius`"]
- pub fn rounding(self, corner_radius: impl Into) -> Self {
- self.corner_radius(corner_radius)
- }
-
/// Margin outside the painted frame.
///
/// Similar to what is called `margin` in CSS.
diff --git a/crates/egui/src/containers/menu.rs b/crates/egui/src/containers/menu.rs
index cfdaac827..d4c95b298 100644
--- a/crates/egui/src/containers/menu.rs
+++ b/crates/egui/src/containers/menu.rs
@@ -197,7 +197,7 @@ impl MenuState {
/// Horizontal menu bar where you can add [`MenuButton`]s.
///
-/// The menu bar goes well in a [`crate::TopBottomPanel::top`],
+/// The menu bar goes well in a [`crate::Panel::top`],
/// but can also be placed in a [`crate::Window`].
/// In the latter case you may want to wrap it in [`Frame`].
///
@@ -219,9 +219,6 @@ pub struct MenuBar {
style: StyleModifier,
}
-#[deprecated = "Renamed to `egui::MenuBar`"]
-pub type Bar = MenuBar;
-
impl Default for MenuBar {
fn default() -> Self {
Self {
diff --git a/crates/egui/src/containers/mod.rs b/crates/egui/src/containers/mod.rs
index a8f3306e9..d828ce0f8 100644
--- a/crates/egui/src/containers/mod.rs
+++ b/crates/egui/src/containers/mod.rs
@@ -9,7 +9,6 @@ mod combo_box;
pub mod frame;
pub mod menu;
pub mod modal;
-pub mod old_popup;
pub mod panel;
mod popup;
pub(crate) mod resize;
@@ -26,7 +25,6 @@ pub use {
combo_box::*,
frame::Frame,
modal::{Modal, ModalResponse},
- old_popup::*,
panel::*,
popup::*,
resize::Resize,
diff --git a/crates/egui/src/containers/old_popup.rs b/crates/egui/src/containers/old_popup.rs
deleted file mode 100644
index f8e7cc900..000000000
--- a/crates/egui/src/containers/old_popup.rs
+++ /dev/null
@@ -1,212 +0,0 @@
-//! Old and deprecated API for popups. Use [`Popup`] instead.
-#![expect(deprecated)]
-
-use crate::containers::tooltip::Tooltip;
-use crate::{
- Align, Context, Id, LayerId, Layout, Popup, PopupAnchor, PopupCloseBehavior, Pos2, Rect,
- Response, Ui, Widget as _, WidgetText,
-};
-use emath::RectAlign;
-// ----------------------------------------------------------------------------
-
-/// Show a tooltip at the current pointer position (if any).
-///
-/// Most of the time it is easier to use [`Response::on_hover_ui`].
-///
-/// See also [`show_tooltip_text`].
-///
-/// Returns `None` if the tooltip could not be placed.
-///
-/// ```
-/// # egui::__run_test_ui(|ui| {
-/// # #[expect(deprecated)]
-/// if ui.ui_contains_pointer() {
-/// egui::show_tooltip(ui.ctx(), ui.layer_id(), egui::Id::new("my_tooltip"), |ui| {
-/// ui.label("Helpful text");
-/// });
-/// }
-/// # });
-/// ```
-#[deprecated = "Use `egui::Tooltip` instead"]
-pub fn show_tooltip(
- ctx: &Context,
- parent_layer: LayerId,
- widget_id: Id,
- add_contents: impl FnOnce(&mut Ui) -> R,
-) -> Option {
- show_tooltip_at_pointer(ctx, parent_layer, widget_id, add_contents)
-}
-
-/// Show a tooltip at the current pointer position (if any).
-///
-/// Most of the time it is easier to use [`Response::on_hover_ui`].
-///
-/// See also [`show_tooltip_text`].
-///
-/// Returns `None` if the tooltip could not be placed.
-///
-/// ```
-/// # egui::__run_test_ui(|ui| {
-/// if ui.ui_contains_pointer() {
-/// egui::show_tooltip_at_pointer(ui.ctx(), ui.layer_id(), egui::Id::new("my_tooltip"), |ui| {
-/// ui.label("Helpful text");
-/// });
-/// }
-/// # });
-/// ```
-#[deprecated = "Use `egui::Tooltip` instead"]
-pub fn show_tooltip_at_pointer(
- ctx: &Context,
- parent_layer: LayerId,
- widget_id: Id,
- add_contents: impl FnOnce(&mut Ui) -> R,
-) -> Option {
- Tooltip::always_open(ctx.clone(), parent_layer, widget_id, PopupAnchor::Pointer)
- .gap(12.0)
- .show(add_contents)
- .map(|response| response.inner)
-}
-
-/// Show a tooltip under the given area.
-///
-/// If the tooltip does not fit under the area, it tries to place it above it instead.
-#[deprecated = "Use `egui::Tooltip` instead"]
-pub fn show_tooltip_for(
- ctx: &Context,
- parent_layer: LayerId,
- widget_id: Id,
- widget_rect: &Rect,
- add_contents: impl FnOnce(&mut Ui) -> R,
-) -> Option {
- Tooltip::always_open(ctx.clone(), parent_layer, widget_id, *widget_rect)
- .show(add_contents)
- .map(|response| response.inner)
-}
-
-/// Show a tooltip at the given position.
-///
-/// Returns `None` if the tooltip could not be placed.
-#[deprecated = "Use `egui::Tooltip` instead"]
-pub fn show_tooltip_at(
- ctx: &Context,
- parent_layer: LayerId,
- widget_id: Id,
- suggested_position: Pos2,
- add_contents: impl FnOnce(&mut Ui) -> R,
-) -> Option {
- Tooltip::always_open(ctx.clone(), parent_layer, widget_id, suggested_position)
- .show(add_contents)
- .map(|response| response.inner)
-}
-
-/// Show some text at the current pointer position (if any).
-///
-/// Most of the time it is easier to use [`Response::on_hover_text`].
-///
-/// See also [`show_tooltip`].
-///
-/// Returns `None` if the tooltip could not be placed.
-///
-/// ```
-/// # egui::__run_test_ui(|ui| {
-/// if ui.ui_contains_pointer() {
-/// egui::show_tooltip_text(ui.ctx(), ui.layer_id(), egui::Id::new("my_tooltip"), "Helpful text");
-/// }
-/// # });
-/// ```
-#[deprecated = "Use `egui::Tooltip` instead"]
-pub fn show_tooltip_text(
- ctx: &Context,
- parent_layer: LayerId,
- widget_id: Id,
- text: impl Into,
-) -> Option<()> {
- show_tooltip(ctx, parent_layer, widget_id, |ui| {
- crate::widgets::Label::new(text).ui(ui);
- })
-}
-
-/// Was this tooltip visible last frame?
-#[deprecated = "Use `Tooltip::was_tooltip_open_last_frame` instead"]
-pub fn was_tooltip_open_last_frame(ctx: &Context, widget_id: Id) -> bool {
- Tooltip::was_tooltip_open_last_frame(ctx, widget_id)
-}
-
-/// Indicate whether a popup will be shown above or below the box.
-#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
-pub enum AboveOrBelow {
- Above,
- Below,
-}
-
-/// Helper for [`popup_above_or_below_widget`].
-#[deprecated = "Use `egui::Popup` instead"]
-pub fn popup_below_widget(
- ui: &Ui,
- popup_id: Id,
- widget_response: &Response,
- close_behavior: PopupCloseBehavior,
- add_contents: impl FnOnce(&mut Ui) -> R,
-) -> Option {
- popup_above_or_below_widget(
- ui,
- popup_id,
- widget_response,
- AboveOrBelow::Below,
- close_behavior,
- add_contents,
- )
-}
-
-/// Shows a popup above or below another widget.
-///
-/// Useful for drop-down menus (combo boxes) or suggestion menus under text fields.
-///
-/// The opened popup will have a minimum width matching its parent.
-///
-/// You must open the popup with [`crate::Memory::open_popup`] or [`crate::Memory::toggle_popup`].
-///
-/// Returns `None` if the popup is not open.
-///
-/// ```
-/// # egui::__run_test_ui(|ui| {
-/// let response = ui.button("Open popup");
-/// let popup_id = ui.make_persistent_id("my_unique_id");
-/// if response.clicked() {
-/// ui.memory_mut(|mem| mem.toggle_popup(popup_id));
-/// }
-/// let below = egui::AboveOrBelow::Below;
-/// let close_on_click_outside = egui::PopupCloseBehavior::CloseOnClickOutside;
-/// # #[expect(deprecated)]
-/// egui::popup_above_or_below_widget(ui, popup_id, &response, below, close_on_click_outside, |ui| {
-/// ui.set_min_width(200.0); // if you want to control the size
-/// ui.label("Some more info, or things you can select:");
-/// ui.label("…");
-/// });
-/// # });
-/// ```
-#[deprecated = "Use `egui::Popup` instead"]
-pub fn popup_above_or_below_widget(
- _parent_ui: &Ui,
- popup_id: Id,
- widget_response: &Response,
- above_or_below: AboveOrBelow,
- close_behavior: PopupCloseBehavior,
- add_contents: impl FnOnce(&mut Ui) -> R,
-) -> Option {
- let response = Popup::from_response(widget_response)
- .layout(Layout::top_down_justified(Align::LEFT))
- .open_memory(None)
- .close_behavior(close_behavior)
- .id(popup_id)
- .align(match above_or_below {
- AboveOrBelow::Above => RectAlign::TOP_START,
- AboveOrBelow::Below => RectAlign::BOTTOM_START,
- })
- .width(widget_response.rect.width())
- .show(|ui| {
- ui.set_min_width(ui.available_width());
- add_contents(ui)
- })?;
- Some(response.inner)
-}
diff --git a/crates/egui/src/containers/panel.rs b/crates/egui/src/containers/panel.rs
index 4a83ce8d1..d75a90bf4 100644
--- a/crates/egui/src/containers/panel.rs
+++ b/crates/egui/src/containers/panel.rs
@@ -18,9 +18,8 @@
use emath::{GuiRounding as _, Pos2};
use crate::{
- Align, Context, CursorIcon, Frame, Id, InnerResponse, LayerId, Layout, NumExt as _, Rangef,
- Rect, Sense, Stroke, Ui, UiBuilder, UiKind, UiStackInfo, Vec2, WidgetInfo, WidgetType, lerp,
- vec2,
+ Align, Context, CursorIcon, Frame, Id, InnerResponse, Layout, NumExt as _, Rangef, Rect, Sense,
+ Stroke, Ui, UiBuilder, UiKind, UiStackInfo, Vec2, lerp, vec2,
};
fn animate_expansion(ctx: &Context, id: Id, is_expanded: bool) -> f32 {
@@ -451,59 +450,6 @@ impl Panel {
}
}
-// Deprecated
-impl Panel {
- #[deprecated = "Renamed default_size"]
- pub fn default_width(self, default_size: f32) -> Self {
- self.default_size(default_size)
- }
-
- #[deprecated = "Renamed min_size"]
- pub fn min_width(self, min_size: f32) -> Self {
- self.min_size(min_size)
- }
-
- #[deprecated = "Renamed max_size"]
- pub fn max_width(self, max_size: f32) -> Self {
- self.max_size(max_size)
- }
-
- #[deprecated = "Renamed size_range"]
- pub fn width_range(self, size_range: impl Into) -> Self {
- self.size_range(size_range)
- }
-
- #[deprecated = "Renamed exact_size"]
- pub fn exact_width(self, size: f32) -> Self {
- self.exact_size(size)
- }
-
- #[deprecated = "Renamed default_size"]
- pub fn default_height(self, default_size: f32) -> Self {
- self.default_size(default_size)
- }
-
- #[deprecated = "Renamed min_size"]
- pub fn min_height(self, min_size: f32) -> Self {
- self.min_size(min_size)
- }
-
- #[deprecated = "Renamed max_size"]
- pub fn max_height(self, max_size: f32) -> Self {
- self.max_size(max_size)
- }
-
- #[deprecated = "Renamed size_range"]
- pub fn height_range(self, size_range: impl Into) -> Self {
- self.size_range(size_range)
- }
-
- #[deprecated = "Renamed exact_size"]
- pub fn exact_height(self, size: f32) -> Self {
- self.exact_size(size)
- }
-}
-
// Public showing methods
impl Panel {
/// Show the panel inside a [`Ui`].
@@ -515,41 +461,6 @@ impl Panel {
self.show_inside_dyn(ui, Box::new(add_contents))
}
- /// Show the panel at the top level.
- #[deprecated = "Use show_inside() instead"]
- pub fn show(
- self,
- ctx: &Context,
- add_contents: impl FnOnce(&mut Ui) -> R,
- ) -> InnerResponse {
- self.show_dyn(ctx, Box::new(add_contents))
- }
-
- /// Show the panel if `is_expanded` is `true`,
- /// otherwise don't show it, but with a nice animation between collapsed and expanded.
- #[deprecated = "Use show_animated_inside() instead"]
- pub fn show_animated(
- self,
- ctx: &Context,
- is_expanded: bool,
- add_contents: impl FnOnce(&mut Ui) -> R,
- ) -> Option> {
- #![expect(deprecated)]
-
- let how_expanded = animate_expansion(ctx, self.id.with("animation"), is_expanded);
-
- let animated_panel = self.get_animated_panel(ctx, is_expanded)?;
-
- if how_expanded < 1.0 {
- // Show a fake panel in this in-between animation state:
- animated_panel.show(ctx, |_ui| {});
- None
- } else {
- // Show the real panel:
- Some(animated_panel.show(ctx, add_contents))
- }
- }
-
/// Show the panel if `is_expanded` is `true`,
/// otherwise don't show it, but with a nice animation between collapsed and expanded.
pub fn show_animated_inside(
@@ -577,34 +488,6 @@ impl Panel {
}
}
- /// Show either a collapsed or a expanded panel, with a nice animation between.
- #[deprecated = "Use show_animated_between_inside() instead"]
- pub fn show_animated_between(
- ctx: &Context,
- is_expanded: bool,
- collapsed_panel: Self,
- expanded_panel: Self,
- add_contents: impl FnOnce(&mut Ui, f32) -> R,
- ) -> Option> {
- #![expect(deprecated)]
-
- let how_expanded = animate_expansion(ctx, expanded_panel.id.with("animation"), is_expanded);
-
- // Get either the fake or the real panel to animate
- let animated_between_panel =
- Self::get_animated_between_panel(ctx, is_expanded, collapsed_panel, expanded_panel);
-
- if 0.0 == how_expanded {
- Some(animated_between_panel.show(ctx, |ui| add_contents(ui, how_expanded)))
- } else if how_expanded < 1.0 {
- // Show animation:
- animated_between_panel.show(ctx, |ui| add_contents(ui, how_expanded));
- None
- } else {
- Some(animated_between_panel.show(ctx, |ui| add_contents(ui, how_expanded)))
- }
- }
-
/// Show either a collapsed or a expanded panel, with a nice animation between.
pub fn show_animated_between_inside(
ui: &mut Ui,
@@ -756,59 +639,6 @@ impl Panel {
inner_response
}
- /// Show the panel at the top level.
- fn show_dyn<'c, R>(
- self,
- ctx: &Context,
- add_contents: Box R + 'c>,
- ) -> InnerResponse {
- #![expect(deprecated)]
-
- let side = self.side;
- let available_rect = ctx.available_rect();
- let mut panel_ui = Ui::new(
- ctx.clone(),
- self.id,
- UiBuilder::new()
- .layer_id(LayerId::background())
- .max_rect(available_rect),
- );
- panel_ui.set_clip_rect(ctx.content_rect());
- panel_ui
- .response()
- .widget_info(|| WidgetInfo::new(WidgetType::Panel));
-
- let inner_response = self.show_inside_dyn(&mut panel_ui, add_contents);
- let rect = inner_response.response.rect;
-
- match side {
- PanelSide::Vertical(side) => match side {
- VerticalSide::Left => ctx.pass_state_mut(|state| {
- state.allocate_left_panel(Rect::from_min_max(available_rect.min, rect.max));
- }),
- VerticalSide::Right => ctx.pass_state_mut(|state| {
- state.allocate_right_panel(Rect::from_min_max(rect.min, available_rect.max));
- }),
- },
- PanelSide::Horizontal(side) => match side {
- HorizontalSide::Top => {
- ctx.pass_state_mut(|state| {
- state.allocate_top_panel(Rect::from_min_max(available_rect.min, rect.max));
- });
- }
- HorizontalSide::Bottom => {
- ctx.pass_state_mut(|state| {
- state.allocate_bottom_panel(Rect::from_min_max(
- rect.min,
- available_rect.max,
- ));
- });
- }
- },
- }
- inner_response
- }
-
fn prepare_resizable_panel(&self, panel_sizer: &mut PanelSizer<'_>, ui: &Ui) {
let resize_id = self.id.with("__resize");
let resize_response = ui.ctx().read_response(resize_id);
@@ -1044,61 +874,9 @@ impl CentralPanel {
response
}
-
- /// Show the panel at the top level.
- #[deprecated = "Use show_inside() instead"]
- pub fn show(
- self,
- ctx: &Context,
- add_contents: impl FnOnce(&mut Ui) -> R,
- ) -> InnerResponse {
- self.show_dyn(ctx, Box::new(add_contents))
- }
-
- /// Show the panel at the top level.
- fn show_dyn<'c, R>(
- self,
- ctx: &Context,
- add_contents: Box R + 'c>,
- ) -> InnerResponse {
- #![expect(deprecated)]
-
- let id = Id::new((ctx.viewport_id(), "central_panel"));
-
- let mut panel_ui = Ui::new(
- ctx.clone(),
- id,
- UiBuilder::new()
- .layer_id(LayerId::background())
- .max_rect(ctx.available_rect()),
- );
- panel_ui.set_clip_rect(ctx.content_rect());
-
- if false {
- // TODO(emilk): @lucasmerlin shouldn't we enable this?
- panel_ui
- .response()
- .widget_info(|| WidgetInfo::new(WidgetType::Panel));
- }
-
- let inner_response = self.show_inside_dyn(&mut panel_ui, add_contents);
-
- // Only inform ctx about what we actually used, so we can shrink the native window to fit.
- ctx.pass_state_mut(|state| state.allocate_central_panel(inner_response.response.rect));
-
- inner_response
- }
}
fn clamp_to_range(x: f32, range: Rangef) -> f32 {
let range = range.as_positive();
x.clamp(range.min, range.max)
}
-
-// ----------------------------------------------------------------------------
-
-#[deprecated = "Use Panel::left or Panel::right instead"]
-pub type SidePanel = super::Panel;
-
-#[deprecated = "Use Panel::top or Panel::bottom instead"]
-pub type TopBottomPanel = super::Panel;
diff --git a/crates/egui/src/containers/popup.rs b/crates/egui/src/containers/popup.rs
index 0fb2a9f2a..cf78a6650 100644
--- a/crates/egui/src/containers/popup.rs
+++ b/crates/egui/src/containers/popup.rs
@@ -1,5 +1,3 @@
-#![expect(deprecated)] // This is a new, safe wrapper around the old `Memory::popup` API.
-
use std::iter::once;
use emath::{Align, Pos2, Rect, RectAlign, Vec2, vec2};
@@ -87,7 +85,7 @@ pub enum PopupCloseBehavior {
/// but in the popup's body
CloseOnClickOutside,
- /// Clicks will be ignored. Popup might be closed manually by calling [`crate::Memory::close_all_popups`]
+ /// Clicks will be ignored. Popup might be closed manually by calling [`Popup::close_all`]
/// or by pressing the escape button
IgnoreClicks,
}
@@ -666,10 +664,6 @@ impl Popup<'_> {
}
/// Open the given popup and close all others.
- ///
- /// If you are NOT using [`Popup::show`], you must
- /// also call [`crate::Memory::keep_popup_open`] as long as
- /// you're showing the popup.
pub fn open_id(ctx: &Context, popup_id: Id) {
ctx.memory_mut(|mem| mem.open_popup(popup_id));
}
diff --git a/crates/egui/src/containers/resize.rs b/crates/egui/src/containers/resize.rs
index 7ff943b3f..8dcce6b20 100644
--- a/crates/egui/src/containers/resize.rs
+++ b/crates/egui/src/containers/resize.rs
@@ -69,13 +69,6 @@ impl Resize {
self
}
- /// A source for the unique [`Id`], e.g. `.id_source("second_resize_area")` or `.id_source(loop_index)`.
- #[inline]
- #[deprecated = "Renamed id_salt"]
- pub fn id_source(self, id_salt: impl std::hash::Hash) -> Self {
- self.id_salt(id_salt)
- }
-
/// A source for the unique [`Id`], e.g. `.id_salt("second_resize_area")` or `.id_salt(loop_index)`.
#[inline]
pub fn id_salt(mut self, id_salt: impl std::hash::Hash) -> Self {
diff --git a/crates/egui/src/containers/scroll_area.rs b/crates/egui/src/containers/scroll_area.rs
index b99bcf5da..c0c29a9ab 100644
--- a/crates/egui/src/containers/scroll_area.rs
+++ b/crates/egui/src/containers/scroll_area.rs
@@ -423,13 +423,6 @@ impl ScrollArea {
self
}
- /// A source for the unique [`Id`], e.g. `.id_source("second_scroll_area")` or `.id_source(loop_index)`.
- #[inline]
- #[deprecated = "Renamed id_salt"]
- pub fn id_source(self, id_salt: impl std::hash::Hash) -> Self {
- self.id_salt(id_salt)
- }
-
/// A source for the unique [`Id`], e.g. `.id_salt("second_scroll_area")` or `.id_salt(loop_index)`.
#[inline]
pub fn id_salt(mut self, id_salt: impl std::hash::Hash) -> Self {
@@ -530,32 +523,6 @@ impl ScrollArea {
/// This can be used, for example, to optionally freeze scrolling while the user
/// is typing text in a [`crate::TextEdit`] widget contained within the scroll area.
///
- /// This controls both scrolling directions.
- #[deprecated = "Use `ScrollArea::scroll_source()"]
- #[inline]
- pub fn enable_scrolling(mut self, enable: bool) -> Self {
- self.scroll_source = if enable {
- ScrollSource::ALL
- } else {
- ScrollSource::NONE
- };
- self
- }
-
- /// Can the user drag the scroll area to scroll?
- ///
- /// This is useful for touch screens.
- ///
- /// If `true`, the [`ScrollArea`] will sense drags.
- ///
- /// Default: `true`.
- #[deprecated = "Use `ScrollArea::scroll_source()"]
- #[inline]
- pub fn drag_to_scroll(mut self, drag_to_scroll: bool) -> Self {
- self.scroll_source.drag = drag_to_scroll;
- self
- }
-
/// What sources does the [`ScrollArea`] use for scrolling the contents.
#[inline]
pub fn scroll_source(mut self, scroll_source: ScrollSource) -> Self {
diff --git a/crates/egui/src/containers/tooltip.rs b/crates/egui/src/containers/tooltip.rs
index 78c5a726b..22c319569 100644
--- a/crates/egui/src/containers/tooltip.rs
+++ b/crates/egui/src/containers/tooltip.rs
@@ -16,24 +16,6 @@ pub struct Tooltip<'a> {
}
impl Tooltip<'_> {
- /// Show a tooltip that is always open.
- #[deprecated = "Use `Tooltip::always_open` instead."]
- pub fn new(
- parent_widget: Id,
- ctx: Context,
- anchor: impl Into,
- parent_layer: LayerId,
- ) -> Self {
- Self {
- popup: Popup::new(parent_widget, ctx, anchor.into(), parent_layer)
- .kind(PopupKind::Tooltip)
- .gap(4.0)
- .sense(Sense::hover()),
- parent_layer,
- parent_widget,
- }
- }
-
/// Show a tooltip that is always open.
pub fn always_open(
ctx: Context,
diff --git a/crates/egui/src/containers/window.rs b/crates/egui/src/containers/window.rs
index 5ade37014..9f25d6131 100644
--- a/crates/egui/src/containers/window.rs
+++ b/crates/egui/src/containers/window.rs
@@ -262,7 +262,7 @@ impl<'open> Window<'open> {
self
}
- /// Constrains this window to [`Context::screen_rect`].
+ /// Constrains this window to [`Context::content_rect`].
///
/// To change the area to constrain to, use [`Self::constrain_to`].
///
@@ -275,7 +275,7 @@ impl<'open> Window<'open> {
/// Constrain the movement of the window to the given rectangle.
///
- /// For instance: `.constrain_to(ctx.screen_rect())`.
+ /// For instance: `.constrain_to(ctx.content_rect())`.
#[inline]
pub fn constrain_to(mut self, constrain_rect: Rect) -> Self {
self.area = self.area.constrain_to(constrain_rect);
@@ -427,7 +427,7 @@ impl<'open> Window<'open> {
/// Enable/disable scrolling on the window by dragging with the pointer. `true` by default.
///
- /// See [`ScrollArea::drag_to_scroll`] for more.
+ /// See [`ScrollArea::scroll_source`] for more.
#[inline]
pub fn drag_to_scroll(mut self, drag_to_scroll: bool) -> Self {
self.scroll = self.scroll.scroll_source(ScrollSource {
diff --git a/crates/egui/src/context.rs b/crates/egui/src/context.rs
index 433446648..d348517ef 100644
--- a/crates/egui/src/context.rs
+++ b/crates/egui/src/context.rs
@@ -300,7 +300,7 @@ impl RepaintCause {
struct ViewportRepaintInfo {
/// Monotonically increasing counter.
///
- /// Incremented at the end of [`Context::run`].
+ /// Incremented at the end of [`Context::run_ui`].
/// This can be smaller than [`Self::cumulative_pass_nr`],
/// but never larger.
cumulative_frame_nr: u64,
@@ -463,7 +463,7 @@ impl ContextImpl {
let content_rect = viewport.input.content_rect();
- viewport.this_pass.begin_pass(content_rect);
+ viewport.this_pass.begin_pass();
{
let mut layers: Vec = viewport.prev_pass.widgets.layer_ids().collect();
@@ -697,8 +697,8 @@ impl ContextImpl {
/// // Game loop:
/// loop {
/// let raw_input = egui::RawInput::default();
-/// let full_output = ctx.run(raw_input, |ctx| {
-/// egui::CentralPanel::default().show(&ctx, |ui| {
+/// let full_output = ctx.run_ui(raw_input, |ui| {
+/// egui::CentralPanel::default().show_inside(ui, |ui| {
/// ui.label("Hello world!");
/// if ui.button("Click me").clicked() {
/// // take some action here
@@ -780,9 +780,6 @@ impl Context {
/// });
/// // handle full_output
/// ```
- ///
- /// ## See also
- /// * [`Self::run`]
#[must_use]
pub fn run_ui(&self, new_input: RawInput, mut run_ui: impl FnMut(&mut Ui)) -> FullOutput {
self.run_ui_dyn(new_input, &mut run_ui)
@@ -791,14 +788,13 @@ impl Context {
#[must_use]
fn run_ui_dyn(&self, new_input: RawInput, run_ui: &mut dyn FnMut(&mut Ui)) -> FullOutput {
let plugins = self.read(|ctx| ctx.plugins.ordered_plugins());
- #[expect(deprecated)]
- self.run(new_input, |ctx| {
+ self.run_dyn(new_input, &mut |ctx| {
let mut root_ui = Ui::new(
ctx.clone(),
Id::new((ctx.viewport_id(), "__top_ui")),
UiBuilder::new()
.layer_id(LayerId::background())
- .max_rect(ctx.available_rect()),
+ .max_rect(ctx.viewport_rect()),
);
{
@@ -814,38 +810,6 @@ impl Context {
})
}
- /// Run the ui code for one frame.
- ///
- /// At most [`Options::max_passes`] calls will be issued to `run_ui`,
- /// and only on the rare occasion that [`Context::request_discard`] is called.
- /// Usually, it `run_ui` will only be called once.
- ///
- /// Put your widgets into a [`crate::Panel`], [`crate::CentralPanel`], [`crate::Window`] or [`crate::Area`].
- ///
- /// Instead of calling `run`, you can alternatively use [`Self::begin_pass`] and [`Context::end_pass`].
- ///
- /// ```
- /// // One egui context that you keep reusing:
- /// let mut ctx = egui::Context::default();
- ///
- /// // Each frame:
- /// let input = egui::RawInput::default();
- /// let full_output = ctx.run(input, |ctx| {
- /// egui::CentralPanel::default().show(&ctx, |ui| {
- /// ui.label("Hello egui!");
- /// });
- /// });
- /// // handle full_output
- /// ```
- ///
- /// ## See also
- /// * [`Self::run_ui`]
- #[must_use]
- #[deprecated = "Call run_ui instead"]
- pub fn run(&self, new_input: RawInput, mut run_ui: impl FnMut(&Self)) -> FullOutput {
- self.run_dyn(new_input, &mut run_ui)
- }
-
#[must_use]
fn run_dyn(&self, mut new_input: RawInput, run_ui: &mut dyn FnMut(&Self)) -> FullOutput {
profiling::function_scope!();
@@ -915,10 +879,10 @@ impl Context {
output
}
- /// An alternative to calling [`Self::run`].
+ /// An alternative to calling [`Self::run_ui`].
///
- /// It is usually better to use [`Self::run`], because
- /// `run` supports multi-pass layout using [`Self::request_discard`].
+ /// It is usually better to use [`Self::run_ui`], because
+ /// `run_ui` supports multi-pass layout using [`Self::request_discard`].
///
/// ```
/// // One egui context that you keep reusing:
@@ -928,9 +892,7 @@ impl Context {
/// let input = egui::RawInput::default();
/// ctx.begin_pass(input);
///
- /// egui::CentralPanel::default().show(&ctx, |ui| {
- /// ui.label("Hello egui!");
- /// });
+ /// // … add panels and windows here …
///
/// let full_output = ctx.end_pass();
/// // handle full_output
@@ -943,12 +905,6 @@ impl Context {
self.write(|ctx| ctx.begin_pass(new_input));
}
-
- /// See [`Self::begin_pass`].
- #[deprecated = "Renamed begin_pass"]
- pub fn begin_frame(&self, new_input: RawInput) {
- self.begin_pass(new_input);
- }
}
/// ## Borrows parts of [`Context`]
@@ -1049,7 +1005,7 @@ impl Context {
/// Read-only access to [`PassState`].
///
- /// This is only valid during the call to [`Self::run`] (between [`Self::begin_pass`] and [`Self::end_pass`]).
+ /// This is only valid during the call to [`Self::run_ui`] (between [`Self::begin_pass`] and [`Self::end_pass`]).
#[inline]
pub(crate) fn pass_state(&self, reader: impl FnOnce(&PassState) -> R) -> R {
self.write(move |ctx| reader(&ctx.viewport().this_pass))
@@ -1057,7 +1013,7 @@ impl Context {
/// Read-write access to [`PassState`].
///
- /// This is only valid during the call to [`Self::run`] (between [`Self::begin_pass`] and [`Self::end_pass`]).
+ /// This is only valid during the call to [`Self::run_ui`] (between [`Self::begin_pass`] and [`Self::end_pass`]).
#[inline]
pub(crate) fn pass_state_mut(&self, writer: impl FnOnce(&mut PassState) -> R) -> R {
self.write(move |ctx| writer(&mut ctx.viewport().this_pass))
@@ -1073,7 +1029,7 @@ impl Context {
/// Read-only access to [`Fonts`].
///
- /// Not valid until first call to [`Context::run()`].
+ /// Not valid until first call to [`Context::run_ui()`].
/// That's because since we don't know the proper `pixels_per_point` until then.
#[inline]
pub fn fonts(&self, reader: impl FnOnce(&FontsView<'_>) -> R) -> R {
@@ -1090,7 +1046,7 @@ impl Context {
/// Read-write access to [`Fonts`].
///
- /// Not valid until first call to [`Context::run()`].
+ /// Not valid until first call to [`Context::run_ui()`].
/// That's because since we don't know the proper `pixels_per_point` until then.
#[inline]
pub fn fonts_mut(&self, reader: impl FnOnce(&mut FontsView<'_>) -> R) -> R {
@@ -1666,7 +1622,7 @@ impl Context {
/// The total number of completed frames.
///
- /// Starts at zero, and is incremented once at the end of each call to [`Self::run`].
+ /// Starts at zero, and is incremented once at the end of each call to [`Self::run_ui`].
///
/// This is always smaller or equal to [`Self::cumulative_pass_nr`].
pub fn cumulative_frame_nr(&self) -> u64 {
@@ -1675,7 +1631,7 @@ impl Context {
/// The total number of completed frames.
///
- /// Starts at zero, and is incremented once at the end of each call to [`Self::run`].
+ /// Starts at zero, and is incremented once at the end of each call to [`Self::run_ui`].
///
/// This is always smaller or equal to [`Self::cumulative_pass_nr_for`].
pub fn cumulative_frame_nr_for(&self, id: ViewportId) -> u64 {
@@ -1695,7 +1651,7 @@ impl Context {
/// The total number of completed passes (usually there is one pass per rendered frame).
///
- /// Starts at zero, and is incremented for each completed pass inside of [`Self::run`] (usually once).
+ /// Starts at zero, and is incremented for each completed pass inside of [`Self::run_ui`] (usually once).
///
/// If you instead want to know which pass index this is within the current frame,
/// use [`Self::current_pass_index`].
@@ -1705,7 +1661,7 @@ impl Context {
/// The total number of completed passes (usually there is one pass per rendered frame).
///
- /// Starts at zero, and is incremented for each completed pass inside of [`Self::run`] (usually once).
+ /// Starts at zero, and is incremented for each completed pass inside of [`Self::run_ui`] (usually once).
pub fn cumulative_pass_nr_for(&self, id: ViewportId) -> u64 {
self.read(|ctx| {
ctx.viewports
@@ -2080,7 +2036,7 @@ impl Context {
self.options(|opt| opt.theme())
}
- /// The [`Theme`] used to select between dark and light [`Self::style`]
+ /// The [`Theme`] used to select between dark and light [`Self::global_style`]
/// as the active style used by all subsequent popups, menus, etc.
///
/// Example:
@@ -2097,12 +2053,6 @@ impl Context {
self.options(|opt| Arc::clone(opt.style()))
}
- /// The currently active [`Style`] used by all subsequent popups, menus, etc.
- #[deprecated = "Renamed to `global_style` to avoid confusion with `ui.style()`"]
- pub fn style(&self) -> Arc