Skip to content

Commit 05abe4e

Browse files
committed
toggle text
1 parent dd39b88 commit 05abe4e

2 files changed

Lines changed: 41 additions & 23 deletions

File tree

src/key_bind.rs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use cosmic::iced::keyboard::Key;
22
use cosmic::iced::keyboard::key::Named;
3-
use ordered_float::OrderedFloat;
3+
use ordered_float::OrderedFloat as F;
44
use std::collections::HashMap;
55

66
use crate::Action;
@@ -33,23 +33,24 @@ pub fn key_binds() -> HashMap<KeyBind, Action> {
3333
bind!([], Key::Character(",".into()), PreviousFrame);
3434
bind!([], Key::Character("a".into()), AbRepeat);
3535
bind!([], Key::Character("m".into()), AudioToggle);
36+
bind!([], Key::Character("c".into()), TextCodeToggle);
3637
bind!([], Key::Named(Named::PageUp), PlayPrev);
3738
bind!([], Key::Named(Named::PageDown), PlayNext);
38-
bind!([], Key::Named(Named::ArrowUp), ChangeVolume(OrderedFloat(0.002)));
39-
bind!([], Key::Named(Named::ArrowDown), ChangeVolume(OrderedFloat(-0.002)));
40-
bind!([Shift], Key::Character(",".into()), ChangeSpeed(OrderedFloat(-0.25)));
41-
bind!([Shift], Key::Character(".".into()), ChangeSpeed(OrderedFloat(0.25)));
39+
bind!([], Key::Named(Named::ArrowUp), ChangeVolume(F(0.02)));
40+
bind!([], Key::Named(Named::ArrowDown), ChangeVolume(F(-0.02)));
41+
bind!([Shift], Key::Character(",".into()), ChangeSpeed(F(-0.25)));
42+
bind!([Shift], Key::Character(".".into()), ChangeSpeed(F(0.25)));
4243

43-
bind!([], Key::Character("0".into()), Seek(OrderedFloat(0.0)));
44-
bind!([], Key::Character("1".into()), Seek(OrderedFloat(0.1)));
45-
bind!([], Key::Character("2".into()), Seek(OrderedFloat(0.2)));
46-
bind!([], Key::Character("3".into()), Seek(OrderedFloat(0.3)));
47-
bind!([], Key::Character("4".into()), Seek(OrderedFloat(0.4)));
48-
bind!([], Key::Character("5".into()), Seek(OrderedFloat(0.5)));
49-
bind!([], Key::Character("6".into()), Seek(OrderedFloat(0.6)));
50-
bind!([], Key::Character("7".into()), Seek(OrderedFloat(0.7)));
51-
bind!([], Key::Character("8".into()), Seek(OrderedFloat(0.8)));
52-
bind!([], Key::Character("9".into()), Seek(OrderedFloat(0.9)));
44+
bind!([], Key::Character("0".into()), Seek(F(0.0)));
45+
bind!([], Key::Character("1".into()), Seek(F(0.1)));
46+
bind!([], Key::Character("2".into()), Seek(F(0.2)));
47+
bind!([], Key::Character("3".into()), Seek(F(0.3)));
48+
bind!([], Key::Character("4".into()), Seek(F(0.4)));
49+
bind!([], Key::Character("5".into()), Seek(F(0.5)));
50+
bind!([], Key::Character("6".into()), Seek(F(0.6)));
51+
bind!([], Key::Character("7".into()), Seek(F(0.7)));
52+
bind!([], Key::Character("8".into()), Seek(F(0.8)));
53+
bind!([], Key::Character("9".into()), Seek(F(0.9)));
5354

5455
key_binds
5556
}

