Track retained layout validity explicitly
This commit is contained in:
1 parent
691e3eb23c
commit
29c7881c8a
25 files changed
+836
-795
No files matched your search
+23
-20
@@ -1,23 +1,27 @@
|
||||
use crate::{
|
||||
LayerId, Len, MaskIdx, MoveIdx, PrimitiveHandle, Size, TextureHandle, UiRegion, WidgetId,
|
||||
util::Vec2,
|
||||
Holds, LayerId, Len, MaskIdx, MoveIdx, PrimitiveHandle, Size, TextureHandle, UiRegion, WidgetId,
|
||||
};
|
||||
|
||||
/// important non rendering data for retained drawing
|
||||
/// What is kept of a widget its parent has asked about. `drawn` says whether
|
||||
/// it currently draws; one that does not is kept so that a change to it, or
|
||||
/// under it, still reaches whoever asked.
|
||||
#[derive(Debug)]
|
||||
pub struct ActiveData {
|
||||
pub id: WidgetId,
|
||||
pub region: UiRegion,
|
||||
/// What the widget said it used of `region`, the last time it drew.
|
||||
/// The box its parent first asked about it in, as a part of the box the
|
||||
/// parent was itself asked in. Any later box it was given was decided
|
||||
/// knowing its answer, so this is where a question about it is asked
|
||||
/// again -- and it is kept relative so that it follows the parent's.
|
||||
pub offer: UiRegion,
|
||||
/// What it answered there: the size and what that held for.
|
||||
pub answer: (Size, [Holds; 2]),
|
||||
/// What the widget said it used of its box, the last time it drew.
|
||||
pub size: Size,
|
||||
/// The pixel size of the box it drew against. `region` alone cannot say:
|
||||
/// it is a fraction of a slot's box, and the same fraction of a box that
|
||||
/// has since changed is a different number of pixels.
|
||||
pub px: Vec2,
|
||||
/// The pixel size of the box its parent first asked about it in, before
|
||||
/// knowing what it came to. `px` may be a box derived from that answer,
|
||||
/// and a size measured there is only the same answer asked again.
|
||||
pub offered_px: Vec2,
|
||||
/// The pixel lengths of its box, per axis, that its drawing and `size`
|
||||
/// hold for.
|
||||
pub holds: [Holds; 2],
|
||||
pub drawn: bool,
|
||||
pub parent: Option<WidgetId>,
|
||||
/// How far down the tree it was drawn, the root being 1. Carried down a
|
||||
/// draw rather than worked out by walking up, so it is right for every
|
||||
@@ -28,14 +32,6 @@ pub struct ActiveData {
|
||||
pub children: Vec<WidgetId>,
|
||||
/// The children whose size this widget read while drawing.
|
||||
pub size_deps: Vec<WidgetId>,
|
||||
/// Offered pixel axes which flowed into this widget's reported size,
|
||||
/// directly or through a child size it read.
|
||||
pub size_box_inputs: [bool; 2],
|
||||
/// Output axes read while producing `size`, distinct from the widget's
|
||||
/// own box when that box has a fixed pixel length.
|
||||
pub size_output_inputs: [bool; 2],
|
||||
/// The output dimensions against which those dependencies were observed.
|
||||
pub output_px: Vec2,
|
||||
/// The slot its primitives are positioned through: its own if its parent
|
||||
/// placed it, otherwise the nearest ancestor that has one.
|
||||
pub move_idx: MoveIdx,
|
||||
@@ -48,3 +44,10 @@ pub struct ActiveData {
|
||||
pub mask: MaskIdx,
|
||||
pub layer: LayerId,
|
||||
}
|
||||
|
||||
impl ActiveData {
|
||||
/// Whether its drawing and size hold for a box of these pixel lengths.
|
||||
pub fn holds_at(&self, px: crate::util::Vec2) -> bool {
|
||||
self.holds[0].contains(px.x) && self.holds[1].contains(px.y)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user