refactor tasks

This commit is contained in:
galister
2025-12-10 17:12:26 +09:00
parent c6aa84f6cb
commit 01fea96545
16 changed files with 255 additions and 259 deletions

View File

@@ -7,7 +7,7 @@ use wgui::{
widget::rectangle::WidgetRectangle,
};
use crate::{backend::task::OverlayTask, overlays::edit::EditModeWrapPanel, state::AppState};
use crate::{backend::task::ModifyOverlayTask, overlays::edit::EditModeWrapPanel, state::AppState};
#[derive(Default)]
pub(super) struct InteractLockHandler {
@@ -53,7 +53,7 @@ impl InteractLockHandler {
&mut self,
common: &mut CallbackDataCommon,
app: &mut AppState,
) -> Box<OverlayTask> {
) -> Box<ModifyOverlayTask> {
let defaults = app.wgui_globals.get().defaults.clone();
let rect_color = self.color;

View File

@@ -18,7 +18,7 @@ use wgui::{
use crate::{
backend::{
input::HoverResult,
task::{TaskContainer, TaskType},
task::{OverlayTask, TaskContainer, TaskType},
},
gui::panel::{button::BUTTON_EVENTS, GuiPanel, NewGuiPanelParams, OnCustomAttribFunc},
overlays::edit::{
@@ -247,7 +247,8 @@ fn make_edit_panel(app: &mut AppState) -> anyhow::Result<EditModeWrapPanel> {
"::EditModeToggleLock" => Box::new(move |common, _data, app, state| {
let sel = OverlaySelector::Id(*state.id.borrow());
let task = state.lock.toggle(common, app);
app.tasks.enqueue(TaskType::Overlay(sel, task));
app.tasks
.enqueue(TaskType::Overlay(OverlayTask::Modify(sel, task)));
Ok(EventResult::Consumed)
}),
"::EditModeTab" => {
@@ -262,7 +263,8 @@ fn make_edit_panel(app: &mut AppState) -> anyhow::Result<EditModeWrapPanel> {
Box::new(move |common, _data, app, state| {
let sel = OverlaySelector::Id(*state.id.borrow());
let task = state.pos.pos_button_clicked(common, &pos_key);
app.tasks.enqueue(TaskType::Overlay(sel, task));
app.tasks
.enqueue(TaskType::Overlay(OverlayTask::Modify(sel, task)));
Ok(EventResult::Consumed)
})
}
@@ -275,12 +277,12 @@ fn make_edit_panel(app: &mut AppState) -> anyhow::Result<EditModeWrapPanel> {
if state.delete.pressed.elapsed() < Duration::from_secs(1) {
return Ok(EventResult::Pass);
}
app.tasks.enqueue(TaskType::Overlay(
app.tasks.enqueue(TaskType::Overlay(OverlayTask::Modify(
OverlaySelector::Id(*state.id.borrow()),
Box::new(move |_app, owc| {
owc.active_state = None;
}),
));
)));
Ok(EventResult::Consumed)
}),
_ => return,
@@ -384,10 +386,10 @@ fn set_up_slider(
let mut tasks = tasks.borrow_mut();
let e_value = e.value;
tasks.enqueue(TaskType::Overlay(
tasks.enqueue(TaskType::Overlay(OverlayTask::Modify(
OverlaySelector::Id(*overlay_id.borrow()),
Box::new(move |app, owc| callback(app, owc, e_value)),
));
)));
Ok(())
}));
@@ -408,10 +410,10 @@ fn set_up_checkbox(
let mut tasks = tasks.borrow_mut();
let e_checked = e.checked;
tasks.enqueue(TaskType::Overlay(
tasks.enqueue(TaskType::Overlay(OverlayTask::Modify(
OverlaySelector::Id(*overlay_id.borrow()),
Box::new(move |app, owc| callback(app, owc, e_checked)),
));
)));
Ok(())
}));

View File

@@ -7,7 +7,9 @@ use wgui::{
};
use wlx_common::{common::LeftRight, windowing::Positioning};
use crate::{backend::task::OverlayTask, overlays::edit::EditModeWrapPanel, windowing::window};
use crate::{
backend::task::ModifyOverlayTask, overlays::edit::EditModeWrapPanel, windowing::window,
};
static POS_NAMES: [&str; 6] = ["static", "anchored", "floating", "hmd", "hand_l", "hand_r"];
@@ -89,7 +91,7 @@ impl PositioningHandler {
&mut self,
common: &mut CallbackDataCommon,
key: &str,
) -> Box<OverlayTask> {
) -> Box<ModifyOverlayTask> {
self.change_highlight(common, key);
let pos = key_to_pos(key);

View File

@@ -11,7 +11,7 @@ use wlx_common::windowing::OverlayWindowState;
use crate::{
backend::{
input::{HoverResult, PointerHit},
task::TaskType,
task::{OverlayTask, TaskType},
},
state::{AppSession, AppState},
subsystem::hid::WheelDelta,
@@ -73,21 +73,21 @@ impl OverlayBackend for MirrorBackend {
let capture = PipewireCapture::new(self.name.clone(), node_id);
self.renderer =
Some(ScreenBackend::new_raw(self.name.clone(), Box::new(capture)));
app.tasks.enqueue(TaskType::Overlay(
app.tasks.enqueue(TaskType::Overlay(OverlayTask::Modify(
OverlaySelector::Name(self.name.clone()),
Box::new(|app, o| {
o.activate(app);
}),
));
)));
}
Err(e) => {
log::warn!("Failed to create mirror due to PipeWire error: {e:?}");
self.renderer = None;
// drop self
app.tasks
.enqueue(TaskType::DropOverlay(OverlaySelector::Name(
.enqueue(TaskType::Overlay(OverlayTask::Drop(OverlaySelector::Name(
self.name.clone(),
)));
))));
}
}
}

View File

@@ -5,7 +5,7 @@ use std::{
time::Instant,
};
use glam::{Affine3A, Quat, Vec3, vec3};
use glam::{vec3, Affine3A, Quat, Vec3};
use wgui::{
i18n::Translation,
parser::parse_color_hex,
@@ -27,10 +27,10 @@ use wlx_common::{
};
use crate::{
backend::task::TaskType,
backend::task::{OverlayTask, TaskType},
gui::panel::GuiPanel,
state::AppState,
windowing::{OverlaySelector, Z_ORDER_TOAST, window::OverlayWindowConfig},
windowing::{window::OverlayWindowConfig, OverlaySelector, Z_ORDER_TOAST},
};
const FONT_SIZE: isize = 16;
@@ -86,27 +86,29 @@ impl Toast {
// drop any toast that was created before us.
// (DropOverlay only drops overlays that were
// created before current frame)
app.tasks
.enqueue_at(TaskType::DropOverlay(selector.clone()), instant);
app.tasks.enqueue_at(
TaskType::Overlay(OverlayTask::Drop(selector.clone())),
instant,
);
// CreateOverlay only creates the overlay if
// the selector doesn't exist yet, so in case
// multiple toasts are submitted for the same
// frame, only the first one gets created
app.tasks.enqueue_at(
TaskType::CreateOverlay(
TaskType::Overlay(OverlayTask::Create(
selector.clone(),
Box::new(move |app| {
let maybe_toast = new_toast(self, app);
app.tasks.enqueue_at(
// at timeout, drop the overlay by ID instead
// in order to avoid dropping any newer toasts
TaskType::DropOverlay(selector),
TaskType::Overlay(OverlayTask::Drop(selector)),
destroy_at,
);
maybe_toast
}),
),
)),
instant,
);
}

View File

@@ -14,26 +14,26 @@ use wgui::{
parser::Fetchable,
renderer_vk::text::custom_glyph::CustomGlyphData,
taffy,
widget::{EventResult, sprite::WidgetSprite},
widget::{sprite::WidgetSprite, EventResult},
};
use wlx_common::windowing::{OverlayWindowState, Positioning};
use crate::{
backend::{
input::TrackedDeviceRole,
task::{ManagerTask, TaskType},
task::{OverlayTask, TaskType},
},
gui::{
panel::{GuiPanel, NewGuiPanelParams, OnCustomAttribFunc, button::BUTTON_EVENTS},
panel::{button::BUTTON_EVENTS, GuiPanel, NewGuiPanelParams, OnCustomAttribFunc},
timer::GuiTimer,
},
overlays::edit::LongPressButtonState,
state::AppState,
windowing::{
OverlaySelector, Z_ORDER_WATCH,
backend::{OverlayEventData, OverlayMeta},
manager::MAX_OVERLAY_SETS,
window::{OverlayWindowConfig, OverlayWindowData},
OverlaySelector, Z_ORDER_WATCH,
},
};
@@ -81,11 +81,11 @@ pub fn create_watch(app: &mut AppState) -> anyhow::Result<OverlayWindowConfig> {
return Ok(EventResult::Consumed);
}
app.tasks
.enqueue(TaskType::Manager(ManagerTask::DeleteActiveSet));
.enqueue(TaskType::Overlay(OverlayTask::DeleteActiveSet));
Ok(EventResult::Consumed)
}),
"::EditModeAddSet" => Box::new(move |_common, _data, app, _state| {
app.tasks.enqueue(TaskType::Manager(ManagerTask::AddSet));
app.tasks.enqueue(TaskType::Overlay(OverlayTask::AddSet));
Ok(EventResult::Consumed)
}),
"::EditModeOverlayToggle" => {
@@ -100,7 +100,7 @@ pub fn create_watch(app: &mut AppState) -> anyhow::Result<OverlayWindowConfig> {
return Ok(EventResult::Consumed);
};
app.tasks.enqueue(TaskType::Overlay(
app.tasks.enqueue(TaskType::Overlay(OverlayTask::Modify(
OverlaySelector::Id(overlay.id),
Box::new(move |app, owc| {
if owc.active_state.is_none() {
@@ -109,7 +109,7 @@ pub fn create_watch(app: &mut AppState) -> anyhow::Result<OverlayWindowConfig> {
owc.deactivate();
}
}),
));
)));
Ok(EventResult::Consumed)
})
}

