mirror of
https://github.com/danbulant/mangui
synced 2026-07-07 03:40:33 +00:00
cleanup
This commit is contained in:
parent
a13dc3b114
commit
7cffab2e7e
3 changed files with 2 additions and 32 deletions
|
|
@ -37,7 +37,6 @@ pub type SharedTNode<T> = Arc<RwLock<TNode<T>>>;
|
||||||
type WeakTNode<T> = Weak<RwLock<TNode<T>>>;
|
type WeakTNode<T> = Weak<RwLock<TNode<T>>>;
|
||||||
type TNodePtr<T> = Option<Vec<WeakTNode<T>>>;
|
type TNodePtr<T> = Option<Vec<WeakTNode<T>>>;
|
||||||
type NodeLayoutMap<T> = PtrWeakKeyHashMap<Weak<RwLock<TNode<T>>>, taffy::node::Node>;
|
type NodeLayoutMap<T> = PtrWeakKeyHashMap<Weak<RwLock<TNode<T>>>, taffy::node::Node>;
|
||||||
type LayoutNodeMap<T> = HashMap<taffy::node::Node, Weak<RwLock<TNode<T>>>>;
|
|
||||||
|
|
||||||
pub fn run_event_loop(root_node: SharedTNode<CurrentRenderer>) -> ! {
|
pub fn run_event_loop(root_node: SharedTNode<CurrentRenderer>) -> ! {
|
||||||
let event_loop = EventLoop::new();
|
let event_loop = EventLoop::new();
|
||||||
|
|
@ -53,8 +52,7 @@ pub fn run_event_loop(root_node: SharedTNode<CurrentRenderer>) -> ! {
|
||||||
{
|
{
|
||||||
let clonned = root_node.clone();
|
let clonned = root_node.clone();
|
||||||
let root = clonned.read().unwrap();
|
let root = clonned.read().unwrap();
|
||||||
// let root: RwLockReadGuard<'_, dyn Node<CurrentRenderer>> = root;
|
let root_style = root.deref().style();
|
||||||
let root_style = root.deref().style(); // TNode::<CurrentRenderer>::style(root.deref());
|
|
||||||
let root_layout = root_style.layout.to_owned();
|
let root_layout = root_style.layout.to_owned();
|
||||||
let taffy_root_node = taffy.new_leaf(root_layout).unwrap();
|
let taffy_root_node = taffy.new_leaf(root_layout).unwrap();
|
||||||
|
|
||||||
|
|
@ -64,15 +62,12 @@ pub fn run_event_loop(root_node: SharedTNode<CurrentRenderer>) -> ! {
|
||||||
let mut context = RenderContext {
|
let mut context = RenderContext {
|
||||||
canvas,
|
canvas,
|
||||||
node_layout: taffy_map,
|
node_layout: taffy_map,
|
||||||
layout_node: LayoutNodeMap::new(),
|
|
||||||
taffy,
|
taffy,
|
||||||
mouse: None,
|
mouse: None,
|
||||||
keyboard_focus: None
|
keyboard_focus: None
|
||||||
};
|
};
|
||||||
let root = root_node.clone();
|
let root = root_node.clone();
|
||||||
|
|
||||||
// let mut width: u32 = 0;
|
|
||||||
// let mut height: u32 = 0;
|
|
||||||
let mut should_recompute = true;
|
let mut should_recompute = true;
|
||||||
|
|
||||||
event_loop.run(move |event, _target, control_flow| match event {
|
event_loop.run(move |event, _target, control_flow| match event {
|
||||||
|
|
@ -82,15 +77,11 @@ pub fn run_event_loop(root_node: SharedTNode<CurrentRenderer>) -> ! {
|
||||||
// }
|
// }
|
||||||
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
|
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
|
||||||
WindowEvent::Resized(size) => {
|
WindowEvent::Resized(size) => {
|
||||||
// width = size.width;
|
|
||||||
// height = size.height;
|
|
||||||
let width: NonZeroU32 = NonZeroU32::new(size.width).unwrap();
|
let width: NonZeroU32 = NonZeroU32::new(size.width).unwrap();
|
||||||
let height: NonZeroU32 = NonZeroU32::new(size.height).unwrap();
|
let height: NonZeroU32 = NonZeroU32::new(size.height).unwrap();
|
||||||
surface.resize(&buffer_context, width, height);
|
surface.resize(&buffer_context, width, height);
|
||||||
let mut groot = root_node.write().unwrap();
|
let mut groot = root_node.write().unwrap();
|
||||||
// let scale_factor = window.scale_factor();
|
// let scale_factor = window.scale_factor();
|
||||||
// groot.style.layout.size.width = Dimension::Points(size.width as f32);
|
|
||||||
// groot.style.layout.size.height = Dimension::Points(size.height as f32);
|
|
||||||
groot.resize(size.width as f32, size.height as f32);
|
groot.resize(size.width as f32, size.height as f32);
|
||||||
drop(groot);
|
drop(groot);
|
||||||
window.request_redraw();
|
window.request_redraw();
|
||||||
|
|
@ -111,12 +102,10 @@ pub fn run_event_loop(root_node: SharedTNode<CurrentRenderer>) -> ! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (node, taffy_node) in context.node_layout.iter() {
|
for (node, taffy_node) in context.node_layout.iter() {
|
||||||
// context.layout_node.insert(*taffy_node, Arc::downgrade(&node));
|
|
||||||
let node = node.read().unwrap();
|
let node = node.read().unwrap();
|
||||||
let node_style = node.style();
|
let node_style = node.style();
|
||||||
context.taffy.set_style(*taffy_node, node_style.layout.to_owned()).unwrap();
|
context.taffy.set_style(*taffy_node, node_style.layout.to_owned()).unwrap();
|
||||||
}
|
}
|
||||||
// context.layout_node.retain(|_, v| v.upgrade().is_some());
|
|
||||||
context.taffy.compute_layout(*context.node_layout.get(&root).unwrap(), Size::MAX_CONTENT).unwrap();
|
context.taffy.compute_layout(*context.node_layout.get(&root).unwrap(), Size::MAX_CONTENT).unwrap();
|
||||||
should_recompute = false;
|
should_recompute = false;
|
||||||
// Additional optimizations could be done here
|
// Additional optimizations could be done here
|
||||||
|
|
@ -179,18 +168,13 @@ fn render(
|
||||||
context: &mut RenderContext<CurrentRenderer>,
|
context: &mut RenderContext<CurrentRenderer>,
|
||||||
root_node: &SharedTNode<CurrentRenderer>
|
root_node: &SharedTNode<CurrentRenderer>
|
||||||
) {
|
) {
|
||||||
// Make sure the canvas has the right size:
|
|
||||||
let size = window.inner_size();
|
let size = window.inner_size();
|
||||||
context.canvas.reset();
|
context.canvas.reset();
|
||||||
context.canvas.set_size(size.width, size.height, window.scale_factor() as f32);
|
context.canvas.set_size(size.width, size.height, window.scale_factor() as f32);
|
||||||
// context.canvas.scale(1., -1.); // layout is bottom to top, canvas is top to bottom, this might make it easier?
|
|
||||||
context.canvas.clear_rect(0, 0, size.width, size.height, Color::black());
|
context.canvas.clear_rect(0, 0, size.width, size.height, Color::black());
|
||||||
|
|
||||||
// Do the render passes here
|
|
||||||
render_recursively(root_node, context);
|
render_recursively(root_node, context);
|
||||||
|
|
||||||
// Tell renderer to execute all drawing commands
|
|
||||||
context.canvas.flush();
|
context.canvas.flush();
|
||||||
// Display what we've just rendered
|
|
||||||
surface.swap_buffers(buffer_context).expect("Could not swap buffers");
|
surface.swap_buffers(buffer_context).expect("Could not swap buffers");
|
||||||
}
|
}
|
||||||
|
|
@ -38,9 +38,6 @@ impl<T: Renderer> Node<T> for Layout<T> {
|
||||||
fn children(&self) -> Option<&NodeChildren<T>> {
|
fn children(&self) -> Option<&NodeChildren<T>> {
|
||||||
Some(&self.children)
|
Some(&self.children)
|
||||||
}
|
}
|
||||||
// fn render_(&self, context: &mut RenderContext<T>, _layout: taffy::layout::Layout, render_children: &dyn Fn(&mut RenderContext<T>)) {
|
|
||||||
// render_children(context);
|
|
||||||
// }
|
|
||||||
fn resize(&mut self, width: f32, height: f32) {
|
fn resize(&mut self, width: f32, height: f32) {
|
||||||
self.style.layout.size.width = Dimension::Points(width);
|
self.style.layout.size.width = Dimension::Points(width);
|
||||||
self.style.layout.size.height = Dimension::Points(height);
|
self.style.layout.size.height = Dimension::Points(height);
|
||||||
|
|
|
||||||
|
|
@ -7,14 +7,13 @@ use femtovg::{Canvas, Renderer, Color};
|
||||||
use taffy::layout::Layout;
|
use taffy::layout::Layout;
|
||||||
pub use taffy::style::Style as TaffyStyle;
|
pub use taffy::style::Style as TaffyStyle;
|
||||||
use taffy::Taffy;
|
use taffy::Taffy;
|
||||||
use crate::{NodeLayoutMap, LayoutNodeMap, TNodePtr};
|
use crate::{NodeLayoutMap, TNodePtr};
|
||||||
|
|
||||||
type SharedTNode<T> = Arc<RwLock<dyn Node<T>>>;
|
type SharedTNode<T> = Arc<RwLock<dyn Node<T>>>;
|
||||||
|
|
||||||
pub struct RenderContext<T: Renderer> {
|
pub struct RenderContext<T: Renderer> {
|
||||||
pub canvas: Canvas<T>,
|
pub canvas: Canvas<T>,
|
||||||
pub node_layout: NodeLayoutMap<T>,
|
pub node_layout: NodeLayoutMap<T>,
|
||||||
pub layout_node: LayoutNodeMap<T>,
|
|
||||||
pub taffy: Taffy,
|
pub taffy: Taffy,
|
||||||
pub mouse: TNodePtr<T>,
|
pub mouse: TNodePtr<T>,
|
||||||
pub keyboard_focus: TNodePtr<T>
|
pub keyboard_focus: TNodePtr<T>
|
||||||
|
|
@ -105,9 +104,6 @@ pub fn render_recursively<T: Renderer>(node: &SharedTNode<T>, context: &mut Rend
|
||||||
let sself = node.clone();
|
let sself = node.clone();
|
||||||
context.canvas.save();
|
context.canvas.save();
|
||||||
context.canvas.translate(layout.location.x, layout.location.y);
|
context.canvas.translate(layout.location.x, layout.location.y);
|
||||||
// dbg!(node, layout);
|
|
||||||
// dbg!(styles, layout);
|
|
||||||
// dbg!(context.canvas.transform());
|
|
||||||
match styles.overflow {
|
match styles.overflow {
|
||||||
Overflow::Visible => {},
|
Overflow::Visible => {},
|
||||||
Overflow::Hidden => {
|
Overflow::Hidden => {
|
||||||
|
|
@ -120,13 +116,6 @@ pub fn render_recursively<T: Renderer>(node: &SharedTNode<T>, context: &mut Rend
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
drop(read_node);
|
drop(read_node);
|
||||||
// sself.render(context, layout, & (|context| {
|
|
||||||
// if let Some(children) = sself.children() {
|
|
||||||
// for child in children {
|
|
||||||
// render_recursively(child, context);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }));
|
|
||||||
sself.read().unwrap().render_pre_children(context, layout);
|
sself.read().unwrap().render_pre_children(context, layout);
|
||||||
if let Some(children) = sself.read().unwrap().children() {
|
if let Some(children) = sself.read().unwrap().children() {
|
||||||
for child in children {
|
for child in children {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue