palette selector improvements

This commit is contained in:
galister 2026-07-13 19:53:09 +09:00
parent 952b6e10b6
commit fd8a327395
13 changed files with 78 additions and 27 deletions

View File

@ -1,8 +1,8 @@
<layout>
<!-- id, text -->
<template name="ColorPaletteButton">
<Button id="${id}" width="350" flex_direction="column" justify_content="space_around"
color="${background}" hover_color="${background_variant}" border_color="${outline}" hover_border_color="${highlight}" padding="16" >
<Button id="${id}" width="350" flex_direction="column" justify_content="space_around" tooltip="${tooltip}" tooltip_side="bottom"
color="${background}" hover_color="${background_variant}" border_color="${outline}" hover_border_color="${highlight}" padding="16" margin="4" >
<label text="${text}" size="24" weight="bold" color="${on_background}" parent_color="ignore"/>
<div flex_direction="row" width="100%" justify_content="space_evenly" padding_top="16" >
<rectangle round="100%" width="32" height="32" color="${primary}" border="2" border_color="${on_primary}" />

View File

@ -185,7 +185,12 @@
"WHISPER_MODEL_HELP": "Zu verwendendes Whisper-Modell.\nGrößere Modelle liefern genauere\nErgebnisse, verbrauchen jedoch mehr VRAM.",
"DEFAULT_OVERLAY_SCALE": "Standardgröße des Overlays",
"DEFAULT_OVERLAY_SCALE_HELP": "Neue Overlays werden in dieser Skalierung erstellt.",
"COLOR_PALETTE": "Farbpalette"
"COLOR_PALETTE": "Farbpalette",
"COLOR_PALETTES": "Farbpaletten",
"COLOR_PALETTE_CURRENT": "Derzeit aktives Thema.",
"COLOR_PALETTE_ACTIVATE": "Klicken Sie hier, um dieses Thema zu verwenden.",
"APPLY_CHANGES_RESTART": "WayVR neu starten, um die Änderungen zu übernehmen?",
"COLOR_PALETTE_HELP": "Klicken, um Farbpaletten zu durchsuchen.\nUm eigene zu erstellen, besuche die Webseite!"
},
"HELLO": "Hallo!",
"AUDIO": {

View File

@ -97,7 +97,10 @@
"CAPTURE_METHOD_HELP": "Try changing this if you are\nexperiencing black or glitchy screens",
"COLOR_KEYING": "Color keying",
"COLOR_PALETTE": "Color palette",
"COLOR_PALETTE_HELP": "Click to browse color palettes.\nTo create custom ones, see website!",
"COLOR_PALETTES": "Color palettes",
"COLOR_PALETTE_CURRENT": "Currently active theme.",
"COLOR_PALETTE_ACTIVATE": "Click to use this theme.",
"APPLY_CHANGES_RESTART": "Restart WayVR to apply changes?",
"CLEAR_PIPEWIRE_TOKENS": "Clear PipeWire tokens",
"CLEAR_PIPEWIRE_TOKENS_HELP": "Prompt for screen selection on next start",

View File

@ -185,7 +185,12 @@
"WHISPER_MODEL_HELP": "Modelo de Whisper a utilizar.\nLos modelos más grandes producen\nresultados más precisos, pero consumen más VRAM.",
"DEFAULT_OVERLAY_SCALE": "Tamaño de la superposición predeterminado",
"DEFAULT_OVERLAY_SCALE_HELP": "Genera nuevas capas de superposición con esta escala.",
"COLOR_PALETTE": "Paleta de colores"
"COLOR_PALETTE": "Paleta de colores",
"COLOR_PALETTES": "Paletas de colores",
"COLOR_PALETTE_CURRENT": "Tema actualmente activo.",
"COLOR_PALETTE_ACTIVATE": "Haz clic para usar este tema.",
"APPLY_CHANGES_RESTART": "¿Reiniciar WayVR para aplicar los cambios?",
"COLOR_PALETTE_HELP": "Haz clic para explorar paletas de colores.\nPara crear paletas personalizadas, ¡visita el sitio web!"
},
"HELLO": "¡Hola!",
"AUDIO": {

View File

@ -206,7 +206,12 @@
"WHISPER_MODEL_HELP": "Modello Whisper da utilizzare.\nI modelli più grandi producono risultati\npiù accurati, ma consumano più VRAM.",
"DEFAULT_OVERLAY_SCALE": "Dimensioni overlay predefinite",
"DEFAULT_OVERLAY_SCALE_HELP": "Genera nuovi overlay con questa scala.",
"COLOR_PALETTE": "Tavolozza colori"
"COLOR_PALETTE": "Tavolozza colori",
"COLOR_PALETTES": "Tavolozze colori",
"COLOR_PALETTE_CURRENT": "Tema attualmente attivo.",
"COLOR_PALETTE_ACTIVATE": "Clicca per usare questo tema.",
"APPLY_CHANGES_RESTART": "Riavviare WayVR per applicare le modifiche?",
"COLOR_PALETTE_HELP": "Clicca per sfogliare le palette di colori.\nPer crearne di personalizzate, visita il sito web!"
},
"APPLICATION_LAUNCHER": "Lanciatore applicazioni",
"APPLICATION_STARTED": "Applicazione avviata",