src/main.rs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ pub enum Action {
189189
PreviousFrame,
190190
AbRepeat,
191191
AudioToggle,
192+
TextCodeToggle,
192193
ChangeVolume(OrderedFloat<f64>),
193194
ChangeSpeed(OrderedFloat<f64>),
194195
Seek(OrderedFloat<f64>),
@@ -217,11 +218,12 @@ impl MenuAction for Action {
217218
Self::NextFrame => Message::NextFrame,
218219
Self::PreviousFrame => Message::PreviousFrame,
219220
Self::AbRepeat => Message::AbRepeat,
221+
Self::TextCodeToggle => Message::TextCodeToggle,
220222
Self::AudioToggle => Message::AudioToggle,
221223
Self::WindowClose => Message::WindowClose,
222224
Self::ChangeVolume(change) => Message::ChangeVolumeRelative(change.into_inner()),
223225
Self::ChangeSpeed(change) => Message::ChangeSpeedRelative(change.into_inner()),
224-
Self::Seek(value) => Message::SeekPercent(value.into_inner())
226+
Self::Seek(value) => Message::SeekPercent(value.into_inner()),
225227
}
226228
}
227229
}
@@ -333,6 +335,7 @@ pub enum Message {
333335
ShowControls,
334336
SystemThemeModeChange(cosmic_theme::ThemeMode),
335337
WindowClose,
338+
TextCodeToggle,
336339
}
337340

338341
/// The [`App`] stores application-specific state.
@@ -363,6 +366,7 @@ pub struct App {
363366
playback_speed: f64,
364367
#[cfg(feature = "xdg-portal")]
365368
inhibit: tokio::sync::watch::Sender<bool>,
369+
previous_text: Option<i32>,
366370
}
367371

368372
impl App {
@@ -936,6 +940,7 @@ impl Application for App {
936940
current_audio: -1,
937941
text_codes: Vec::new(),
938942
current_text: None,
943+
previous_text: None,
939944
ab_repeat: None,
940945
playback_speed: 1.0,
941946
#[cfg(feature = "xdg-portal")]
@@ -1275,6 +1280,16 @@ impl Application for App {
12751280
self.update_flags();
12761281
}
12771282
}
1283+
Message::TextCodeToggle => {
1284+
if self.current_text.is_some() {
1285+
self.previous_text = self.current_text;
1286+
self.current_text = None;
1287+
} else {
1288+
self.current_text = self.previous_text;
1289+
}
1290+
1291+
self.update_flags();
1292+
}
12781293
Message::Pause | Message::Play | Message::PlayPause => {
12791294
//TODO: cleanest way to close dropdowns
12801295
self.dropdown_opt = None;
@@ -1370,14 +1385,15 @@ impl Application for App {
13701385
video.seek(target, true).expect("seek");
13711386
}
13721387
}
1388+
13731389
Message::SeekPercent(float) => {
13741390
if let Some(video) = &mut self.video_opt {
1375-
self.position =
1376-
(self.duration * float).clamp(0.0, self.duration);
1391+
self.position = (self.duration * float).clamp(0.0, self.duration);
13771392
let target = Duration::try_from_secs_f64(self.position).unwrap_or_default();
13781393
video.seek(target, true).expect("seek");
13791394
}
13801395
}
1396+
13811397
Message::SeekRelease => {
13821398
//TODO: cleanest way to close dropdowns
13831399
self.dropdown_opt = None;
@@ -1538,11 +1554,6 @@ impl Application for App {
15381554
}
15391555
self.update_controls(true);
15401556
}
1541-
Message::ChangeSpeedRelative(float) => {
1542-
if let Some(video) = self.video_opt.as_ref() {
1543-
return self.update(Message::PlaybackSpeed(video.speed() + float));
1544-
}
1545-
}
15461557
Message::VideoAreaClick => {
15471558
if self.dropdown_opt.is_some() {
15481559
self.dropdown_opt = None;
@@ -1584,6 +1595,12 @@ impl Application for App {
15841595
}
15851596
}
15861597

1598+
Message::ChangeSpeedRelative(float) => {
1599+
if let Some(video) = self.video_opt.as_ref() {
1600+
return self.update(Message::PlaybackSpeed(video.speed() + float));
1601+
}
1602+
}
1603+
15871604
Message::MissingPlugin(element) => {
15881605
if let Some(video) = &mut self.video_opt {
15891606
video.set_paused(true);

0 commit comments

Comments
 (0)