Retain frame and extent dependencies independently
Keep the original measurement placement separate from the assigned slot.
Validate frame and extent lengths before reusing an answer or drawing, and
represent hint-only records as having no measured answer.
Retain primitive and mask coordinates with their frame/extent reference.
Forwarded children follow a reused wrapper's placement without rerunning
valid draw bodies. Keep the single Widget::draw API.
Restore the eight failing suite cases from the region/placement prototype,
with regressions for mixed coordinate references, a changed inherited
extent, the sizing-stack fraction, and an undrawn share becoming visible.
This remains experimental: nested container updates do substantially more
work than e44dea3 despite restoring the leaf and wrapper reuse guarantees.
Do not merge it as a performance improvement.
This commit is contained in:
1 parent
5fcace1bfa
commit
efb416bbc3
14 files changed
+548
-166
No files matched your search
@@ -0,0 +1,36 @@
|
||||
use crate::{PrimitiveHandle, UiRegion};
|
||||
|
||||
/// Retains which box geometry follows when only the extent changes.
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
pub enum DrawRegion {
|
||||
Frame(UiRegion),
|
||||
Extent(UiRegion),
|
||||
}
|
||||
|
||||
impl DrawRegion {
|
||||
pub(crate) fn resolve(self, frame: UiRegion, extent: UiRegion) -> UiRegion {
|
||||
match self {
|
||||
Self::Frame(local) => local.within(&frame),
|
||||
Self::Extent(local) => local.within(&extent).within(&frame),
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn map(self, f: impl FnOnce(UiRegion) -> UiRegion) -> Self {
|
||||
match self {
|
||||
Self::Frame(local) => Self::Frame(f(local)),
|
||||
Self::Extent(local) => Self::Extent(f(local)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<UiRegion> for DrawRegion {
|
||||
fn from(region: UiRegion) -> Self {
|
||||
Self::Frame(region)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct RetainedPrimitive {
|
||||
pub handle: PrimitiveHandle,
|
||||
pub region: DrawRegion,
|
||||
}
|
||||
Reference in new issue
Block a user