forked from 1b-agent/opencadstudio-upstream
feat(command-line): adjustable command line opacity
COMMANDLINEOPACITY (20-100 percent, default 100) and a slider under Options > Display make the floating command line's panels see-through, so the drawing stays visible behind it. The input field stays opaque for legibility. The value is an application setting that persists. Refs #1494 Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
5a6f69f3f8
commit
5dd05bca18
32 files changed
+98
-5
No files matched your search
@@ -294,6 +294,7 @@ command-copy =
|
||||
.mode = COPY أدخل خيار وضع النسخ [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = شفافية سطر الأوامر
|
||||
.txtexp-no-text-selected = TXTEXP: لم يتم تحديد نص.
|
||||
.angle-override-shown = تجاوز الزاوية: __ocs_fmt_0__
|
||||
.plot-preview-task = معاينة الطباعة
|
||||
|
||||
@@ -281,6 +281,7 @@ command-copy =
|
||||
.displacement = COPY Задайте преместване:
|
||||
.mode = COPY Въведете режим на копиране [Single/Multiple] <Multiple>:
|
||||
common =
|
||||
.command-line-opacity = Непрозрачност на командния ред
|
||||
.txtexp-no-text-selected = TXTEXP: няма избран текст.
|
||||
.angle-override-shown = Замяна на ъгъла: __ocs_fmt_0__
|
||||
.plot-preview-task = Преглед на печата
|
||||
|
||||
@@ -281,6 +281,7 @@ command-copy =
|
||||
.mode = COPY Zadejte režim kopírování [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Neprůhlednost příkazového řádku
|
||||
.txtexp-no-text-selected = TXTEXP: není vybrán žádný text.
|
||||
.angle-override-shown = Přepsání úhlu: __ocs_fmt_0__
|
||||
.plot-preview-task = Náhled tisku
|
||||
|
||||
@@ -282,6 +282,7 @@ command-copy =
|
||||
.mode = COPY Kopiermodus eingeben [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Deckkraft der Befehlszeile
|
||||
.txtexp-no-text-selected = TXTEXP: kein Text gewählt.
|
||||
.angle-override-shown = Winkelvorgabe: __ocs_fmt_0__
|
||||
.plot-preview-task = Plotvorschau
|
||||
|
||||
@@ -281,6 +281,7 @@ command-copy =
|
||||
.mode = COPY Επιλέξτε λειτουργία αντιγραφής [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Αδιαφάνεια γραμμής εντολών
|
||||
.txtexp-no-text-selected = TXTEXP: δεν επιλέχθηκε κείμενο.
|
||||
.angle-override-shown = Παράκαμψη γωνίας: __ocs_fmt_0__
|
||||
.plot-preview-task = Προεπισκόπηση εκτύπωσης
|
||||
|
||||
@@ -281,6 +281,7 @@ command-copy =
|
||||
.mode = COPY Enter a copy mode option [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Command line opacity
|
||||
.txtexp-no-text-selected = TXTEXP: no text selected.
|
||||
.angle-override-shown = Angle Override: __ocs_fmt_0__
|
||||
.browser-cannot-open-typed-path = The browser cannot open a typed path; pick the file instead.
|
||||
|
||||
@@ -282,6 +282,7 @@ command-copy =
|
||||
.mode = COPY Indique modo de copia [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Opacidad de la línea de comando
|
||||
.txtexp-no-text-selected = TXTEXP: no se ha seleccionado ningún texto.
|
||||
.angle-override-shown = Modificación de ángulo: __ocs_fmt_0__
|
||||
.plot-preview-task = Vista previa de trazado
|
||||
|
||||
@@ -281,6 +281,7 @@ command-copy =
|
||||
.mode = COPY Valitse kopiointitila [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Komentorivin peittävyys
|
||||
.txtexp-no-text-selected = TXTEXP: tekstiä ei ole valittu.
|
||||
.angle-override-shown = Kulman ohitus: __ocs_fmt_0__
|
||||
.plot-preview-task = Tulostuksen esikatselu
|
||||
|
||||
@@ -282,6 +282,7 @@ command-copy =
|
||||
.mode = COPY Entrez le mode de copie [Single/Multiple] <Multiple> :
|
||||
|
||||
common =
|
||||
.command-line-opacity = Opacité de la ligne de commande
|
||||
.txtexp-no-text-selected = TXTEXP : aucun texte sélectionné.
|
||||
.angle-override-shown = Remplacement d’angle : __ocs_fmt_0__
|
||||
.plot-preview-task = Aperçu du tracé
|
||||
|
||||
@@ -270,6 +270,7 @@ command-copy =
|
||||
.mode = COPY कॉपी मोड विकल्प दर्ज करें [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = कमांड लाइन अपारदर्शिता
|
||||
.txtexp-no-text-selected = TXTEXP: कोई टेक्स्ट चयनित नहीं।
|
||||
.angle-override-shown = कोण ओवरराइड: __ocs_fmt_0__
|
||||
.plot-preview-task = प्लॉट पूर्वावलोकन
|
||||
|
||||
@@ -280,6 +280,7 @@ command-copy =
|
||||
.mode = COPY Adja meg a másolási módot [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Parancssor átlátszatlansága
|
||||
.txtexp-no-text-selected = TXTEXP: nincs kijelölt szöveg.
|
||||
.angle-override-shown = Szög felülbírálása: __ocs_fmt_0__
|
||||
.parametric-coincident = Egybeeső
|
||||
|
||||
@@ -281,6 +281,7 @@ command-copy =
|
||||
.mode = COPY Specificare modalità di copia [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Opacità della riga di comando
|
||||
.txtexp-no-text-selected = TXTEXP: nessun testo selezionato.
|
||||
.angle-override-shown = Sostituzione angolo: __ocs_fmt_0__
|
||||
.plot-preview-task = Anteprima di stampa
|
||||
|
||||
@@ -272,6 +272,7 @@ command-copy =
|
||||
.mode = COPY コピーモードを入力 [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = コマンドラインの不透明度
|
||||
.txtexp-no-text-selected = TXTEXP: 文字が選択されていません。
|
||||
.angle-override-shown = 角度の優先: __ocs_fmt_0__
|
||||
.plot-preview-task = 印刷プレビュー
|
||||
|
||||
@@ -281,6 +281,7 @@ command-copy =
|
||||
.mode = COPY 복사 모드 옵션 입력 [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = 명령행 불투명도
|
||||
.txtexp-no-text-selected = TXTEXP: 선택된 문자가 없습니다.
|
||||
.angle-override-shown = 각도 재지정: __ocs_fmt_0__
|
||||
.plot-preview-task = 플롯 미리 보기
|
||||
|
||||
@@ -281,6 +281,7 @@ command-copy =
|
||||
.mode = COPY ປ້ອນຕົວເລືອກໂໝດການຄັດລອກ [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = ຄວາມທຶບຂອງແຖວຄຳສັ່ງ
|
||||
.txtexp-no-text-selected = TXTEXP: ບໍ່ໄດ້ເລືອກຂໍ້ຄວາມ.
|
||||
.angle-override-shown = ກຳນົດມຸມແທນ: __ocs_fmt_0__
|
||||
.remote-image-url-could-not-be-fetched-the-request-timed-out = ບໍ່ສາມາດດຶງຮູບພາບທາງໄກ "__ocs_fmt_0__" ໄດ້: ການຮ້ອງຂໍໝົດເວລາ.
|
||||
|
||||
@@ -282,6 +282,7 @@ command-copy =
|
||||
.mode = COPY Geef kopieermodus op [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Dekking van de opdrachtregel
|
||||
.txtexp-no-text-selected = TXTEXP: geen tekst geselecteerd.
|
||||
.angle-override-shown = Hoekoverschrijving: __ocs_fmt_0__
|
||||
.plot-preview-task = Plotvoorbeeld
|
||||
|
||||
@@ -281,6 +281,7 @@ command-copy =
|
||||
.mode = COPY Podaj tryb kopiowania [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Krycie wiersza poleceń
|
||||
.txtexp-no-text-selected = TXTEXP: nie wybrano tekstu.
|
||||
.angle-override-shown = Zastąpienie kąta: __ocs_fmt_0__
|
||||
.plot-preview-task = Podgląd wydruku
|
||||
|
||||
@@ -282,6 +282,7 @@ command-copy =
|
||||
.mode = COPY Informe o modo de cópia [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Opacidade da linha de comando
|
||||
.txtexp-no-text-selected = TXTEXP: nenhum texto selecionado.
|
||||
.angle-override-shown = Substituição de ângulo: __ocs_fmt_0__
|
||||
.plot-preview-task = Visualização da plotagem
|
||||
|
||||
@@ -285,6 +285,7 @@ command-copy =
|
||||
.mode = COPY Задайте режим копирования [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Непрозрачность командной строки
|
||||
.txtexp-no-text-selected = TXTEXP: текст не выбран.
|
||||
.angle-override-shown = Переопределение угла: __ocs_fmt_0__
|
||||
.plot-preview-task = Предварительный просмотр печати
|
||||
|
||||
@@ -267,6 +267,7 @@ command-copy =
|
||||
.mode = COPY Kopyalama modu seçin [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = Komut satırı opaklığı
|
||||
.txtexp-no-text-selected = TXTEXP: metin seçilmedi.
|
||||
.angle-override-shown = Açı geçersiz kılma: __ocs_fmt_0__
|
||||
.plot-preview-task = Çizim önizleme
|
||||
|
||||
@@ -269,6 +269,7 @@ command-copy =
|
||||
.mode = COPY 输入复制模式选项 [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = 命令行不透明度
|
||||
.txtexp-no-text-selected = TXTEXP: 未选择文字。
|
||||
.angle-override-shown = 角度替代:__ocs_fmt_0__
|
||||
.plot-preview-task = 打印预览
|
||||
|
||||
@@ -281,6 +281,7 @@ command-copy =
|
||||
.mode = COPY 輸入複製模式選項 [Single/Multiple] <Multiple>:
|
||||
|
||||
common =
|
||||
.command-line-opacity = 命令列不透明度
|
||||
.txtexp-no-text-selected = TXTEXP: 未選擇文字。
|
||||
.angle-override-shown = 角度取代:__ocs_fmt_0__
|
||||
.plot-preview-task = 出圖預覽
|
||||
|
||||
@@ -754,6 +754,7 @@ inventory::submit!(crate::command::CommandRegistration {
|
||||
"SKTOLERANCE",
|
||||
"CLIPROMPTLINES",
|
||||
"COMMANDLINEFADETIME",
|
||||
"COMMANDLINEOPACITY",
|
||||
"COLORTHEME",
|
||||
"SELECTIONAREA",
|
||||
"SELECTIONAREAOPACITY",
|
||||
|
||||
@@ -1149,6 +1149,7 @@ impl OpenCADStudio {
|
||||
| "CURSORSIZE"
|
||||
| "PICKBOX"
|
||||
| "HPASSOC"
|
||||
| "COMMANDLINEOPACITY"
|
||||
| "CURSORTYPE"
|
||||
| "SNAPANG"
|
||||
| "TEXTFILL"
|
||||
@@ -2537,6 +2538,22 @@ impl OpenCADStudio {
|
||||
false,
|
||||
)),
|
||||
},
|
||||
"COMMANDLINEOPACITY" => match &value {
|
||||
Some(v) => match v.parse::<u8>() {
|
||||
Ok(n) if (20..=100).contains(&n) => {
|
||||
self.command_line.set_opacity_percent(n);
|
||||
Ok((format!("COMMANDLINEOPACITY = {n}"), true))
|
||||
}
|
||||
_ => Err("SETVAR: integer from 20 to 100 required.".into()),
|
||||
},
|
||||
None => Ok((
|
||||
format!(
|
||||
"COMMANDLINEOPACITY = {}",
|
||||
self.command_line.opacity_percent()
|
||||
),
|
||||
false,
|
||||
)),
|
||||
},
|
||||
"COMMANDLINEFADETIME" => match &value {
|
||||
Some(v) => match v.parse::<i32>() {
|
||||
Ok(n) if (0..=60000).contains(&n) => {
|
||||
@@ -3147,6 +3164,7 @@ impl OpenCADStudio {
|
||||
| "CURSORSIZE"
|
||||
| "PICKBOX"
|
||||
| "HPASSOC"
|
||||
| "COMMANDLINEOPACITY"
|
||||
| "CURSORTYPE"
|
||||
| "SNAPANG"
|
||||
| "CLIPROMPTLINES"
|
||||
|
||||
@@ -2607,6 +2607,8 @@ pub enum Message {
|
||||
ClipromptLinesChanged(i32),
|
||||
/// Change how long command-line history lines stay visible (COMMANDLINEFADETIME).
|
||||
CommandLineFadeChanged(i32),
|
||||
/// Change the command line's panel opacity (COMMANDLINEOPACITY).
|
||||
CommandLineOpacityChanged(u8),
|
||||
/// Toggle reversing the mouse-wheel zoom direction (ZOOMWHEEL).
|
||||
ZoomWheelReversedChanged(bool),
|
||||
TouchpadPanChanged(bool),
|
||||
|
||||
@@ -587,6 +587,8 @@ pub struct UserSettings {
|
||||
deserialize_with = "deserialize_commandline_fade_ms"
|
||||
)]
|
||||
pub commandline_fade_ms: i32,
|
||||
/// COMMANDLINEOPACITY: command-line panel opacity in percent (20–100).
|
||||
pub command_line_opacity: u8,
|
||||
/// SNAPUNIT X/Y spacing used by grid snap. 10 matches the Drafting
|
||||
/// Settings dialog defaults; older configs without these keys fall
|
||||
/// back via `default_snap_spacing`.
|
||||
@@ -896,6 +898,7 @@ impl Default for UserSettings {
|
||||
language: crate::i18n::Language::default(),
|
||||
cliprompt_lines: 3,
|
||||
commandline_fade_ms: 3000,
|
||||
command_line_opacity: 100,
|
||||
snap_spacing_x: 10.0,
|
||||
snap_spacing_y: 10.0,
|
||||
grid_spacing_x: 10.0,
|
||||
|
||||
@@ -847,6 +847,7 @@ impl OpenCADStudio {
|
||||
quick_properties: self.quick_properties,
|
||||
language: self.language,
|
||||
cliprompt_lines: crate::app::settings::clamp_clipromptlines(self.cliprompt_lines),
|
||||
command_line_opacity: self.command_line.opacity_percent(),
|
||||
commandline_fade_ms: crate::app::settings::clamp_commandline_fade_ms(
|
||||
self.commandline_fade_ms,
|
||||
),
|
||||
@@ -999,6 +1000,7 @@ impl OpenCADStudio {
|
||||
self.cliprompt_lines = crate::app::settings::clamp_clipromptlines(s.cliprompt_lines);
|
||||
self.command_line
|
||||
.set_cliprompt_lines(self.cliprompt_lines.clamp(0, 50) as u8);
|
||||
self.command_line.set_opacity_percent(s.command_line_opacity);
|
||||
self.commandline_fade_ms =
|
||||
crate::app::settings::clamp_commandline_fade_ms(s.commandline_fade_ms);
|
||||
self.command_line
|
||||
|
||||
@@ -9057,6 +9057,12 @@ impl OpenCADStudio {
|
||||
Task::none()
|
||||
}
|
||||
|
||||
Message::CommandLineOpacityChanged(percent) => {
|
||||
self.command_line.set_opacity_percent(percent);
|
||||
self.persist_settings_if_changed();
|
||||
Task::none()
|
||||
}
|
||||
|
||||
Message::CommandLineFadeChanged(ms) => {
|
||||
let ms = crate::app::settings::clamp_commandline_fade_ms(ms);
|
||||
self.commandline_fade_ms = ms;
|
||||
|
||||
@@ -299,6 +299,7 @@ impl OpenCADStudio {
|
||||
textfill: crate::scene::text::sdf_atlas::textfill(),
|
||||
cliprompt_lines: self.cliprompt_lines,
|
||||
commandline_fade_ms: self.commandline_fade_ms,
|
||||
command_line_opacity: self.command_line.opacity_percent(),
|
||||
zoom_wheel_reversed: self.zoom_wheel_reversed,
|
||||
touchpad_pan: self.touchpad_pan,
|
||||
ui_scale_percent: self.ui_scale_percent,
|
||||
|
||||
@@ -3697,6 +3697,7 @@ pub(super) fn message_attribute(source: &str) -> Option<(&'static str, &'static
|
||||
"Width factor" => Some(("common", "width-factor-sentence-case")),
|
||||
"Width: %{value}" => Some(("ui", "width-value")),
|
||||
"Window" => Some(("common", "window")),
|
||||
"Command line opacity" => Some(("common", "command-line-opacity")),
|
||||
"TXTEXP: no text selected." => Some(("common", "txtexp-no-text-selected")),
|
||||
"Windows desktop" => Some(("styles", "windows-desktop")),
|
||||
"Wipeout" => Some(("common", "wipeout")),
|
||||
|
||||
+24
-5
@@ -191,6 +191,9 @@ pub struct CommandLine {
|
||||
/// in milliseconds (0–60000, default 3000). 0 means history never fades;
|
||||
/// the pinned step prompt still shows.
|
||||
fade_ms: u32,
|
||||
/// COMMANDLINEOPACITY: how opaque the command line's panels are, in
|
||||
/// percent (20–100, default 100), so the drawing shows through.
|
||||
opacity_percent: u8,
|
||||
}
|
||||
|
||||
impl Default for CommandLine {
|
||||
@@ -217,6 +220,7 @@ impl Default for CommandLine {
|
||||
step_options: Vec::new(),
|
||||
cliprompt_lines: 3,
|
||||
fade_ms: DEFAULT_COMMANDLINE_FADE_MS,
|
||||
opacity_percent: 100,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -509,6 +513,15 @@ impl CommandLine {
|
||||
self.fade_ms
|
||||
}
|
||||
|
||||
/// COMMANDLINEOPACITY mirror (percent, 20–100).
|
||||
pub fn set_opacity_percent(&mut self, percent: u8) {
|
||||
self.opacity_percent = percent.clamp(20, 100);
|
||||
}
|
||||
|
||||
pub fn opacity_percent(&self) -> u8 {
|
||||
self.opacity_percent
|
||||
}
|
||||
|
||||
fn fade_secs(&self) -> f32 {
|
||||
self.fade_ms as f32 / 1000.0
|
||||
}
|
||||
@@ -1127,12 +1140,15 @@ impl CommandLine {
|
||||
// The transient recent lines and the full archive are two views of the
|
||||
// same history. Showing both while the archive is open creates a fake
|
||||
// second history region and visually disconnects the input row (#555).
|
||||
let opacity = f32::from(self.opacity_percent) / 100.0;
|
||||
let recent_history: Element<'a, Message> = if self.history_open || !has_recent_history {
|
||||
container(column![]).height(0).into()
|
||||
} else {
|
||||
container(history_rows)
|
||||
.style(|theme: &Theme| container::Style {
|
||||
background: Some(Background::Color(theme.palette().background.base.color)),
|
||||
.style(move |theme: &Theme| container::Style {
|
||||
background: Some(Background::Color(
|
||||
theme.palette().background.base.color.scale_alpha(opacity),
|
||||
)),
|
||||
..Default::default()
|
||||
})
|
||||
.width(Length::Fill)
|
||||
@@ -1153,10 +1169,11 @@ impl CommandLine {
|
||||
recent_history,
|
||||
history_divider,
|
||||
container(input_row)
|
||||
.style(|theme: &Theme| {
|
||||
.style(move |theme: &Theme| {
|
||||
let palette = theme.palette();
|
||||
let color = palette.background.weakest.color.scale_alpha(opacity);
|
||||
container::Style {
|
||||
background: Some(Background::Color(palette.background.weakest.color)),
|
||||
background: Some(Background::Color(color)),
|
||||
..Default::default()
|
||||
}
|
||||
})
|
||||
@@ -1170,7 +1187,9 @@ impl CommandLine {
|
||||
.style(move |theme: &Theme| {
|
||||
let palette = theme.palette();
|
||||
container::Style {
|
||||
background: Some(Background::Color(palette.background.base.color)),
|
||||
background: Some(Background::Color(
|
||||
palette.background.base.color.scale_alpha(opacity),
|
||||
)),
|
||||
border: Border {
|
||||
color: palette.background.neutral.color,
|
||||
width: if history_open { 1.0 } else { 0.0 },
|
||||
|
||||
@@ -53,6 +53,8 @@ pub struct AppPrefs {
|
||||
pub cliprompt_lines: i32,
|
||||
/// COMMANDLINEFADETIME: how long overlay history lines stay visible, in ms.
|
||||
pub commandline_fade_ms: i32,
|
||||
/// COMMANDLINEOPACITY: command-line panel opacity in percent.
|
||||
pub command_line_opacity: u8,
|
||||
/// ZOOMWHEEL: reverse the mouse-wheel zoom direction.
|
||||
pub zoom_wheel_reversed: bool,
|
||||
/// Scroll pans and Ctrl+scroll zooms (touchpads).
|
||||
@@ -974,6 +976,22 @@ pub fn view_window<'a>(
|
||||
))
|
||||
.size(11)
|
||||
.width(sizing.width),
|
||||
)
|
||||
.push(Space::new().height(12))
|
||||
.push(
|
||||
row![
|
||||
text(crate::t!("Command line opacity")).size(12).width(140),
|
||||
slider(
|
||||
20..=100,
|
||||
prefs.command_line_opacity.clamp(20, 100),
|
||||
Message::CommandLineOpacityChanged,
|
||||
)
|
||||
.step(5u8)
|
||||
.width(Fill),
|
||||
text(format!("{}%", prefs.command_line_opacity)).size(11).width(44),
|
||||
]
|
||||
.spacing(10)
|
||||
.align_y(iced::Center),
|
||||
);
|
||||
|
||||
let display_element = display.spacing(0).width(sizing.width);
|
||||
|
||||
Reference in new issue
Block a user