From 254ddc50fb589b64dd4fe75224ee7da22cf1abe9 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Thu, 2 Jan 2025 15:51:50 +0100 Subject: [PATCH] Store `Margin` using `i8` to reduce its size --- crates/egui/src/containers/frame.rs | 28 +- crates/egui/src/containers/window.rs | 2 +- crates/egui/src/style.rs | 18 +- crates/egui/src/widgets/text_edit/builder.rs | 2 +- crates/egui_demo_lib/src/demo/pan_zoom.rs | 2 +- crates/egui_extras/src/datepicker/button.rs | 6 +- crates/epaint/src/lib.rs | 2 + crates/epaint/src/margin.rs | 173 ++++++----- crates/epaint/src/marginf.rs | 299 +++++++++++++++++++ crates/epaint/src/shadow.rs | 6 +- examples/custom_keypad/src/keypad.rs | 6 +- tests/test_ui_stack/src/main.rs | 12 +- 12 files changed, 449 insertions(+), 107 deletions(-) create mode 100644 crates/epaint/src/marginf.rs diff --git a/crates/egui/src/containers/frame.rs b/crates/egui/src/containers/frame.rs index cf1f5a3acc5..6a526a7e98e 100644 --- a/crates/egui/src/containers/frame.rs +++ b/crates/egui/src/containers/frame.rs @@ -4,7 +4,7 @@ use crate::{ epaint, layers::ShapeIdx, InnerResponse, Response, Sense, Style, Ui, UiBuilder, UiKind, UiStackInfo, }; -use epaint::{Color32, Margin, Rect, Rounding, Shadow, Shape, Stroke}; +use epaint::{Color32, Margin, Marginf, Rect, Rounding, Shadow, Shape, Stroke}; /// Add a background, frame and/or margin to a rectangular background of a [`Ui`]. /// @@ -73,6 +73,18 @@ pub struct Frame { pub stroke: Stroke, } +#[test] +fn frame_size() { + assert_eq!( + std::mem::size_of::(), 44, + "Frame changed size! If it shrank - good! Update this test. If it grew - bad! Try to find a way to avoid it." + ); + assert!( + std::mem::size_of::() <= 64, + "Frame is getting way too big!" + ); +} + impl Frame { pub fn none() -> Self { Self::default() @@ -81,7 +93,7 @@ impl Frame { /// For when you want to group a few widgets together within a frame. pub fn group(style: &Style) -> Self { Self { - inner_margin: Margin::same(6.0), // same and symmetric looks best in corners when nesting groups + inner_margin: Margin::same(6), // same and symmetric looks best in corners when nesting groups rounding: style.visuals.widgets.noninteractive.rounding, stroke: style.visuals.widgets.noninteractive.bg_stroke, ..Default::default() @@ -90,7 +102,7 @@ impl Frame { pub fn side_top_panel(style: &Style) -> Self { Self { - inner_margin: Margin::symmetric(8.0, 2.0), + inner_margin: Margin::symmetric(8, 2), fill: style.visuals.panel_fill, ..Default::default() } @@ -98,7 +110,7 @@ impl Frame { pub fn central_panel(style: &Style) -> Self { Self { - inner_margin: Margin::same(8.0), + inner_margin: Margin::same(8), fill: style.visuals.panel_fill, ..Default::default() } @@ -143,7 +155,7 @@ impl Frame { /// and in dark mode this will be very dark. pub fn canvas(style: &Style) -> Self { Self { - inner_margin: Margin::same(2.0), + inner_margin: Margin::same(2), rounding: style.visuals.widgets.noninteractive.rounding, fill: style.visuals.extreme_bg_color, stroke: style.visuals.window_stroke(), @@ -213,10 +225,10 @@ impl Frame { } impl Frame { - /// inner margin plus outer margin. + /// Inner margin plus outer margin. #[inline] - pub fn total_margin(&self) -> Margin { - self.inner_margin + self.outer_margin + pub fn total_margin(&self) -> Marginf { + Marginf::from(self.inner_margin) + Marginf::from(self.outer_margin) } } diff --git a/crates/egui/src/containers/window.rs b/crates/egui/src/containers/window.rs index f1c67300b8a..d487a27ddb4 100644 --- a/crates/egui/src/containers/window.rs +++ b/crates/egui/src/containers/window.rs @@ -486,7 +486,7 @@ impl<'open> Window<'open> { // Calculate roughly how much larger the window size is compared to the inner rect let (title_bar_height, title_content_spacing) = if with_title_bar { let style = ctx.style(); - let spacing = window_margin.top + window_margin.bottom; + let spacing = window_margin.sum().y; let height = ctx.fonts(|f| title.font_height(f, &style)) + spacing; let half_height = (height / 2.0).round() as _; window_frame.rounding.ne = window_frame.rounding.ne.clamp(0, half_height); diff --git a/crates/egui/src/style.rs b/crates/egui/src/style.rs index af35972c4d6..1e23ee0041c 100644 --- a/crates/egui/src/style.rs +++ b/crates/egui/src/style.rs @@ -1238,8 +1238,8 @@ impl Default for Spacing { fn default() -> Self { Self { item_spacing: vec2(8.0, 3.0), - window_margin: Margin::same(6.0), - menu_margin: Margin::same(6.0), + window_margin: Margin::same(6), + menu_margin: Margin::same(6), button_padding: vec2(4.0, 1.0), indent: 18.0, // match checkbox/radio-button with `button_padding.x + icon_width + icon_spacing` interact_size: vec2(40.0, 18.0), @@ -2371,9 +2371,17 @@ impl Widget for &mut Margin { // Apply the checkbox: if same { - *self = Margin::same((self.left + self.right + self.top + self.bottom) / 4.0); - } else if self.is_same() { - self.right *= 1.00001; // prevent collapsing into sameness + *self = + Margin::from((self.leftf() + self.rightf() + self.topf() + self.bottomf()) / 4.0); + } else { + // Make sure it is not same: + if self.is_same() { + if self.right == i8::MAX { + self.right = i8::MAX - 1; + } else { + self.right += 1; + } + } } response diff --git a/crates/egui/src/widgets/text_edit/builder.rs b/crates/egui/src/widgets/text_edit/builder.rs index 587f498b0a2..be96c00fad4 100644 --- a/crates/egui/src/widgets/text_edit/builder.rs +++ b/crates/egui/src/widgets/text_edit/builder.rs @@ -126,7 +126,7 @@ impl<'t> TextEdit<'t> { layouter: None, password: false, frame: true, - margin: Margin::symmetric(4.0, 2.0), + margin: Margin::symmetric(4, 2), multiline: true, interactive: true, desired_width: None, diff --git a/crates/egui_demo_lib/src/demo/pan_zoom.rs b/crates/egui_demo_lib/src/demo/pan_zoom.rs index 421dc521a25..e51b5b9d788 100644 --- a/crates/egui_demo_lib/src/demo/pan_zoom.rs +++ b/crates/egui_demo_lib/src/demo/pan_zoom.rs @@ -128,7 +128,7 @@ impl crate::View for PanZoom { ui.set_clip_rect(transform.inverse() * rect); egui::Frame::default() .rounding(egui::Rounding::same(4)) - .inner_margin(egui::Margin::same(8.0)) + .inner_margin(egui::Margin::same(8)) .stroke(ui.ctx().style().visuals.window_stroke) .fill(ui.style().visuals.panel_fill) .show(ui, |ui| { diff --git a/crates/egui_extras/src/datepicker/button.rs b/crates/egui_extras/src/datepicker/button.rs index 53993512638..81a97c12a7c 100644 --- a/crates/egui_extras/src/datepicker/button.rs +++ b/crates/egui_extras/src/datepicker/button.rs @@ -134,14 +134,14 @@ impl<'a> Widget for DatePickerButton<'a> { let mut pos = button_response.rect.left_bottom(); let width_with_padding = width + ui.style().spacing.item_spacing.x - + ui.style().spacing.window_margin.left - + ui.style().spacing.window_margin.right; + + ui.style().spacing.window_margin.leftf() + + ui.style().spacing.window_margin.rightf(); if pos.x + width_with_padding > ui.clip_rect().right() { pos.x = button_response.rect.right() - width_with_padding; } // Check to make sure the calendar never is displayed out of window - pos.x = pos.x.max(ui.style().spacing.window_margin.left); + pos.x = pos.x.max(ui.style().spacing.window_margin.leftf()); //TODO(elwerene): Better positioning diff --git a/crates/epaint/src/lib.rs b/crates/epaint/src/lib.rs index 226821c16eb..b1d0045ee01 100644 --- a/crates/epaint/src/lib.rs +++ b/crates/epaint/src/lib.rs @@ -27,6 +27,7 @@ mod brush; pub mod color; pub mod image; mod margin; +mod marginf; mod mesh; pub mod mutex; mod rounding; @@ -49,6 +50,7 @@ pub use self::{ color::ColorMode, image::{ColorImage, FontImage, ImageData, ImageDelta}, margin::Margin, + marginf::Marginf, mesh::{Mesh, Mesh16, Vertex}, rounding::Rounding, roundingf::Roundingf, diff --git a/crates/epaint/src/margin.rs b/crates/epaint/src/margin.rs index e2ade58f9c2..e8fc530aae7 100644 --- a/crates/epaint/src/margin.rs +++ b/crates/epaint/src/margin.rs @@ -4,27 +4,33 @@ use emath::{vec2, Rect, Vec2}; /// often used to express padding or spacing. /// /// Can be added and subtracted to/from [`Rect`]s. -#[derive(Clone, Copy, Debug, Default, PartialEq)] +/// +/// Negative margins are possible, but may produce weird behavior. +/// Use with care. +/// +/// All values are stored as [`i8`] to keep the size of [`Margin`] small. +/// If you want floats, use [`crate::Marginf`] instead. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct Margin { - pub left: f32, - pub right: f32, - pub top: f32, - pub bottom: f32, + pub left: i8, + pub right: i8, + pub top: i8, + pub bottom: i8, } impl Margin { pub const ZERO: Self = Self { - left: 0.0, - right: 0.0, - top: 0.0, - bottom: 0.0, + left: 0, + right: 0, + top: 0, + bottom: 0, }; /// The same margin on every side. #[doc(alias = "symmetric")] #[inline] - pub const fn same(margin: f32) -> Self { + pub const fn same(margin: i8) -> Self { Self { left: margin, right: margin, @@ -35,7 +41,7 @@ impl Margin { /// Margins with the same size on opposing sides #[inline] - pub const fn symmetric(x: f32, y: f32) -> Self { + pub const fn symmetric(x: i8, y: i8) -> Self { Self { left: x, right: x, @@ -44,53 +50,84 @@ impl Margin { } } + /// Left margin, as `f32` + #[inline] + pub const fn leftf(self) -> f32 { + self.left as _ + } + + /// Right margin, as `f32` + #[inline] + pub const fn rightf(self) -> f32 { + self.right as _ + } + + /// Top margin, as `f32` + #[inline] + pub const fn topf(self) -> f32 { + self.top as _ + } + + /// Bottom margin, as `f32` + #[inline] + pub const fn bottomf(self) -> f32 { + self.bottom as _ + } + /// Total margins on both sides #[inline] - pub fn sum(&self) -> Vec2 { - vec2(self.left + self.right, self.top + self.bottom) + pub fn sum(self) -> Vec2 { + vec2(self.leftf() + self.rightf(), self.topf() + self.bottomf()) } #[inline] - pub const fn left_top(&self) -> Vec2 { - vec2(self.left, self.top) + pub const fn left_top(self) -> Vec2 { + vec2(self.leftf(), self.topf()) } #[inline] - pub const fn right_bottom(&self) -> Vec2 { - vec2(self.right, self.bottom) + pub const fn right_bottom(self) -> Vec2 { + vec2(self.rightf(), self.bottomf()) } /// Are the margin on every side the same? #[doc(alias = "symmetric")] #[inline] - pub fn is_same(&self) -> bool { + pub const fn is_same(self) -> bool { self.left == self.right && self.left == self.top && self.left == self.bottom } #[deprecated = "Use `rect + margin` instead"] #[inline] - pub fn expand_rect(&self, rect: Rect) -> Rect { + pub fn expand_rect(self, rect: Rect) -> Rect { Rect::from_min_max(rect.min - self.left_top(), rect.max + self.right_bottom()) } #[deprecated = "Use `rect - margin` instead"] #[inline] - pub fn shrink_rect(&self, rect: Rect) -> Rect { + pub fn shrink_rect(self, rect: Rect) -> Rect { Rect::from_min_max(rect.min + self.left_top(), rect.max - self.right_bottom()) } } +impl From for Margin { + #[inline] + fn from(v: i8) -> Self { + Self::same(v) + } +} + impl From for Margin { #[inline] fn from(v: f32) -> Self { - Self::same(v) + Self::same(v.round() as _) } } impl From for Margin { #[inline] fn from(v: Vec2) -> Self { - Self::symmetric(v.x, v.y) + Self::symmetric(v.x.round() as _, v.y.round() as _) } } @@ -101,37 +138,34 @@ impl std::ops::Add for Margin { #[inline] fn add(self, other: Self) -> Self { Self { - left: self.left + other.left, - right: self.right + other.right, - top: self.top + other.top, - bottom: self.bottom + other.bottom, + left: self.left.saturating_add(other.left), + right: self.right.saturating_add(other.right), + top: self.top.saturating_add(other.top), + bottom: self.bottom.saturating_add(other.bottom), } } } -/// `Margin + f32` -impl std::ops::Add for Margin { +/// `Margin + i8` +impl std::ops::Add for Margin { type Output = Self; #[inline] - fn add(self, v: f32) -> Self { + fn add(self, v: i8) -> Self { Self { - left: self.left + v, - right: self.right + v, - top: self.top + v, - bottom: self.bottom + v, + left: self.left.saturating_add(v), + right: self.right.saturating_add(v), + top: self.top.saturating_add(v), + bottom: self.bottom.saturating_add(v), } } } -/// `Margind += f32` -impl std::ops::AddAssign for Margin { +/// `Margin += i8` +impl std::ops::AddAssign for Margin { #[inline] - fn add_assign(&mut self, v: f32) { - self.left += v; - self.right += v; - self.top += v; - self.bottom += v; + fn add_assign(&mut self, v: i8) { + *self = *self + v; } } @@ -142,10 +176,10 @@ impl std::ops::Mul for Margin { #[inline] fn mul(self, v: f32) -> Self { Self { - left: self.left * v, - right: self.right * v, - top: self.top * v, - bottom: self.bottom * v, + left: (self.leftf() * v).round() as _, + right: (self.rightf() * v).round() as _, + top: (self.topf() * v).round() as _, + bottom: (self.bottomf() * v).round() as _, } } } @@ -154,10 +188,7 @@ impl std::ops::Mul for Margin { impl std::ops::MulAssign for Margin { #[inline] fn mul_assign(&mut self, v: f32) { - self.left *= v; - self.right *= v; - self.top *= v; - self.bottom *= v; + *self = *self * v; } } @@ -167,12 +198,8 @@ impl std::ops::Div for Margin { #[inline] fn div(self, v: f32) -> Self { - Self { - left: self.left / v, - right: self.right / v, - top: self.top / v, - bottom: self.bottom / v, - } + #![allow(clippy::suspicious_arithmetic_impl)] + self * v.recip() } } @@ -180,10 +207,7 @@ impl std::ops::Div for Margin { impl std::ops::DivAssign for Margin { #[inline] fn div_assign(&mut self, v: f32) { - self.left /= v; - self.right /= v; - self.top /= v; - self.bottom /= v; + *self = *self / v; } } @@ -194,37 +218,34 @@ impl std::ops::Sub for Margin { #[inline] fn sub(self, other: Self) -> Self { Self { - left: self.left - other.left, - right: self.right - other.right, - top: self.top - other.top, - bottom: self.bottom - other.bottom, + left: self.left.saturating_sub(other.left), + right: self.right.saturating_sub(other.right), + top: self.top.saturating_sub(other.top), + bottom: self.bottom.saturating_sub(other.bottom), } } } -/// `Margin - f32` -impl std::ops::Sub for Margin { +/// `Margin - i8` +impl std::ops::Sub for Margin { type Output = Self; #[inline] - fn sub(self, v: f32) -> Self { + fn sub(self, v: i8) -> Self { Self { - left: self.left - v, - right: self.right - v, - top: self.top - v, - bottom: self.bottom - v, + left: self.left.saturating_sub(v), + right: self.right.saturating_sub(v), + top: self.top.saturating_sub(v), + bottom: self.bottom.saturating_sub(v), } } } -/// `Margin -= f32` -impl std::ops::SubAssign for Margin { +/// `Margin -= i8` +impl std::ops::SubAssign for Margin { #[inline] - fn sub_assign(&mut self, v: f32) { - self.left -= v; - self.right -= v; - self.top -= v; - self.bottom -= v; + fn sub_assign(&mut self, v: i8) { + *self = *self - v; } } diff --git a/crates/epaint/src/marginf.rs b/crates/epaint/src/marginf.rs new file mode 100644 index 00000000000..eb3a1fbc90d --- /dev/null +++ b/crates/epaint/src/marginf.rs @@ -0,0 +1,299 @@ +use emath::{vec2, Rect, Vec2}; + +use crate::Margin; + +/// A value for all four sides of a rectangle, +/// often used to express padding or spacing. +/// +/// Can be added and subtracted to/from [`Rect`]s. +/// +/// For storage, use [`crate::Margin`] instead. +#[derive(Clone, Copy, Debug, Default, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] +pub struct Marginf { + pub left: f32, + pub right: f32, + pub top: f32, + pub bottom: f32, +} + +impl From for Marginf { + #[inline] + fn from(margin: Margin) -> Self { + Self { + left: margin.left as _, + right: margin.right as _, + top: margin.top as _, + bottom: margin.bottom as _, + } + } +} + +impl From for Margin { + #[inline] + fn from(marginf: Marginf) -> Self { + Self { + left: marginf.left as _, + right: marginf.right as _, + top: marginf.top as _, + bottom: marginf.bottom as _, + } + } +} + +impl Marginf { + pub const ZERO: Self = Self { + left: 0.0, + right: 0.0, + top: 0.0, + bottom: 0.0, + }; + + /// The same margin on every side. + #[doc(alias = "symmetric")] + #[inline] + pub const fn same(margin: f32) -> Self { + Self { + left: margin, + right: margin, + top: margin, + bottom: margin, + } + } + + /// Margins with the same size on opposing sides + #[inline] + pub const fn symmetric(x: f32, y: f32) -> Self { + Self { + left: x, + right: x, + top: y, + bottom: y, + } + } + + /// Total margins on both sides + #[inline] + pub fn sum(&self) -> Vec2 { + vec2(self.left + self.right, self.top + self.bottom) + } + + #[inline] + pub const fn left_top(&self) -> Vec2 { + vec2(self.left, self.top) + } + + #[inline] + pub const fn right_bottom(&self) -> Vec2 { + vec2(self.right, self.bottom) + } + + /// Are the margin on every side the same? + #[doc(alias = "symmetric")] + #[inline] + pub fn is_same(&self) -> bool { + self.left == self.right && self.left == self.top && self.left == self.bottom + } + + #[deprecated = "Use `rect + margin` instead"] + #[inline] + pub fn expand_rect(&self, rect: Rect) -> Rect { + Rect::from_min_max(rect.min - self.left_top(), rect.max + self.right_bottom()) + } + + #[deprecated = "Use `rect - margin` instead"] + #[inline] + pub fn shrink_rect(&self, rect: Rect) -> Rect { + Rect::from_min_max(rect.min + self.left_top(), rect.max - self.right_bottom()) + } +} + +impl From for Marginf { + #[inline] + fn from(v: f32) -> Self { + Self::same(v) + } +} + +impl From for Marginf { + #[inline] + fn from(v: Vec2) -> Self { + Self::symmetric(v.x, v.y) + } +} + +/// `Marginf + Marginf` +impl std::ops::Add for Marginf { + type Output = Self; + + #[inline] + fn add(self, other: Self) -> Self { + Self { + left: self.left + other.left, + right: self.right + other.right, + top: self.top + other.top, + bottom: self.bottom + other.bottom, + } + } +} + +/// `Marginf + f32` +impl std::ops::Add for Marginf { + type Output = Self; + + #[inline] + fn add(self, v: f32) -> Self { + Self { + left: self.left + v, + right: self.right + v, + top: self.top + v, + bottom: self.bottom + v, + } + } +} + +/// `Margind += f32` +impl std::ops::AddAssign for Marginf { + #[inline] + fn add_assign(&mut self, v: f32) { + self.left += v; + self.right += v; + self.top += v; + self.bottom += v; + } +} + +/// `Marginf * f32` +impl std::ops::Mul for Marginf { + type Output = Self; + + #[inline] + fn mul(self, v: f32) -> Self { + Self { + left: self.left * v, + right: self.right * v, + top: self.top * v, + bottom: self.bottom * v, + } + } +} + +/// `Marginf *= f32` +impl std::ops::MulAssign for Marginf { + #[inline] + fn mul_assign(&mut self, v: f32) { + self.left *= v; + self.right *= v; + self.top *= v; + self.bottom *= v; + } +} + +/// `Marginf / f32` +impl std::ops::Div for Marginf { + type Output = Self; + + #[inline] + fn div(self, v: f32) -> Self { + Self { + left: self.left / v, + right: self.right / v, + top: self.top / v, + bottom: self.bottom / v, + } + } +} + +/// `Marginf /= f32` +impl std::ops::DivAssign for Marginf { + #[inline] + fn div_assign(&mut self, v: f32) { + self.left /= v; + self.right /= v; + self.top /= v; + self.bottom /= v; + } +} + +/// `Marginf - Marginf` +impl std::ops::Sub for Marginf { + type Output = Self; + + #[inline] + fn sub(self, other: Self) -> Self { + Self { + left: self.left - other.left, + right: self.right - other.right, + top: self.top - other.top, + bottom: self.bottom - other.bottom, + } + } +} + +/// `Marginf - f32` +impl std::ops::Sub for Marginf { + type Output = Self; + + #[inline] + fn sub(self, v: f32) -> Self { + Self { + left: self.left - v, + right: self.right - v, + top: self.top - v, + bottom: self.bottom - v, + } + } +} + +/// `Marginf -= f32` +impl std::ops::SubAssign for Marginf { + #[inline] + fn sub_assign(&mut self, v: f32) { + self.left -= v; + self.right -= v; + self.top -= v; + self.bottom -= v; + } +} + +/// `Rect + Marginf` +impl std::ops::Add for Rect { + type Output = Self; + + #[inline] + fn add(self, margin: Marginf) -> Self { + Self::from_min_max( + self.min - margin.left_top(), + self.max + margin.right_bottom(), + ) + } +} + +/// `Rect += Marginf` +impl std::ops::AddAssign for Rect { + #[inline] + fn add_assign(&mut self, margin: Marginf) { + *self = *self + margin; + } +} + +/// `Rect - Marginf` +impl std::ops::Sub for Rect { + type Output = Self; + + #[inline] + fn sub(self, margin: Marginf) -> Self { + Self::from_min_max( + self.min + margin.left_top(), + self.max - margin.right_bottom(), + ) + } +} + +/// `Rect -= Marginf` +impl std::ops::SubAssign for Rect { + #[inline] + fn sub_assign(&mut self, margin: Marginf) { + *self = *self - margin; + } +} diff --git a/crates/epaint/src/shadow.rs b/crates/epaint/src/shadow.rs index 5a68e45baa1..3f8145e50e5 100644 --- a/crates/epaint/src/shadow.rs +++ b/crates/epaint/src/shadow.rs @@ -1,4 +1,4 @@ -use super::{Color32, Margin, Rect, RectShape, Rounding, Vec2}; +use crate::{Color32, Marginf, Rect, RectShape, Rounding, Vec2}; /// The color and fuzziness of a fuzzy shape. /// @@ -53,14 +53,14 @@ impl Shadow { } /// How much larger than the parent rect are we in each direction? - pub fn margin(&self) -> Margin { + pub fn margin(&self) -> Marginf { let Self { offset, blur, spread, color: _, } = *self; - Margin { + Marginf { left: spread + 0.5 * blur - offset.x, right: spread + 0.5 * blur + offset.x, top: spread + 0.5 * blur - offset.y, diff --git a/examples/custom_keypad/src/keypad.rs b/examples/custom_keypad/src/keypad.rs index d4d0cb0d855..1934ff60271 100644 --- a/examples/custom_keypad/src/keypad.rs +++ b/examples/custom_keypad/src/keypad.rs @@ -92,10 +92,10 @@ impl Keypad { ui.vertical(|ui| { let window_margin = ui.spacing().window_margin; let size_1x1 = vec2(32.0, 26.0); - let _size_1x2 = vec2(32.0, 52.0 + window_margin.top); - let _size_2x1 = vec2(64.0 + window_margin.left, 26.0); + let _size_1x2 = vec2(32.0, 52.0 + window_margin.topf()); + let _size_2x1 = vec2(64.0 + window_margin.leftf(), 26.0); - ui.spacing_mut().item_spacing = Vec2::splat(window_margin.left); + ui.spacing_mut().item_spacing = Vec2::splat(window_margin.leftf()); ui.horizontal(|ui| { if ui.add_sized(size_1x1, Button::new("1")).clicked() { diff --git a/tests/test_ui_stack/src/main.rs b/tests/test_ui_stack/src/main.rs index 1007e2fb80e..a2f09af5cea 100644 --- a/tests/test_ui_stack/src/main.rs +++ b/tests/test_ui_stack/src/main.rs @@ -64,8 +64,8 @@ impl eframe::App for MyApp { ui.add_space(20.0); egui::Frame { stroke: ui.visuals().noninteractive().bg_stroke, - inner_margin: egui::Margin::same(4.0), - outer_margin: egui::Margin::same(4.0), + inner_margin: egui::Margin::same(4), + outer_margin: egui::Margin::same(4), ..Default::default() } .show(ui, |ui| { @@ -74,8 +74,8 @@ impl eframe::App for MyApp { egui::Frame { stroke: ui.visuals().noninteractive().bg_stroke, - inner_margin: egui::Margin::same(8.0), - outer_margin: egui::Margin::same(6.0), + inner_margin: egui::Margin::same(8), + outer_margin: egui::Margin::same(6), ..Default::default() } .show(ui, |ui| { @@ -128,7 +128,7 @@ impl eframe::App for MyApp { ui.label("UI nesting test:"); egui::Frame { stroke: ui.visuals().noninteractive().bg_stroke, - inner_margin: egui::Margin::same(4.0), + inner_margin: egui::Margin::same(4), ..Default::default() } .show(ui, |ui| { @@ -267,7 +267,7 @@ fn stack_ui(ui: &mut egui::Ui) { fn stack_ui_impl(ui: &mut egui::Ui, stack: &egui::UiStack) { egui::Frame { stroke: ui.style().noninteractive().fg_stroke, - inner_margin: egui::Margin::same(4.0), + inner_margin: egui::Margin::same(4), ..Default::default() } .show(ui, |ui| {