mirror of
https://github.com/danbulant/cushy
synced 2026-07-06 11:40:37 +00:00
Resize exact fix, stack overflow now works
This commit is contained in:
parent
e44872351d
commit
60e85c78d0
2 changed files with 25 additions and 18 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
use kludgine::figures::units::UPx;
|
||||||
use kludgine::figures::{Fraction, IntoSigned, IntoUnsigned, Rect, ScreenScale, Size};
|
use kludgine::figures::{Fraction, IntoSigned, IntoUnsigned, Rect, ScreenScale, Size};
|
||||||
|
|
||||||
use crate::context::{AsEventContext, LayoutContext};
|
use crate::context::{AsEventContext, LayoutContext};
|
||||||
|
|
@ -81,7 +82,12 @@ impl WrapperWidget for Resize {
|
||||||
);
|
);
|
||||||
context.for_other(&child).layout(available_space)
|
context.for_other(&child).layout(available_space)
|
||||||
};
|
};
|
||||||
Rect::from(size.into_signed())
|
Size::<UPx>::new(
|
||||||
|
self.width.clamp(size.width, context.gfx.scale()),
|
||||||
|
self.height.clamp(size.height, context.gfx.scale()),
|
||||||
|
)
|
||||||
|
.into_signed()
|
||||||
|
.into()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,8 +98,11 @@ fn override_constraint(
|
||||||
) -> ConstraintLimit {
|
) -> ConstraintLimit {
|
||||||
match constraint {
|
match constraint {
|
||||||
ConstraintLimit::Known(size) => ConstraintLimit::Known(range.clamp(size, scale)),
|
ConstraintLimit::Known(size) => ConstraintLimit::Known(range.clamp(size, scale)),
|
||||||
ConstraintLimit::ClippedAfter(clipped_after) => {
|
ConstraintLimit::ClippedAfter(clipped_after) => match (range.minimum(), range.maximum()) {
|
||||||
ConstraintLimit::ClippedAfter(range.clamp(clipped_after, scale))
|
(Some(min), Some(max)) if min == max => {
|
||||||
}
|
ConstraintLimit::Known(min.into_px(scale).into_unsigned())
|
||||||
|
}
|
||||||
|
_ => ConstraintLimit::ClippedAfter(range.clamp(clipped_after, scale)),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -403,18 +403,14 @@ impl Layout {
|
||||||
// Measure the children that fit their content
|
// Measure the children that fit their content
|
||||||
for &id in &self.measured {
|
for &id in &self.measured {
|
||||||
let index = self.children.index_of_id(id).expect("child not found");
|
let index = self.children.index_of_id(id).expect("child not found");
|
||||||
if remaining > 0 {
|
let (measured, _) = self.orientation.split_size(measure(
|
||||||
let (measured, _) = self.orientation.split_size(measure(
|
index,
|
||||||
index,
|
self.orientation
|
||||||
self.orientation
|
.make_size(ConstraintLimit::ClippedAfter(remaining), other_constraint),
|
||||||
.make_size(ConstraintLimit::ClippedAfter(remaining), other_constraint),
|
false,
|
||||||
false,
|
));
|
||||||
));
|
self.layouts[index].size = measured;
|
||||||
self.layouts[index].size = measured;
|
remaining = remaining.saturating_sub(measured);
|
||||||
remaining = remaining.saturating_sub(measured);
|
|
||||||
} else {
|
|
||||||
self.layouts[index].size = UPx(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Measure the weighted children within the remaining space
|
// Measure the weighted children within the remaining space
|
||||||
|
|
@ -449,15 +445,17 @@ impl Layout {
|
||||||
offset += self.layouts[index].size;
|
offset += self.layouts[index].size;
|
||||||
let (_, measured) = self.orientation.split_size(measure(
|
let (_, measured) = self.orientation.split_size(measure(
|
||||||
index,
|
index,
|
||||||
self.orientation.make_size(
|
dbg!(self.orientation.make_size(
|
||||||
ConstraintLimit::Known(self.layouts[index].size.into_px(scale).into_unsigned()),
|
ConstraintLimit::Known(self.layouts[index].size.into_px(scale).into_unsigned()),
|
||||||
other_constraint,
|
other_constraint,
|
||||||
),
|
)),
|
||||||
true,
|
true,
|
||||||
));
|
));
|
||||||
self.other = self.other.max(measured);
|
self.other = self.other.max(measured);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
println!("Total height: {offset}");
|
||||||
|
|
||||||
self.other = match other_constraint {
|
self.other = match other_constraint {
|
||||||
ConstraintLimit::Known(max) => self.other.max(max),
|
ConstraintLimit::Known(max) => self.other.max(max),
|
||||||
ConstraintLimit::ClippedAfter(clip_limit) => self.other.min(clip_limit),
|
ConstraintLimit::ClippedAfter(clip_limit) => self.other.min(clip_limit),
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue