From ea90853e561d26590d60df8d7097db8beb2a4e85 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Wed, 17 Dec 2025 15:54:43 +0900 Subject: [PATCH] custom panels --- wgui/src/parser/widget_label.rs | 4 +- wgui/src/parser/widget_sprite.rs | 2 +- wgui/src/renderer_vk/text/custom_glyph.rs | 5 +- wgui/src/widget/sprite.rs | 20 +++- wlx-common/src/config.rs | 7 +- .../src/assets/edit/{window.svg => panel.svg} | 0 .../assets/edit/{monitor.svg => screen.svg} | 0 .../assets/edit/{desktop.svg => wayvr.svg} | 0 wlx-overlay-s/src/assets/gui/watch.xml | 19 ++-- wlx-overlay-s/src/backend/openvr/mod.rs | 2 +- wlx-overlay-s/src/graphics/mod.rs | 2 +- wlx-overlay-s/src/gui/panel/mod.rs | 8 +- wlx-overlay-s/src/overlays/custom.rs | 30 ++--- wlx-overlay-s/src/overlays/edit/mod.rs | 11 +- wlx-overlay-s/src/overlays/edit/sprite_tab.rs | 4 +- wlx-overlay-s/src/overlays/watch.rs | 103 ++++++++++++++---- wlx-overlay-s/src/windowing/manager.rs | 20 +++- wlx-overlay-s/src/windowing/window.rs | 5 +- 18 files changed, 181 insertions(+), 61 deletions(-) rename wlx-overlay-s/src/assets/edit/{window.svg => panel.svg} (100%) rename wlx-overlay-s/src/assets/edit/{monitor.svg => screen.svg} (100%) rename wlx-overlay-s/src/assets/edit/{desktop.svg => wayvr.svg} (100%) diff --git a/wgui/src/parser/widget_label.rs b/wgui/src/parser/widget_label.rs index 71c567ef..50a57f1c 100644 --- a/wgui/src/parser/widget_label.rs +++ b/wgui/src/parser/widget_label.rs @@ -2,9 +2,9 @@ use crate::{ i18n::Translation, layout::WidgetID, parser::{ - AttribPair, ParserContext, ParserFile, parse_check_i32, parse_children, parse_i32, parse_widget_universal, - print_invalid_attrib, + parse_children, parse_i32, parse_widget_universal, print_invalid_attrib, style::{parse_style, parse_text_style}, + AttribPair, ParserContext, ParserFile, }, widget::label::{WidgetLabel, WidgetLabelParams}, }; diff --git a/wgui/src/parser/widget_sprite.rs b/wgui/src/parser/widget_sprite.rs index fc86f165..8c3735ed 100644 --- a/wgui/src/parser/widget_sprite.rs +++ b/wgui/src/parser/widget_sprite.rs @@ -1,7 +1,7 @@ use crate::{ assets::AssetPath, layout::WidgetID, - parser::{AttribPair, ParserContext, ParserFile, parse_children, parse_widget_universal, style::parse_style}, + parser::{parse_children, parse_widget_universal, style::parse_style, AttribPair, ParserContext, ParserFile}, renderer_vk::text::custom_glyph::{CustomGlyphContent, CustomGlyphData}, widget::sprite::{WidgetSprite, WidgetSpriteParams}, }; diff --git a/wgui/src/renderer_vk/text/custom_glyph.rs b/wgui/src/renderer_vk/text/custom_glyph.rs index 600942fd..a8b41bc7 100644 --- a/wgui/src/renderer_vk/text/custom_glyph.rs +++ b/wgui/src/renderer_vk/text/custom_glyph.rs @@ -1,8 +1,8 @@ use std::{ f32, sync::{ - Arc, atomic::{AtomicUsize, Ordering}, + Arc, }, }; @@ -14,6 +14,7 @@ use crate::{assets::AssetPath, globals::WguiGlobals}; static AUTO_INCREMENT: AtomicUsize = AtomicUsize::new(0); +/// The raw content of a glyph. #[derive(Debug, Clone)] pub enum CustomGlyphContent { Svg(Box), @@ -43,6 +44,8 @@ impl CustomGlyphContent { } } +/// The cached contents of a glyph. +/// Clone and reuse this to avoid atlasing the same content twice. #[derive(Debug, Clone)] pub struct CustomGlyphData { pub(super) id: usize, diff --git a/wgui/src/widget/sprite.rs b/wgui/src/widget/sprite.rs index 5949f148..bfb755b8 100644 --- a/wgui/src/widget/sprite.rs +++ b/wgui/src/widget/sprite.rs @@ -8,8 +8,8 @@ use crate::{ globals::Globals, layout::WidgetID, renderer_vk::text::{ - DEFAULT_METRICS, custom_glyph::{CustomGlyph, CustomGlyphData}, + DEFAULT_METRICS, }, }; @@ -23,7 +23,7 @@ pub struct WidgetSpriteParams { #[derive(Debug, Default)] pub struct WidgetSprite { - pub params: WidgetSpriteParams, + params: WidgetSpriteParams, id: WidgetID, } @@ -34,6 +34,22 @@ impl WidgetSprite { id: WidgetID::null(), })) } + + pub fn set_color(&mut self, color: drawing::Color) { + self.params.color = Some(color); + } + + pub fn get_color(&self) -> Option { + self.params.color + } + + pub fn set_content(&mut self, content: Option) { + self.params.glyph_data = content; + } + + pub fn get_content(&self) -> Option { + self.params.glyph_data.clone() + } } impl WidgetObj for WidgetSprite { diff --git a/wlx-common/src/config.rs b/wlx-common/src/config.rs index e4c4f978..88fc2487 100644 --- a/wlx-common/src/config.rs +++ b/wlx-common/src/config.rs @@ -88,7 +88,7 @@ fn def_timezones() -> Vec { } } -const fn def_screens() -> AStrSet { +const fn def_astrset_empty() -> AStrSet { AStrSet::new() } @@ -187,7 +187,10 @@ pub struct GeneralConfig { #[serde(default = "def_false")] pub double_cursor_fix: bool, - #[serde(default = "def_screens")] + #[serde(default = "def_astrset_empty")] + pub custom_panels: AStrSet, + + #[serde(default = "def_astrset_empty")] pub show_screens: AStrSet, #[serde(default = "def_curve_values")] diff --git a/wlx-overlay-s/src/assets/edit/window.svg b/wlx-overlay-s/src/assets/edit/panel.svg similarity index 100% rename from wlx-overlay-s/src/assets/edit/window.svg rename to wlx-overlay-s/src/assets/edit/panel.svg diff --git a/wlx-overlay-s/src/assets/edit/monitor.svg b/wlx-overlay-s/src/assets/edit/screen.svg similarity index 100% rename from wlx-overlay-s/src/assets/edit/monitor.svg rename to wlx-overlay-s/src/assets/edit/screen.svg diff --git a/wlx-overlay-s/src/assets/edit/desktop.svg b/wlx-overlay-s/src/assets/edit/wayvr.svg similarity index 100% rename from wlx-overlay-s/src/assets/edit/desktop.svg rename to wlx-overlay-s/src/assets/edit/wayvr.svg diff --git a/wlx-overlay-s/src/assets/gui/watch.xml b/wlx-overlay-s/src/assets/gui/watch.xml index f656b4f2..ef7bf327 100644 --- a/wlx-overlay-s/src/assets/gui/watch.xml +++ b/wlx-overlay-s/src/assets/gui/watch.xml @@ -24,7 +24,7 @@ @@ -34,14 +34,14 @@ tooltip="WATCH.TOGGLE_FOR_CURRENT_SET" _press="::EditModeOverlayToggle ${idx}" align_items="center" height="40"> - -