update px dependent on resize + move painter data into struct in ui
This commit is contained in:
1 parent
61df088cc7
commit
c98a43f94d
7 files changed
+99
-105
No files matched your search
+42
-23
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user