remove RcFrontend & RcLayout

[skip ci]
This commit is contained in:
Aleksander
2025-12-26 12:43:14 +01:00
parent f29de34de2
commit 4f7204ccf7
19 changed files with 145 additions and 128 deletions

View File

@@ -131,7 +131,6 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
MouseScrollDelta::LineDelta(x, y) => {
testbed
.layout()
.borrow_mut()
.push_event(
&wgui::event::Event::MouseWheel(MouseWheelEvent {
delta: Vec2::new(x, y),
@@ -146,7 +145,6 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
MouseScrollDelta::PixelDelta(pos) => {
testbed
.layout()
.borrow_mut()
.push_event(
&wgui::event::Event::MouseWheel(MouseWheelEvent {
delta: Vec2::new(pos.x as f32 / 5.0, pos.y as f32 / 5.0),
@@ -167,7 +165,6 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
if matches!(state, winit::event::ElementState::Pressed) {
testbed
.layout()
.borrow_mut()
.push_event(
&wgui::event::Event::MouseDown(MouseDownEvent {
pos: mouse / scale,
@@ -181,7 +178,6 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
} else {
testbed
.layout()
.borrow_mut()
.push_event(
&wgui::event::Event::MouseUp(MouseUpEvent {
pos: mouse / scale,
@@ -202,7 +198,6 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
mouse = vec2(position.x as _, position.y as _);
testbed
.layout()
.borrow_mut()
.push_event(
&wgui::event::Event::MouseMotion(MouseMotionEvent {
pos: mouse / scale,
@@ -225,11 +220,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
"Debug draw enabled\n\tAqua: widget boundary\n\tMagenta: Scissoring (separate render pass)"
);
}
testbed.layout().borrow_mut().mark_redraw();
testbed.layout().mark_redraw();
}
if event.physical_key == PhysicalKey::Code(KeyCode::F11) {
testbed.layout().borrow_mut().print_tree();
testbed.layout().print_tree();
}
if event.physical_key == PhysicalKey::Code(KeyCode::Equal) {
@@ -290,7 +285,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
}
while timestep.on_tick() {
testbed.layout().borrow_mut().tick().unwrap();
testbed.layout().tick().unwrap();
}
testbed
@@ -301,7 +296,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
})
.unwrap();
if !render_context.dirty && !testbed.layout().borrow_mut().check_toggle_needs_redraw() {
if !render_context.dirty && !testbed.layout().check_toggle_needs_redraw() {
// no need to redraw
std::thread::sleep(std::time::Duration::from_millis(5)); // dirty fix to prevent cpu burning precious cycles doing a busy loop
return;
@@ -336,19 +331,18 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
.begin_rendering(tgt, WGfxClearMode::Clear([0.0, 0.0, 0.0, 0.1]))
.unwrap();
let mut layout = testbed.layout().borrow_mut();
let layout = testbed.layout();
let globals = layout.state.globals.clone();
let mut globals = globals.get();
let mut draw_params = wgui::drawing::DrawParams {
globals: &mut globals,
layout: &mut layout,
layout,
debug_draw: debug_draw_enabled,
timestep_alpha: timestep.alpha,
};
let primitives = wgui::drawing::draw(&mut draw_params).unwrap();
drop(layout);
let draw_result = render_context
.draw(

View File

@@ -1,4 +1,4 @@
use wgui::layout::RcLayout;
use wgui::layout::Layout;
pub mod testbed_any;
pub mod testbed_dashboard;
@@ -12,5 +12,5 @@ pub struct TestbedUpdateParams {
pub trait Testbed {
fn update(&mut self, params: TestbedUpdateParams) -> anyhow::Result<()>;
fn layout(&self) -> &RcLayout;
fn layout(&mut self) -> &mut Layout;
}

View File

@@ -9,12 +9,12 @@ use wgui::{
assets::AssetPath,
font_config::WguiFontConfig,
globals::WguiGlobals,
layout::{LayoutParams, RcLayout},
layout::{Layout, LayoutParams},
parser::{ParseDocumentParams, ParserState},
};
pub struct TestbedAny {
pub layout: RcLayout,
pub layout: Layout,
#[allow(dead_code)]
state: ParserState,
@@ -43,23 +43,20 @@ impl TestbedAny {
},
&LayoutParams::default(),
)?;
Ok(Self {
layout: layout.as_rc(),
state,
})
Ok(Self { layout, state })
}
}
impl Testbed for TestbedAny {
fn update(&mut self, params: TestbedUpdateParams) -> anyhow::Result<()> {
self.layout.borrow_mut().update(
self.layout.update(
Vec2::new(params.width, params.height),
params.timestep_alpha,
)?;
Ok(())
}
fn layout(&self) -> &RcLayout {
&self.layout
fn layout(&mut self) -> &mut Layout {
&mut self.layout
}
}

View File

@@ -3,7 +3,7 @@ use dash_frontend::{
frontend,
settings::{self, SettingsIO},
};
use wgui::layout::RcLayout;
use wgui::layout::Layout;
use wlx_common::dash_interface_emulated::DashInterfaceEmulated;
struct SimpleSettingsIO {
@@ -53,8 +53,7 @@ impl settings::SettingsIO for SimpleSettingsIO {
}
pub struct TestbedDashboard {
layout: RcLayout,
frontend: frontend::RcFrontend,
frontend: frontend::Frontend,
}
impl TestbedDashboard {
@@ -62,26 +61,22 @@ impl TestbedDashboard {
let settings = SimpleSettingsIO::new();
let interface = DashInterfaceEmulated::new();
let (frontend, layout) = frontend::Frontend::new(frontend::InitParams {
let frontend = frontend::Frontend::new(frontend::InitParams {
settings: Box::new(settings),
interface: Box::new(interface),
})?;
Ok(Self { frontend, layout })
Ok(Self { frontend })
}
}
impl Testbed for TestbedDashboard {
fn update(&mut self, params: TestbedUpdateParams) -> anyhow::Result<()> {
let mut frontend = self.frontend.borrow_mut();
frontend.update(
&self.frontend,
params.width,
params.height,
params.timestep_alpha,
)
self
.frontend
.update(params.width, params.height, params.timestep_alpha)
}
fn layout(&self) -> &RcLayout {
&self.layout
fn layout(&mut self) -> &mut Layout {
&mut self.frontend.layout
}
}

View File

@@ -1,4 +1,4 @@
use std::{cell::RefCell, collections::VecDeque, path::PathBuf, rc::Rc};
use std::{cell::RefCell, path::PathBuf, rc::Rc};
use crate::{
assets,
@@ -17,9 +17,10 @@ use wgui::{
font_config::WguiFontConfig,
globals::WguiGlobals,
i18n::Translation,
layout::{Layout, LayoutParams, RcLayout, Widget},
layout::{Layout, LayoutParams, Widget},
parser::{Fetchable, ParseDocumentExtra, ParseDocumentParams, ParserState},
taffy,
task::Tasks,
widget::{label::WidgetLabel, rectangle::WidgetRectangle},
windowing::{WguiWindow, WguiWindowParams},
};
@@ -29,16 +30,15 @@ pub enum TestbedTask {
}
struct Data {
tasks: VecDeque<TestbedTask>,
#[allow(dead_code)]
state: ParserState,
popup_window: WguiWindow,
}
#[derive(Clone)]
pub struct TestbedGeneric {
pub layout: RcLayout,
pub layout: Layout,
tasks: Tasks<TestbedTask>,
globals: WguiGlobals,
data: Rc<RefCell<Data>>,
@@ -168,19 +168,19 @@ impl TestbedGeneric {
}));
let testbed = Self {
layout: layout.as_rc(),
layout,
tasks: Default::default(),
globals: globals.clone(),
data: Rc::new(RefCell::new(Data {
state,
tasks: Default::default(),
popup_window: WguiWindow::default(),
})),
};
button_popup.on_click({
let testbed = testbed.clone();
let tasks = testbed.tasks.clone();
Box::new(move |_, _| {
testbed.push_task(TestbedTask::ShowPopup);
tasks.push(TestbedTask::ShowPopup);
Ok(())
})
});
@@ -188,19 +188,14 @@ impl TestbedGeneric {
Ok(testbed)
}
fn push_task(&self, task: TestbedTask) {
self.data.borrow_mut().tasks.push_back(task);
}
fn process_task(
&mut self,
task: &TestbedTask,
params: &mut TestbedUpdateParams,
layout: &mut Layout,
data: &mut Data,
) -> anyhow::Result<()> {
match task {
TestbedTask::ShowPopup => self.show_popup(params, layout, data)?,
TestbedTask::ShowPopup => self.show_popup(params, data)?,
}
Ok(())
@@ -209,13 +204,12 @@ impl TestbedGeneric {
fn show_popup(
&mut self,
_params: &mut TestbedUpdateParams,
layout: &mut Layout,
data: &mut Data,
) -> anyhow::Result<()> {
data.popup_window.open(&mut WguiWindowParams {
globals: self.globals.clone(),
position: Vec2::new(128.0, 128.0),
layout,
layout: &mut self.layout,
title: Translation::from_raw_text("foo"),
extra: Default::default(),
})?;
@@ -226,25 +220,22 @@ impl TestbedGeneric {
impl Testbed for TestbedGeneric {
fn update(&mut self, mut params: TestbedUpdateParams) -> anyhow::Result<()> {
let layout = self.layout.clone();
let data = self.data.clone();
let mut layout = layout.borrow_mut();
let mut data = data.borrow_mut();
layout.update(
self.layout.update(
Vec2::new(params.width, params.height),
params.timestep_alpha,
)?;
while let Some(task) = data.tasks.pop_front() {
self.process_task(&task, &mut params, &mut layout, &mut data)?;
for task in self.tasks.drain() {
self.process_task(&task, &mut params, &mut data)?;
}
Ok(())
}
fn layout(&self) -> &RcLayout {
&self.layout
fn layout(&mut self) -> &mut Layout {
&mut self.layout
}
}