utils/iced: Allow computing minimum widget size

This commit is contained in:
Victoria Brekenfeld 2023-12-07 19:45:59 +00:00 committed by Victoria Brekenfeld
parent 6ac8fd2f90
commit 85771dff5e

View file

@ -12,9 +12,9 @@ use cosmic::{
keyboard::{Event as KeyboardEvent, Modifiers as IcedModifiers},
mouse::{Button as MouseButton, Cursor, Event as MouseEvent, ScrollDelta},
window::{Event as WindowEvent, Id},
Command, Point as IcedPoint, Rectangle as IcedRectangle, Size as IcedSize,
Command, Limits, Point as IcedPoint, Rectangle as IcedRectangle, Size as IcedSize,
},
iced_core::{clipboard::Null as NullClipboard, renderer::Style, Color},
iced_core::{clipboard::Null as NullClipboard, renderer::Style, Color, Length},
iced_renderer::{graphics::Renderer as IcedGraphicsRenderer, Renderer as IcedRenderer},
iced_runtime::{
command::Action,
@ -277,6 +277,21 @@ impl<P: Program + Send + 'static> IcedElement<P> {
func(&internal.state.program().0)
}
pub fn minimum_size(&self) -> Size<i32, Logical> {
let internal = self.0.lock().unwrap();
let element = internal.state.program().0.view();
let node = element
.as_widget()
.layout(
&internal.renderer,
&Limits::new(IcedSize::ZERO, IcedSize::INFINITY)
.width(Length::Shrink)
.height(Length::Shrink),
)
.size();
Size::from((node.width.ceil() as i32, node.height.ceil() as i32))
}
pub fn loop_handle(&self) -> LoopHandle<'static, crate::state::State> {
self.0.lock().unwrap().handle.clone()
}