Add subtitle font settings to video player backend
This commit is contained in:
parent
d62b8364b6
commit
2a85af4afc
|
@ -1,6 +1,7 @@
|
|||
use std::fmt;
|
||||
|
||||
use relm4::gtk;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::utils::rgba::RGBA;
|
||||
|
@ -112,6 +113,9 @@ pub trait VideoPlayerBackend: fmt::Debug {
|
|||
/// Set subtitle position from 0 - 150, where 0 is the top of the screen and 100 is the bottom.
|
||||
fn set_subtitle_position(&self, position: u32);
|
||||
|
||||
/// Set subtitle font.
|
||||
fn set_subtitle_font(&self, font: &VideoPlayerSubtitleFont);
|
||||
|
||||
/// Get notified when video player reaches the end of the current video.
|
||||
fn connect_end_of_stream(&mut self, callback: Box<dyn Fn() + Send + 'static>);
|
||||
|
||||
|
@ -142,3 +146,43 @@ pub trait VideoPlayerBackend: fmt::Debug {
|
|||
callback: Box<dyn Fn(Vec<AudioTrack>) + Send + Sync + 'static>,
|
||||
);
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
|
||||
pub struct VideoPlayerSubtitleFont {
|
||||
pub family: String,
|
||||
pub size: usize,
|
||||
pub bold: bool,
|
||||
pub italic: bool,
|
||||
}
|
||||
|
||||
impl Default for VideoPlayerSubtitleFont {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
family: "Sans".into(),
|
||||
size: 55,
|
||||
bold: false,
|
||||
italic: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<VideoPlayerSubtitleFont> for relm4::gtk::pango::FontDescription {
|
||||
fn from(font: VideoPlayerSubtitleFont) -> Self {
|
||||
use relm4::gtk::pango::{FontDescription, Style, Weight};
|
||||
|
||||
let mut desc = FontDescription::new();
|
||||
desc.set_family(&font.family);
|
||||
desc.set_size((font.size * 1024) as i32);
|
||||
desc.set_weight(if font.bold {
|
||||
Weight::Bold
|
||||
} else {
|
||||
Weight::Normal
|
||||
});
|
||||
desc.set_style(if font.italic {
|
||||
Style::Italic
|
||||
} else {
|
||||
Style::Normal
|
||||
});
|
||||
desc
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ use crate::{tr, utils::rgba::RGBA};
|
|||
|
||||
use super::{
|
||||
AudioTrack, PlayerState, PlayerStateChangedCallback, SubtitleTrack, VideoPlayerBackend,
|
||||
VideoPlayerSubtitleFont,
|
||||
};
|
||||
|
||||
fn uuid() -> Uuid {
|
||||
|
@ -230,6 +231,14 @@ impl VideoPlayerBackend for VideoPlayerBackendMpv {
|
|||
self.widget.set_subtitle_position(position);
|
||||
}
|
||||
|
||||
fn set_subtitle_font(&self, font: &VideoPlayerSubtitleFont) {
|
||||
let player = &self.widget;
|
||||
player.set_subtitle_font_family(&font.family);
|
||||
player.set_subtitle_font_size(font.size as u32);
|
||||
player.set_subtitle_font_bold(font.bold);
|
||||
player.set_subtitle_font_italic(font.italic);
|
||||
}
|
||||
|
||||
fn disconnect_signal_handler(&mut self, id: &Uuid) {
|
||||
match self.signal_handler_ids.remove(id) {
|
||||
Some(signal_handler_id) => {
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 428c880ecf0b)
|
||||
from sys/build (@ 312b5ae62bf8+)
|
||||
from sys/build (@ d62b8364b620)
|
||||
from sys/gir-files (@ 20031a537e40)
|
||||
|
|
|
@ -142,6 +142,37 @@ impl VideoPlayerMpv {
|
|||
}
|
||||
}
|
||||
|
||||
#[doc(alias = "vpm_video_player_mpv_set_subtitle_font_bold")]
|
||||
pub fn set_subtitle_font_bold(&self, bold: bool) {
|
||||
unsafe {
|
||||
ffi::vpm_video_player_mpv_set_subtitle_font_bold(self.to_glib_none().0, bold);
|
||||
}
|
||||
}
|
||||
|
||||
#[doc(alias = "vpm_video_player_mpv_set_subtitle_font_family")]
|
||||
pub fn set_subtitle_font_family(&self, family: &str) {
|
||||
unsafe {
|
||||
ffi::vpm_video_player_mpv_set_subtitle_font_family(
|
||||
self.to_glib_none().0,
|
||||
family.to_glib_none().0,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[doc(alias = "vpm_video_player_mpv_set_subtitle_font_italic")]
|
||||
pub fn set_subtitle_font_italic(&self, italic: bool) {
|
||||
unsafe {
|
||||
ffi::vpm_video_player_mpv_set_subtitle_font_italic(self.to_glib_none().0, italic);
|
||||
}
|
||||
}
|
||||
|
||||
#[doc(alias = "vpm_video_player_mpv_set_subtitle_font_size")]
|
||||
pub fn set_subtitle_font_size(&self, size: u32) {
|
||||
unsafe {
|
||||
ffi::vpm_video_player_mpv_set_subtitle_font_size(self.to_glib_none().0, size);
|
||||
}
|
||||
}
|
||||
|
||||
#[doc(alias = "vpm_video_player_mpv_set_subtitle_position")]
|
||||
pub fn set_subtitle_position(&self, position: u32) {
|
||||
unsafe {
|
||||
|
|
|
@ -429,6 +429,70 @@ and/or use gtk-doc annotations. -->
|
|||
</parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="set_subtitle_font_bold"
|
||||
c:identifier="vpm_video_player_mpv_set_subtitle_font_bold">
|
||||
<source-position filename="video-player-mpv/video-player-mpv.h"
|
||||
line="54"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<type name="none" c:type="void"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<instance-parameter name="self" transfer-ownership="none">
|
||||
<type name="VideoPlayerMpv" c:type="VpmVideoPlayerMpv*"/>
|
||||
</instance-parameter>
|
||||
<parameter name="bold" transfer-ownership="none">
|
||||
<type name="gboolean" c:type="_Bool"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="set_subtitle_font_family"
|
||||
c:identifier="vpm_video_player_mpv_set_subtitle_font_family">
|
||||
<source-position filename="video-player-mpv/video-player-mpv.h"
|
||||
line="50"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<type name="none" c:type="void"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<instance-parameter name="self" transfer-ownership="none">
|
||||
<type name="VideoPlayerMpv" c:type="VpmVideoPlayerMpv*"/>
|
||||
</instance-parameter>
|
||||
<parameter name="family" transfer-ownership="none">
|
||||
<type name="utf8" c:type="char*"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="set_subtitle_font_italic"
|
||||
c:identifier="vpm_video_player_mpv_set_subtitle_font_italic">
|
||||
<source-position filename="video-player-mpv/video-player-mpv.h"
|
||||
line="56"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<type name="none" c:type="void"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<instance-parameter name="self" transfer-ownership="none">
|
||||
<type name="VideoPlayerMpv" c:type="VpmVideoPlayerMpv*"/>
|
||||
</instance-parameter>
|
||||
<parameter name="italic" transfer-ownership="none">
|
||||
<type name="gboolean" c:type="_Bool"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="set_subtitle_font_size"
|
||||
c:identifier="vpm_video_player_mpv_set_subtitle_font_size">
|
||||
<source-position filename="video-player-mpv/video-player-mpv.h"
|
||||
line="52"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<type name="none" c:type="void"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<instance-parameter name="self" transfer-ownership="none">
|
||||
<type name="VideoPlayerMpv" c:type="VpmVideoPlayerMpv*"/>
|
||||
</instance-parameter>
|
||||
<parameter name="size" transfer-ownership="none">
|
||||
<type name="guint" c:type="uint"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="set_subtitle_position"
|
||||
c:identifier="vpm_video_player_mpv_set_subtitle_position">
|
||||
<source-position filename="video-player-mpv/video-player-mpv.h"
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 428c880ecf0b)
|
||||
from build (@ 312b5ae62bf8+)
|
||||
from build (@ d62b8364b620)
|
||||
from gir-files (@ 20031a537e40)
|
||||
|
|
|
@ -149,6 +149,16 @@ extern "C" {
|
|||
self_: *mut VpmVideoPlayerMpv,
|
||||
colour: *mut c_char,
|
||||
);
|
||||
pub fn vpm_video_player_mpv_set_subtitle_font_bold(self_: *mut VpmVideoPlayerMpv, bold: bool);
|
||||
pub fn vpm_video_player_mpv_set_subtitle_font_family(
|
||||
self_: *mut VpmVideoPlayerMpv,
|
||||
family: *mut c_char,
|
||||
);
|
||||
pub fn vpm_video_player_mpv_set_subtitle_font_italic(
|
||||
self_: *mut VpmVideoPlayerMpv,
|
||||
italic: bool,
|
||||
);
|
||||
pub fn vpm_video_player_mpv_set_subtitle_font_size(self_: *mut VpmVideoPlayerMpv, size: c_uint);
|
||||
pub fn vpm_video_player_mpv_set_subtitle_position(
|
||||
self_: *mut VpmVideoPlayerMpv,
|
||||
position: c_uint,
|
||||
|
|
|
@ -496,3 +496,34 @@ void vpm_video_player_mpv_set_subtitle_position(VpmVideoPlayerMpv *self,
|
|||
mpv_set_option(self->mpv_ctx->handle, "sub-pos", MPV_FORMAT_INT64,
|
||||
&position_int);
|
||||
}
|
||||
|
||||
void vpm_video_player_mpv_set_subtitle_font_family(VpmVideoPlayerMpv *self,
|
||||
char *family) {
|
||||
int err = mpv_set_option(self->mpv_ctx->handle, "sub-font", MPV_FORMAT_STRING,
|
||||
&family);
|
||||
if (err < 0) {
|
||||
printf("Error setting sub-font: %d\n", err);
|
||||
}
|
||||
}
|
||||
|
||||
void vpm_video_player_mpv_set_subtitle_font_size(VpmVideoPlayerMpv *self,
|
||||
uint size) {
|
||||
uint64_t size_int = (uint64_t)size;
|
||||
int err = mpv_set_option(self->mpv_ctx->handle, "sub-font-size",
|
||||
MPV_FORMAT_INT64, &size_int);
|
||||
if (err < 0) {
|
||||
printf("Error setting sub-font-size: %d\n", err);
|
||||
}
|
||||
}
|
||||
|
||||
void vpm_video_player_mpv_set_subtitle_font_bold(VpmVideoPlayerMpv *self,
|
||||
bool bold) {
|
||||
int val = bold;
|
||||
mpv_set_property(self->mpv_ctx->handle, "sub-bold", MPV_FORMAT_FLAG, &val);
|
||||
}
|
||||
|
||||
void vpm_video_player_mpv_set_subtitle_font_italic(VpmVideoPlayerMpv *self,
|
||||
bool italic) {
|
||||
int val = italic;
|
||||
mpv_set_property(self->mpv_ctx->handle, "sub-italic", MPV_FORMAT_FLAG, &val);
|
||||
}
|
||||
|
|
|
@ -47,5 +47,13 @@ void vpm_video_player_mpv_set_subtitle_background_colour(
|
|||
VpmVideoPlayerMpv *self, char *colour);
|
||||
void vpm_video_player_mpv_set_subtitle_position(VpmVideoPlayerMpv *self,
|
||||
uint position);
|
||||
void vpm_video_player_mpv_set_subtitle_font_family(VpmVideoPlayerMpv *self,
|
||||
char *family);
|
||||
void vpm_video_player_mpv_set_subtitle_font_size(VpmVideoPlayerMpv *self,
|
||||
uint size);
|
||||
void vpm_video_player_mpv_set_subtitle_font_bold(VpmVideoPlayerMpv *self,
|
||||
bool bold);
|
||||
void vpm_video_player_mpv_set_subtitle_font_italic(VpmVideoPlayerMpv *self,
|
||||
bool italic);
|
||||
|
||||
G_END_DECLS
|
||||
|
|
Loading…
Reference in New Issue