View File

@@ -19,7 +19,7 @@ use wlx_common::windowing::OverlayWindowState;
use crate::{
backend::{
input::{self, HoverResult},
task::TaskType,
task::{OverlayTask, TaskType},
wayvr::{
self, display,
server_ipc::{gen_args_vec, gen_env_vec},
@@ -332,12 +332,12 @@ where
WvrStateChanged::DashboardHidden
}));
app.tasks.enqueue(TaskType::Overlay(
app.tasks.enqueue(TaskType::Overlay(OverlayTask::Modify(
OverlaySelector::Id(overlay_id),
Box::new(move |app, o| {
o.toggle(app);
}),
));
)));
Ok(())
}
@@ -429,12 +429,12 @@ where
.data
.state
.set_display_visible(display_handle, visible);
app.tasks.enqueue(TaskType::Overlay(
app.tasks.enqueue(TaskType::Overlay(OverlayTask::Modify(
OverlaySelector::Id(overlay_id),
Box::new(move |app, o| {
o.toggle(app);
}),
));
)));
}
}
wayvr::WayVRSignal::DisplayWindowLayout(display_handle, layout) => {
@@ -448,7 +448,9 @@ where
}
wayvr::WayVRSignal::DropOverlay(overlay_id) => {
app.tasks
.enqueue(TaskType::DropOverlay(OverlaySelector::Id(overlay_id)));
.enqueue(TaskType::Overlay(OverlayTask::Drop(OverlaySelector::Id(
overlay_id,
))));
}
wayvr::WayVRSignal::Haptics(haptics) => {
wayvr.pending_haptics = Some(haptics);