From 7c41a01122d602bd2732f766b3b27709662bb83e Mon Sep 17 00:00:00 2001
From: galister <22305755+galister@users.noreply.github.com>
Date: Wed, 10 Dec 2025 20:49:39 +0900
Subject: [PATCH] rework toast to use xml
---
wlx-overlay-s/src/assets/gui/toast.xml | 16 ++++
wlx-overlay-s/src/config_wayvr.rs | 2 +-
wlx-overlay-s/src/overlays/toast.rs | 120 ++++++++-----------------
3 files changed, 52 insertions(+), 86 deletions(-)
create mode 100644 wlx-overlay-s/src/assets/gui/toast.xml
diff --git a/wlx-overlay-s/src/assets/gui/toast.xml b/wlx-overlay-s/src/assets/gui/toast.xml
new file mode 100644
index 0000000..cb55233
--- /dev/null
+++ b/wlx-overlay-s/src/assets/gui/toast.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/wlx-overlay-s/src/config_wayvr.rs b/wlx-overlay-s/src/config_wayvr.rs
index 3c226b2..5640260 100644
--- a/wlx-overlay-s/src/config_wayvr.rs
+++ b/wlx-overlay-s/src/config_wayvr.rs
@@ -18,7 +18,7 @@ use crate::{
},
config::load_config_with_conf_d,
config_io,
- overlays::wayvr::{WayVRData, executable_exists_in_path},
+ overlays::wayvr::{executable_exists_in_path, WayVRData},
};
// Flat version of RelativeTo
diff --git a/wlx-overlay-s/src/overlays/toast.rs b/wlx-overlay-s/src/overlays/toast.rs
index 04954e9..695e1aa 100644
--- a/wlx-overlay-s/src/overlays/toast.rs
+++ b/wlx-overlay-s/src/overlays/toast.rs
@@ -5,21 +5,9 @@ use std::{
time::Instant,
};
+use anyhow::Context;
use glam::{vec3, Affine3A, Quat, Vec3};
-use wgui::{
- i18n::Translation,
- parser::parse_color_hex,
- renderer_vk::text::{FontWeight, TextStyle},
- taffy::{
- self,
- prelude::{auto, length, percent},
- },
- widget::{
- label::{WidgetLabel, WidgetLabelParams},
- rectangle::{WidgetRectangle, WidgetRectangleParams},
- util::WLength,
- },
-};
+use wgui::{i18n::Translation, widget::label::WidgetLabel};
use wlx_common::{
common::LeftRight,
overlays::{ToastDisplayMethod, ToastTopic},
@@ -28,7 +16,7 @@ use wlx_common::{
use crate::{
backend::task::{OverlayTask, TaskType},
- gui::panel::GuiPanel,
+ gui::panel::{GuiPanel, NewGuiPanelParams, OnCustomIdFunc},
state::AppState,
windowing::{window::OverlayWindowConfig, OverlaySelector, Z_ORDER_TOAST},
};
@@ -152,82 +140,44 @@ fn new_toast(toast: Toast, app: &mut AppState) -> Option {
};
let title = if toast.title.is_empty() {
- "Notification".into()
+ Translation::from_translation_key("TOAST.DEFAULT_TITLE")
} else {
- toast.title
+ Translation::from_raw_text(&toast.title)
};
- let mut panel = GuiPanel::new_blank(app, (), Default::default()).ok()?;
+ let on_custom_id: OnCustomIdFunc<()> =
+ Box::new(move |id, widget, _doc_params, layout, _parser_state, ()| {
+ if &*id == "toast_title" {
+ let mut label = layout
+ .state
+ .widgets
+ .get_as::(widget)
+ .context("toast.xml: missing element with id: toast_title")?;
+ let mut globals = layout.state.globals.get();
+ label.set_text_simple(&mut globals, title.clone());
+ }
+ if &*id == "toast_body" {
+ let mut label = layout
+ .state
+ .widgets
+ .get_as::(widget)
+ .context("toast.xml: missing element with id: toast_body")?;
+ let mut globals = layout.state.globals.get();
+ label.set_text_simple(&mut globals, Translation::from_raw_text(&toast.body));
+ }
+ Ok(())
+ });
- let globals = panel.layout.state.globals.clone();
-
- let (rect, _) = panel
- .layout
- .add_child(
- panel.layout.content_root_widget,
- WidgetRectangle::create(WidgetRectangleParams {
- color: parse_color_hex("#1e2030").unwrap(),
- border_color: parse_color_hex("#5e7090").unwrap(),
- border: 1.0,
- round: WLength::Units(4.0),
- ..Default::default()
- }),
- taffy::Style {
- align_items: Some(taffy::AlignItems::Center),
- justify_content: Some(taffy::JustifyContent::Center),
- flex_direction: taffy::FlexDirection::Column,
- padding: length(4.0),
- ..Default::default()
- },
- )
- .ok()?;
-
- let _ = panel.layout.add_child(
- rect.id,
- WidgetLabel::create(
- &mut globals.get(),
- WidgetLabelParams {
- content: Translation::from_raw_text(&title),
- style: TextStyle {
- color: parse_color_hex("#ffffff"),
- ..Default::default()
- },
- },
- ),
- taffy::Style {
- size: taffy::Size {
- width: percent(1.0),
- height: auto(),
- },
- padding: length(8.0),
+ let panel = GuiPanel::new_from_template(
+ app,
+ "gui/toast.xml",
+ (),
+ NewGuiPanelParams {
+ on_custom_id: Some(on_custom_id),
..Default::default()
},
- );
-
- let _ = panel.layout.add_child(
- rect.id,
- WidgetLabel::create(
- &mut globals.get(),
- WidgetLabelParams {
- content: Translation::from_raw_text(&toast.body),
- style: TextStyle {
- weight: Some(FontWeight::Bold),
- color: parse_color_hex("#eeeeee"),
- ..Default::default()
- },
- },
- ),
- taffy::Style {
- size: taffy::Size {
- width: percent(1.0),
- height: auto(),
- },
- padding: length(8.0),
- ..Default::default()
- },
- );
-
- panel.update_layout().ok()?;
+ )
+ .ok()?;
Some(OverlayWindowConfig {
name: TOAST_NAME.clone(),