feat: use contextual label for full frame 3d base on stereo mode

show Full-SBS when stereo is LeftRight or RightLeft
show Full-TAB when stereo is TopBottom
show Full-BAT when stereo is BottomTop
This commit is contained in:
amoshydra
2026-01-11 19:12:44 +08:00
committed by galister
parent ce5191ddd1
commit b48320c7bc
8 changed files with 53 additions and 8 deletions

View File

@@ -55,7 +55,10 @@
"SPLIT_RIGHT_LEFT": "RECHTS→LINKS",
"SPLIT_TOP_BOTTOM": "OBEN→UNTEN",
"SPLIT_BOTTOM_TOP": "UNTEN→OBEN",
"FULL_FRAME": "Voll 3D"
"FULL_FRAME": "Voll 3D",
"FULL_FRAME_SBS": "Full-SBS",
"FULL_FRAME_TAB": "Full-TAB",
"FULL_FRAME_BAT": "Full-BAT"
},
"STEREO_3D_MODE_": {},
"ALIGN_TO_HMD": "An HMD ausrichten",

View File

@@ -45,7 +45,10 @@
"SPLIT_RIGHT_LEFT": "RIGHT→LEFT",
"SPLIT_TOP_BOTTOM": "TOP→BOTTOM",
"TITLE": "3D Stereo Mode",
"FULL_FRAME": "Full 3D"
"FULL_FRAME": "Full 3D",
"FULL_FRAME_SBS": "Full-SBS",
"FULL_FRAME_TAB": "Full-TAB",
"FULL_FRAME_BAT": "Full-BAT"
},
"MOUSE": {
"TITLE": "Mouse fixes",

View File

@@ -55,7 +55,10 @@
"SPLIT_RIGHT_LEFT": "DERECHA→IZQUIERDA",
"SPLIT_TOP_BOTTOM": "ARRIBA→ABAJO",
"SPLIT_BOTTOM_TOP": "ABAJO→ARRIBA",
"FULL_FRAME": "3D completo"
"FULL_FRAME": "3D completo",
"FULL_FRAME_SBS": "Full-SBS",
"FULL_FRAME_TAB": "Full-TAB",
"FULL_FRAME_BAT": "Full-BAT"
},
"STEREO_3D_MODE_": {},
"ALIGN_TO_HMD": "Alinear al HMD",

View File

@@ -45,7 +45,10 @@
"SPLIT_RIGHT_LEFT": "DESTRA→SINISTRA",
"SPLIT_TOP_BOTTOM": "TOP→BOTTOM",
"TITLE": "Modalità Stereo 3D",
"FULL_FRAME": "3D Completo"
"FULL_FRAME": "3D Completo",
"FULL_FRAME_SBS": "Full-SBS",
"FULL_FRAME_TAB": "Full-TAB",
"FULL_FRAME_BAT": "Full-BAT"
},
"MOUSE": {
"TITLE": "Correzioni del mouse",

View File

@@ -54,7 +54,10 @@
"SPLIT_RIGHT_LEFT": "右→左",
"SPLIT_TOP_BOTTOM": "上→下",
"SPLIT_BOTTOM_TOP": "下→上",
"FULL_FRAME": "フル3D"
"FULL_FRAME": "フル3D",
"FULL_FRAME_SBS": "フルSBS",
"FULL_FRAME_TAB": "フルTAB",
"FULL_FRAME_BAT": "フルBAT"
},
"ALIGN_TO_HMD": "常にHMDの方を向く",
"MOUSE": {

View File

@@ -54,7 +54,10 @@
"SPLIT_RIGHT_LEFT": "PRAWO→LEWO",
"SPLIT_TOP_BOTTOM": "GÓRA→DÓŁ",
"TITLE": "Tryb stereoskopowy 3D",
"FULL_FRAME": "Pełny 3D"
"FULL_FRAME": "Pełny 3D",
"FULL_FRAME_SBS": "Full-SBS",
"FULL_FRAME_TAB": "Full-TAB",
"FULL_FRAME_BAT": "Full-BAT"
},
"ALIGN_TO_HMD": "Dopasuj do HMD",
"MOUSE": {

View File

@@ -11,6 +11,7 @@ use slotmap::Key;
use wgui::{
components::{button::ComponentButton, checkbox::ComponentCheckbox, slider::ComponentSlider},
event::{CallbackDataCommon, EventAlterables, EventCallback},
i18n::Translation,
parser::Fetchable,
widget::EventResult,
};
@@ -28,7 +29,7 @@ use crate::{
mouse::new_mouse_tab_handler,
pos::{PosTabState, new_pos_tab_handler},
sprite_tab::SpriteTabHandler,
stereo::new_stereo_tab_handler,
stereo::{get_stereo_full_frame_translation, new_stereo_tab_handler},
tab::ButtonPaneTabSwitcher,
},
state::AppState,
@@ -502,6 +503,13 @@ fn reset_panel(
.tabs
.set_tab_visible(&mut common, "stereo", true);
panel.state.stereo.reset(&mut common, &stereo);
// Set the checkbox label based on stereo mode
let translation = get_stereo_full_frame_translation(&stereo);
let c = panel
.parser_state
.fetch_component_as::<ComponentCheckbox>("stereo_full_frame_box")?;
c.set_text(&mut common, Translation::from_translation_key(translation));
} else {
panel
.state

View File

@@ -2,6 +2,7 @@ use crate::overlays::edit::{
EditModeWrapPanel,
sprite_tab::{SpriteTabHandler, SpriteTabKey},
};
use wgui::{components::checkbox::ComponentCheckbox, i18n::Translation, parser::Fetchable};
use wlx_common::overlays::{BackendAttribValue, StereoMode};
static STEREO_NAMES: [&str; 5] = ["none", "leftright", "rightleft", "topbottom", "bottomtop"];
@@ -9,12 +10,21 @@ static STEREO_NAMES: [&str; 5] = ["none", "leftright", "rightleft", "topbottom",
pub fn new_stereo_tab_handler(
panel: &mut EditModeWrapPanel,
) -> anyhow::Result<SpriteTabHandler<StereoMode>> {
// Fetch the checkbox component first, before creating the closure
let checkbox = panel
.parser_state
.fetch_component_as::<ComponentCheckbox>("stereo_full_frame_box")?;
SpriteTabHandler::new(
panel,
"stereo",
&STEREO_NAMES,
Box::new(|_common, state| {
Box::new(move |common, state| {
let stereo = *state;
let translation = get_stereo_full_frame_translation(&stereo);
checkbox.set_text(common, Translation::from_translation_key(translation));
Box::new(move |app, owc| {
owc.backend
.set_attrib(app, BackendAttribValue::Stereo(stereo));
@@ -48,3 +58,12 @@ impl SpriteTabKey for StereoMode {
}
}
}
pub fn get_stereo_full_frame_translation(stereo: &StereoMode) -> &'static str {
match stereo {
StereoMode::LeftRight | StereoMode::RightLeft => "EDIT_MODE.STEREO_3D_MODE.FULL_FRAME_SBS",
StereoMode::TopBottom => "EDIT_MODE.STEREO_3D_MODE.FULL_FRAME_TAB",
StereoMode::BottomTop => "EDIT_MODE.STEREO_3D_MODE.FULL_FRAME_BAT",
StereoMode::None => "EDIT_MODE.STEREO_3D_MODE.FULL_FRAME",
}
}