View File

@ -185,7 +185,12 @@
"WHISPER_MODEL_HELP": "使用するWhisperモデル。\nモデルが大きいほど精度は向上しますが、\nVRAMの消費量が増加します。",
"DEFAULT_OVERLAY_SCALE": "デフォルトのオーバーレイサイズ",
"DEFAULT_OVERLAY_SCALE_HELP": "新しいオーバーレイをこのスケールで生成します。",
"COLOR_PALETTE": "カラーパレット"
"COLOR_PALETTE": "カラーパレット",
"COLOR_PALETTES": "カラーパレット",
"COLOR_PALETTE_CURRENT": "現在有効なテーマ。",
"COLOR_PALETTE_ACTIVATE": "クリックしてこのテーマを適用します。",
"APPLY_CHANGES_RESTART": "変更を適用するためにWayVRを再起動しますか",
"COLOR_PALETTE_HELP": "クリックしてカラーパレットを選択してください。\nカスタムパレットの作成については、ウェブサイトを参照してください"
},
"HELLO": "こんにちは!",
"AUDIO": {

View File

@ -180,7 +180,12 @@
"WHISPER_MODEL_HELP": "Model Whisper do wykorzystania.\nWiększe modele dają dokładniejsze\nwyniki, ale zużywają więcej pamięci VRAM.",
"DEFAULT_OVERLAY_SCALE": "Domyślny rozmiar nakładki",
"DEFAULT_OVERLAY_SCALE_HELP": "Twórz nowe nakładki w tej skali.",
"COLOR_PALETTE": "Paleta kolorów"
"COLOR_PALETTE": "Paleta kolorów",
"COLOR_PALETTES": "Palety kolorów",
"COLOR_PALETTE_CURRENT": "Obecnie aktywny motyw.",
"COLOR_PALETTE_ACTIVATE": "Kliknij, aby użyć tego motywu.",
"APPLY_CHANGES_RESTART": "Zrestartować WayVR, aby zastosować zmiany?",
"COLOR_PALETTE_HELP": "Kliknij, aby przeglądać palety kolorów.\nAby stworzyć własne, odwiedź stronę internetową!"
},
"APPLICATION_LAUNCHER": "Uruchamiacz aplikacji",
"APPLICATIONS": "Aplikacje",

View File

@ -206,7 +206,12 @@
"WHISPER_MODEL_HELP": "要使用的 Whisper 模型。\n模型越大结果越准确\n但消耗的显存 (VRAM) 越多。",
"DEFAULT_OVERLAY_SCALE": "默认叠加层大小",
"DEFAULT_OVERLAY_SCALE_HELP": "以该比例生成新的叠加层。",
"COLOR_PALETTE": "调色板"
"COLOR_PALETTE": "调色板",
"COLOR_PALETTES": "配色方案",
"COLOR_PALETTE_CURRENT": "当前激活的主题。",
"COLOR_PALETTE_ACTIVATE": "点击以使用此主题。",
"APPLY_CHANGES_RESTART": "重启 WayVR 以应用更改吗?",
"COLOR_PALETTE_HELP": "点击浏览配色方案。\n如需创建自定义配色请参阅网站"
},
"APPLICATION_LAUNCHER": "应用启动器",
"APPLICATION_STARTED": "应用已启动",

View File

