update px dependent on resize + move painter data into struct in ui

This commit is contained in:
iris committed 2025-09-28 13:14:51 -04:00
1 parent 61df088cc7
commit c98a43f94d
7 files changed
+99 -105

No files matched your search

+42 -23
View File
@@ -1,7 +1,7 @@
use crate::{
layout::{
ActiveWidgets, Layers, Modules, TextAttrs, TextBuffer, TextData, TextOffset, TextureHandle,
Textures, UiRegion, UiVec2, Vec2, WidgetId, Widgets,
Layers, Modules, TextAttrs, TextBuffer, TextData, TextOffset, TextureHandle, Textures,
UiRegion, UiVec2, Vec2, WidgetId, Widgets,
},
render::{Primitive, PrimitiveHandle},
util::{HashMap, HashSet, Id},
@@ -16,19 +16,19 @@ pub struct Painter<'a, 'c> {
sized_children: HashMap<Id, UiVec2>,
/// whether this widget depends on region's final pixel size or not
/// TODO: decide if point (pt) should be used here instead of px
px_dependent: bool,
pub layer: usize,
id: Id,
}
pub struct PainterCtx<'a> {
pub widgets: &'a Widgets,
pub active: &'a mut ActiveWidgets,
pub active: &'a mut HashMap<Id, WidgetInstance>,
pub layers: &'a mut Layers,
pub textures: &'a mut Textures,
pub text: &'a mut TextData,
pub screen_size: Vec2,
pub modules: &'a mut Modules,
pub px_dependent: &'a mut HashSet<Id>,
drawing: HashSet<Id>,
}
@@ -43,24 +43,43 @@ pub struct WidgetInstance {
pub layer: usize,
}
impl<'a> PainterCtx<'a> {
pub fn new(
widgets: &'a Widgets,
layers: &'a mut Layers,
active: &'a mut ActiveWidgets,
modules: &'a mut Modules,
textures: &'a mut Textures,
text: &'a mut TextData,
screen_size: Vec2,
) -> Self {
pub struct PainterData {
pub widgets: Widgets,
pub active: HashMap<Id, WidgetInstance>,
pub layers: Layers,
pub textures: Textures,
pub text: TextData,
pub output_size: Vec2,
pub modules: Modules,
pub px_dependent: HashSet<Id>,
}
impl Default for PainterData {
fn default() -> Self {
Self {
widgets,
active,
layers,
textures,
text,
screen_size,
modules,
widgets: Widgets::new(),
layers: Default::default(),
textures: Textures::new(),
text: TextData::default(),
active: Default::default(),
output_size: Vec2::ZERO,
modules: Modules::default(),
px_dependent: Default::default(),
}
}
}
impl<'a> PainterCtx<'a> {
pub fn new(data: &'a mut PainterData) -> Self {
Self {
widgets: &data.widgets,
active: &mut data.active,
layers: &mut data.layers,
textures: &mut data.textures,
text: &mut data.text,
screen_size: data.output_size,
modules: &mut data.modules,
px_dependent: &mut data.px_dependent,
drawing: HashSet::default(),
}
}
@@ -157,7 +176,6 @@ impl<'a> PainterCtx<'a> {
ctx: self,
children: Vec::new(),
sized_children: Default::default(),
px_dependent: false,
};
// draw widgets
@@ -224,6 +242,7 @@ impl<'a> PainterCtx<'a> {
m.on_undraw(inst);
}
}
self.px_dependent.remove(&id);
inst
}
@@ -317,7 +336,7 @@ impl<'a, 'c> Painter<'a, 'c> {
}
pub fn px_size(&mut self) -> Vec2 {
self.px_dependent = true;
self.ctx.px_dependent.insert(self.id);
self.region.in_size(self.ctx.screen_size)
}