Move subtitle config into struct
This commit is contained in:
parent
3f7dabe137
commit
b54a000c87
|
@ -157,7 +157,10 @@ impl Default for VideoPlayerConfig {
|
|||
|
||||
impl Migrate<Config> for ConfigV1 {
|
||||
fn migrate(self) -> Config {
|
||||
use config::{Account, GeneralConfig, Server, VideoPlayerConfig, Window};
|
||||
use config::{
|
||||
video_player_config::VideoPlayerSubtitlesConfig, Account, GeneralConfig, Server,
|
||||
VideoPlayerConfig, Window,
|
||||
};
|
||||
|
||||
let servers = self
|
||||
.servers
|
||||
|
@ -225,11 +228,13 @@ impl Migrate<Config> for ConfigV1 {
|
|||
config::video_player_config::VideoPlayerOnLeftClick::ToggleControls
|
||||
}
|
||||
},
|
||||
subtitle_scale: self.video_player.subtitle_scale,
|
||||
subtitle_colour: self.video_player.subtitle_colour,
|
||||
subtitle_background_colour: self.video_player.subtitle_background_colour,
|
||||
subtitle_position: self.video_player.subtitle_position,
|
||||
subtitle_font: self.video_player.subtitle_font,
|
||||
subtitles: VideoPlayerSubtitlesConfig {
|
||||
scale: self.video_player.subtitle_scale,
|
||||
colour: self.video_player.subtitle_colour,
|
||||
background_colour: self.video_player.subtitle_background_colour,
|
||||
position: self.video_player.subtitle_position,
|
||||
font: self.video_player.subtitle_font,
|
||||
},
|
||||
backend: match self.video_player.backend {
|
||||
VideoPlayerBackendPreference::Mpv => {
|
||||
config::video_player_config::VideoPlayerBackendPreference::Mpv
|
||||
|
|
|
@ -22,12 +22,7 @@ pub struct VideoPlayerConfig {
|
|||
pub on_left_click: VideoPlayerOnLeftClick,
|
||||
pub duration_display: DurationDisplay,
|
||||
|
||||
#[serde(serialize_with = "round_one_place")]
|
||||
pub subtitle_scale: f64,
|
||||
pub subtitle_colour: String,
|
||||
pub subtitle_background_colour: String,
|
||||
pub subtitle_position: u32,
|
||||
pub subtitle_font: VideoPlayerSubtitleFont,
|
||||
pub subtitles: VideoPlayerSubtitlesConfig,
|
||||
|
||||
pub intro_skipper: bool,
|
||||
pub intro_skipper_auto_skip: bool,
|
||||
|
@ -49,11 +44,7 @@ impl Default for VideoPlayerConfig {
|
|||
on_left_click: VideoPlayerOnLeftClick::default(),
|
||||
duration_display: DurationDisplay::default(),
|
||||
|
||||
subtitle_scale: 1.0,
|
||||
subtitle_colour: "#FFFFFFFF".into(),
|
||||
subtitle_background_colour: "#00000000".into(),
|
||||
subtitle_position: 100,
|
||||
subtitle_font: VideoPlayerSubtitleFont::default(),
|
||||
subtitles: VideoPlayerSubtitlesConfig::default(),
|
||||
|
||||
backend: VideoPlayerBackendPreference::default(),
|
||||
hls_playback: false,
|
||||
|
@ -84,6 +75,28 @@ pub enum VideoPlayerOnLeftClick {
|
|||
ToggleControls,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
|
||||
pub struct VideoPlayerSubtitlesConfig {
|
||||
#[serde(serialize_with = "round_one_place")]
|
||||
pub scale: f64,
|
||||
pub colour: String,
|
||||
pub background_colour: String,
|
||||
pub position: u32,
|
||||
pub font: VideoPlayerSubtitleFont,
|
||||
}
|
||||
|
||||
impl Default for VideoPlayerSubtitlesConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
scale: 1.0,
|
||||
colour: "#FFFFFFFF".into(),
|
||||
background_colour: "#00000000".into(),
|
||||
position: 100,
|
||||
font: VideoPlayerSubtitleFont::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Serialize, Deserialize, Clone, Copy, PartialEq)]
|
||||
pub enum VideoPlayerBackendPreference {
|
||||
#[default]
|
||||
|
|
|
@ -60,7 +60,7 @@ impl SimpleComponent for SubtitlesPreferences {
|
|||
|
||||
add_suffix = >k::Label {
|
||||
#[watch]
|
||||
set_label: &model.video_player_config.subtitle_colour,
|
||||
set_label: &model.video_player_config.subtitles.colour,
|
||||
},
|
||||
|
||||
add_suffix = >k::ColorDialogButton {
|
||||
|
@ -68,8 +68,8 @@ impl SimpleComponent for SubtitlesPreferences {
|
|||
set_dialog = >k::ColorDialog,
|
||||
#[watch]
|
||||
#[block_signal(colour_change_handler)]
|
||||
set_rgba: &gdk::RGBA::parse(model.video_player_config.subtitle_colour.clone())
|
||||
.unwrap_or_else(|_| panic!("Error parsing colour: {}", model.video_player_config.subtitle_colour.clone())),
|
||||
set_rgba: &gdk::RGBA::parse(model.video_player_config.subtitles.colour.clone())
|
||||
.unwrap_or_else(|_| panic!("Error parsing colour: {}", model.video_player_config.subtitles.colour.clone())),
|
||||
connect_rgba_notify[sender] => move |btn| {
|
||||
sender.input(SubtitlesPreferencesInput::SubtitleColour(btn.rgba().into()));
|
||||
} @colour_change_handler,
|
||||
|
@ -81,7 +81,7 @@ impl SimpleComponent for SubtitlesPreferences {
|
|||
|
||||
add_suffix = >k::Label {
|
||||
#[watch]
|
||||
set_label: &model.video_player_config.subtitle_background_colour,
|
||||
set_label: &model.video_player_config.subtitles.background_colour,
|
||||
},
|
||||
|
||||
add_suffix = >k::ColorDialogButton {
|
||||
|
@ -89,8 +89,8 @@ impl SimpleComponent for SubtitlesPreferences {
|
|||
set_dialog = >k::ColorDialog,
|
||||
#[watch]
|
||||
#[block_signal(background_colour_change_handler)]
|
||||
set_rgba: &gdk::RGBA::parse(model.video_player_config.subtitle_background_colour.clone())
|
||||
.unwrap_or_else(|_| panic!("Error parsing colour: {}", model.video_player_config.subtitle_background_colour.clone())),
|
||||
set_rgba: &gdk::RGBA::parse(model.video_player_config.subtitles.background_colour.clone())
|
||||
.unwrap_or_else(|_| panic!("Error parsing colour: {}", model.video_player_config.subtitles.background_colour.clone())),
|
||||
connect_rgba_notify[sender] => move |btn| {
|
||||
sender.input(SubtitlesPreferencesInput::SubtitleBackgroundColour(btn.rgba().into()));
|
||||
} @background_colour_change_handler,
|
||||
|
@ -106,7 +106,7 @@ impl SimpleComponent for SubtitlesPreferences {
|
|||
|
||||
#[watch]
|
||||
#[block_signal(subtitle_font_change_handler)]
|
||||
set_font_desc: &model.video_player_config.subtitle_font.clone().into(),
|
||||
set_font_desc: &model.video_player_config.subtitles.font.clone().into(),
|
||||
set_use_font: true,
|
||||
set_dialog = >k::FontDialog {
|
||||
set_filter: Some(&model.font_filter()),
|
||||
|
@ -144,7 +144,7 @@ impl SimpleComponent for SubtitlesPreferences {
|
|||
|
||||
add_row = &adw::SpinRow::new(
|
||||
Some(>k::Adjustment::new(
|
||||
model.video_player_config.subtitle_scale,
|
||||
model.video_player_config.subtitles.scale,
|
||||
0.0, 100.0, 0.1, 1.0, 0.0,
|
||||
)),
|
||||
// Climb rate
|
||||
|
@ -157,7 +157,7 @@ impl SimpleComponent for SubtitlesPreferences {
|
|||
|
||||
#[watch]
|
||||
#[block_signal(subtitle_scale_change_handler)]
|
||||
set_value: model.video_player_config.subtitle_scale,
|
||||
set_value: model.video_player_config.subtitles.scale,
|
||||
connect_changed[sender] => move |spinrow| {
|
||||
sender.input(SubtitlesPreferencesInput::SubtitleScale(spinrow.value()));
|
||||
} @subtitle_scale_change_handler,
|
||||
|
@ -166,7 +166,7 @@ impl SimpleComponent for SubtitlesPreferences {
|
|||
|
||||
add_row = &adw::SpinRow::new(
|
||||
Some(>k::Adjustment::new(
|
||||
model.video_player_config.subtitle_position as f64,
|
||||
model.video_player_config.subtitles.position as f64,
|
||||
0.0, 150.0, 1.0, 1.0, 0.0,
|
||||
)),
|
||||
// Climb rate
|
||||
|
@ -179,7 +179,7 @@ impl SimpleComponent for SubtitlesPreferences {
|
|||
|
||||
#[watch]
|
||||
#[block_signal(subtitle_position_change_handler)]
|
||||
set_value: model.video_player_config.subtitle_position as f64,
|
||||
set_value: model.video_player_config.subtitles.position as f64,
|
||||
connect_changed[sender] => move |spinrow| {
|
||||
sender.input(SubtitlesPreferencesInput::SubtitlePosition(spinrow.value()));
|
||||
} @subtitle_position_change_handler,
|
||||
|
@ -220,26 +220,27 @@ impl SimpleComponent for SubtitlesPreferences {
|
|||
}
|
||||
SubtitlesPreferencesInput::Reset => {
|
||||
let default = VideoPlayerConfig::default();
|
||||
config.video_player.subtitle_scale = default.subtitle_scale;
|
||||
config.video_player.subtitle_colour = default.subtitle_colour;
|
||||
config.video_player.subtitle_background_colour = default.subtitle_background_colour;
|
||||
config.video_player.subtitle_position = default.subtitle_position;
|
||||
config.video_player.subtitle_font = default.subtitle_font;
|
||||
config.video_player.subtitles.scale = default.subtitles.scale;
|
||||
config.video_player.subtitles.colour = default.subtitles.colour;
|
||||
config.video_player.subtitles.background_colour =
|
||||
default.subtitles.background_colour;
|
||||
config.video_player.subtitles.position = default.subtitles.position;
|
||||
config.video_player.subtitles.font = default.subtitles.font;
|
||||
}
|
||||
SubtitlesPreferencesInput::SubtitleScale(subtitle_scale) => {
|
||||
config.video_player.subtitle_scale = subtitle_scale;
|
||||
SubtitlesPreferencesInput::SubtitleScale(scale) => {
|
||||
config.video_player.subtitles.scale = scale;
|
||||
}
|
||||
SubtitlesPreferencesInput::SubtitleColour(colour) => {
|
||||
config.video_player.subtitle_colour = colour.to_hex();
|
||||
config.video_player.subtitles.colour = colour.to_hex();
|
||||
}
|
||||
SubtitlesPreferencesInput::SubtitleBackgroundColour(background_colour) => {
|
||||
config.video_player.subtitle_background_colour = background_colour.to_hex();
|
||||
config.video_player.subtitles.background_colour = background_colour.to_hex();
|
||||
}
|
||||
SubtitlesPreferencesInput::SubtitlePosition(position) => {
|
||||
config.video_player.subtitle_position = position as u32;
|
||||
config.video_player.subtitles.position = position as u32;
|
||||
}
|
||||
SubtitlesPreferencesInput::SubtitleFont(font) => {
|
||||
config.video_player.subtitle_font = font;
|
||||
config.video_player.subtitles.font = font;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -252,12 +253,12 @@ impl SubtitlesPreferences {
|
|||
let default = VideoPlayerConfig::default();
|
||||
let video_player_config = &self.video_player_config;
|
||||
|
||||
(video_player_config.subtitle_scale != default.subtitle_scale)
|
||||
|| (video_player_config.subtitle_colour != default.subtitle_colour)
|
||||
|| (video_player_config.subtitle_background_colour
|
||||
!= default.subtitle_background_colour)
|
||||
|| (video_player_config.subtitle_position != default.subtitle_position)
|
||||
|| (video_player_config.subtitle_font != default.subtitle_font)
|
||||
(video_player_config.subtitles.scale != default.subtitles.scale)
|
||||
|| (video_player_config.subtitles.colour != default.subtitles.colour)
|
||||
|| (video_player_config.subtitles.background_colour
|
||||
!= default.subtitles.background_colour)
|
||||
|| (video_player_config.subtitles.position != default.subtitles.position)
|
||||
|| (video_player_config.subtitles.font != default.subtitles.font)
|
||||
}
|
||||
|
||||
fn font_filter(&self) -> CustomFilter {
|
||||
|
|
|
@ -571,33 +571,35 @@ impl VideoPlayer {
|
|||
|
||||
fn configure_player(&self, video_player_config: &VideoPlayerConfig) {
|
||||
let player = self.backend.borrow();
|
||||
player.set_subtitle_scale(video_player_config.subtitle_scale);
|
||||
player.set_subtitle_scale(video_player_config.subtitles.scale);
|
||||
player.set_subtitle_colour(
|
||||
video_player_config
|
||||
.subtitle_colour
|
||||
.subtitles
|
||||
.colour
|
||||
.clone()
|
||||
.try_into()
|
||||
.unwrap_or_else(|_| {
|
||||
panic!(
|
||||
"Error setting subtitle colour: {}",
|
||||
video_player_config.subtitle_colour
|
||||
video_player_config.subtitles.colour
|
||||
)
|
||||
}),
|
||||
);
|
||||
player.set_subtitle_background_colour(
|
||||
video_player_config
|
||||
.subtitle_background_colour
|
||||
.subtitles
|
||||
.background_colour
|
||||
.clone()
|
||||
.try_into()
|
||||
.unwrap_or_else(|_| {
|
||||
panic!(
|
||||
"Error setting subtitle background colour: {}",
|
||||
video_player_config.subtitle_background_colour
|
||||
video_player_config.subtitles.background_colour
|
||||
)
|
||||
}),
|
||||
);
|
||||
player.set_subtitle_position(video_player_config.subtitle_position);
|
||||
player.set_subtitle_font(&video_player_config.subtitle_font);
|
||||
player.set_subtitle_position(video_player_config.subtitles.position);
|
||||
player.set_subtitle_font(&video_player_config.subtitles.font);
|
||||
}
|
||||
|
||||
fn set_player_state(&mut self, new_state: PlayerState) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user