@ -43,7 +43,7 @@ mod tab_space_drag;
mod tab_troubleshooting;
#[derive(Clone)]
enum TabNameEnum {
pub(crate) enum TabNameEnum {
AutostartApps,
Controls,
Features,
@ -291,7 +291,7 @@ impl<T> Tab<T> for TabSettings<T> {
// Sorted alphabetically
#[allow(clippy::enum_variant_names)]
#[derive(Clone, Copy, Eq, PartialEq, AsRefStr, EnumString)]
enum SettingType {
pub(crate) enum SettingType {
AllowSliding,
BlockGameInput,
BlockGameInputIgnoreWatch,

View File

@ -44,6 +44,7 @@ impl SettingsTab for State {
self.globals.clone(),
self.popup_color_palettes.clone(),
self.settings_tasks.clone(),
par.general_config.color_palette.clone(),
);
}
}

View File

@ -2,7 +2,6 @@ use std::{marker::PhantomData, rc::Rc};
use wgui::{
assets::AssetPath,
color::WguiColorName,
components::button::ComponentButton,
globals::WguiGlobals,
layout::{Layout, WidgetID},

View File

@ -1,4 +1,4 @@
use std::rc::Rc;
use std::{rc::Rc, sync::Arc};
use wgui::{
assets::AssetPath,
color::WguiColorName,
@ -32,6 +32,7 @@ pub struct Params<'a> {
pub parent_id: WidgetID,
pub frontend_tasks: &'a FrontendTasks,
pub settings_tasks: Tasks<SettingsTask>,
pub current_palette: Arc<str>,
}
pub struct View {
@ -40,6 +41,7 @@ pub struct View {
globals: WguiGlobals,
popup_dialog: PopupHolder<views::dialog_box::View>,
settings_tasks: Tasks<SettingsTask>,
chosen_palette: Option<Arc<str>>,
}
impl ViewTrait for View {
@ -49,9 +51,7 @@ impl ViewTrait for View {
for task in self.tasks.drain() {
match task {
Task::SelectPalette(profile) => {
par.general_config.color_palette = profile.into();
par.config_change_kind.replace(ConfigChangeKind::WguiThemeChange);
self.chosen_palette = Some(profile.into());
self.show_restart_dialog_box()?;
}
Task::Cancel => {
@ -59,6 +59,11 @@ impl ViewTrait for View {
close_dialog();
}
Task::Restart => {
if let Some(palette) = self.chosen_palette.take() {
par.general_config.color_palette = palette;
par.config_change_kind.replace(ConfigChangeKind::WguiThemeChange);
}
self.settings_tasks.push(SettingsTask::RestartSoftware);
}
}
@ -74,13 +79,12 @@ macro_rules! insert_colors {
$( $key:literal => $color:ident ),* $(,)?
) => {
$(
$params.insert(
$params.insert_str(
$key,
WguiColorName::$color
.to_wgui_color()
.resolve($palette)
.to_hex()
.as_str()
);
)*
};
@ -103,10 +107,19 @@ impl View {
for (idx, (name, palette)) in PALETTES.iter().enumerate() {
let id = format!("profile_btn_{idx}");
let is_current = &*params.current_palette == *name;
let mut cell_params = TemplateParams::new();
cell_params.insert("id", &id);
cell_params.insert("text", name);
if is_current {
cell_params.insert_str("text", format!("{name}"));
cell_params.insert("tooltip", "APP_SETTINGS.COLOR_PALETTE_CURRENT");
} else {
cell_params.insert("text", name);
cell_params.insert("tooltip", "APP_SETTINGS.COLOR_PALETTE_ACTIVATE");
}
insert_colors!(
cell_params,
palette,
@ -133,14 +146,16 @@ impl View {
cell_params,
)?;
let btn = parser_state.fetch_component_as::<ComponentButton>(&id)?;
let tasks_clone = tasks.clone();
btn.on_click(Rc::new({
move |_common, _e| {
tasks_clone.push(Task::SelectPalette(name.to_string()));
Ok(())
}
}));
if !is_current {
let btn = parser_state.fetch_component_as::<ComponentButton>(&id)?;
let tasks_clone = tasks.clone();
btn.on_click(Rc::new({
move |_common, _e| {
tasks_clone.push(Task::SelectPalette(name.to_string()));
Ok(())
}
}));
}
}
Ok(Self {
@ -149,6 +164,7 @@ impl View {
globals: params.globals.clone(),
popup_dialog,
settings_tasks: params.settings_tasks,
chosen_palette: None,
})
}
@ -197,6 +213,7 @@ pub fn mount_popup(
globals: WguiGlobals,
popup: PopupHolder<View>,
settings_tasks: Tasks<SettingsTask>,
current_palette: Arc<str>,
) {
frontend_tasks
.clone()
@ -209,6 +226,7 @@ pub fn mount_popup(
parent_id: data.id_content,
frontend_tasks: &frontend_tasks,
settings_tasks,
current_palette,
})?;
popup.set_view(data.handle, view, None);

View File

@ -1,6 +1,6 @@
use std::{cell::RefCell, rc::Rc};
use cosmic_text::{Attrs, AttrsList, BorrowedWithFontSystem, Buffer, Metrics, Scroll, Shaping, Wrap};
use cosmic_text::{Attrs, AttrsList, BorrowedWithFontSystem, Buffer, Metrics, Shaping, Wrap};
use slotmap::Key;
use taffy::AvailableSpace;