Rename the Sized widget to SetSize
It shadowed the marker trait, so a `?Sized` bound in any crate that imports the prelude failed to resolve -- a compile error in someone else's code that nothing here would have caught. Three files inside iris already imported `std::marker::Sized` to get out from under it; they no longer need to. `SetSize` rather than `FixedSize` because the size it sets need not be fixed: `width(rest(2))` and `width(rel(0.5))` build the same widget. It pairs with the `MaxSize` beside it -- one sets a length, the other caps it. `tests/prelude_bounds.rs` is a compile-level guard: it fails to build if the prelude shadows `Sized` again. The pad tab of the tabs example, which is what uses `sized` and the flexible widths, renders pixel-identical. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
00d2230b84
commit
f312db60c2
7 files changed
+27
-18
No files matched your search
@@ -0,0 +1,34 @@
|
||||
use crate::prelude::*;
|
||||
|
||||
pub struct SetSize {
|
||||
pub inner: StrongWidget,
|
||||
pub x: Option<Len>,
|
||||
pub y: Option<Len>,
|
||||
}
|
||||
|
||||
impl SetSize {
|
||||
fn apply_to_outer(&self, ctx: &mut SizeCtx) {
|
||||
if let Some(x) = self.x {
|
||||
ctx.outer.x.select_len(x.apply_rest());
|
||||
}
|
||||
if let Some(y) = self.y {
|
||||
ctx.outer.y.select_len(y.apply_rest());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Widget for SetSize {
|
||||
fn draw(&mut self, painter: &mut Painter) {
|
||||
painter.widget(&self.inner);
|
||||
}
|
||||
|
||||
fn desired_width(&mut self, ctx: &mut SizeCtx) -> Len {
|
||||
self.apply_to_outer(ctx);
|
||||
self.x.unwrap_or_else(|| ctx.width(&self.inner))
|
||||
}
|
||||
|
||||
fn desired_height(&mut self, ctx: &mut SizeCtx) -> Len {
|
||||
self.apply_to_outer(ctx);
|
||||
self.y.unwrap_or_else(|| ctx.height(&self.inner))
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user