make the play pause button work again
This commit is contained in:
parent
6f3b3537ad
commit
0f2351ae01
4 changed files with 62 additions and 20 deletions
|
@ -121,7 +121,7 @@ template $AudreyUiPlaybar: Adw.Bin {
|
||||||
valign: center;
|
valign: center;
|
||||||
sensitive: bind $can_press_play (template.playbin as <$AudreyPlaybin>.state as <$AudreyPlaybinState>, template.playbin as <$AudreyPlaybin>.play-queue-length) as <bool>;
|
sensitive: bind $can_press_play (template.playbin as <$AudreyPlaybin>.state as <$AudreyPlaybinState>, template.playbin as <$AudreyPlaybin>.play-queue-length) as <bool>;
|
||||||
|
|
||||||
clicked => $on_play_pause_clicked ();
|
clicked => $on_play_pause_clicked (template);
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
|
|
|
@ -19,6 +19,9 @@ mod ffi {
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn audrey_playbin_get_type() -> glib::ffi::GType;
|
pub fn audrey_playbin_get_type() -> glib::ffi::GType;
|
||||||
|
pub fn audrey_playbin_get_state(self_: *mut AudreyPlaybin) -> super::state::ffi::State;
|
||||||
|
pub fn audrey_playbin_pause(self_: *mut AudreyPlaybin);
|
||||||
|
pub fn audrey_playbin_play(self_: *mut AudreyPlaybin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,3 +34,23 @@ glib::wrapper! {
|
||||||
type_ => || ffi::audrey_playbin_get_type(),
|
type_ => || ffi::audrey_playbin_get_type(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Playbin {
|
||||||
|
pub fn get_state(&self) -> State {
|
||||||
|
use glib::translate::ToGlibPtr;
|
||||||
|
|
||||||
|
unsafe { glib::translate::from_glib(ffi::audrey_playbin_get_state(self.to_glib_none().0)) }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn pause(&self) {
|
||||||
|
use glib::translate::ToGlibPtr;
|
||||||
|
|
||||||
|
unsafe { ffi::audrey_playbin_pause(self.to_glib_none().0) }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn play(&self) {
|
||||||
|
use glib::translate::ToGlibPtr;
|
||||||
|
|
||||||
|
unsafe { ffi::audrey_playbin_play(self.to_glib_none().0) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
mod ffi {
|
pub mod ffi {
|
||||||
use gtk::glib;
|
use gtk::glib;
|
||||||
|
|
||||||
|
pub type State = std::ffi::c_int;
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn audrey_playbin_state_get_type() -> glib::ffi::GType;
|
pub fn audrey_playbin_state_get_type() -> glib::ffi::GType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
use gtk::glib;
|
|
||||||
use glib::prelude::*;
|
use glib::prelude::*;
|
||||||
|
use gtk::glib;
|
||||||
|
|
||||||
#[derive(Copy, Clone, PartialEq, Eq)]
|
#[derive(Copy, Clone, PartialEq, Eq)]
|
||||||
pub enum State {
|
pub enum State {
|
||||||
|
@ -16,13 +18,9 @@ pub enum State {
|
||||||
Playing,
|
Playing,
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe impl<'a> glib::value::FromValue<'a> for State {
|
impl glib::translate::FromGlib<ffi::State> for State {
|
||||||
type Checker = glib::value::GenericValueTypeChecker<Self>;
|
unsafe fn from_glib(value: ffi::State) -> Self {
|
||||||
|
match value {
|
||||||
unsafe fn from_value(value: &'a glib::Value) -> Self {
|
|
||||||
use glib::translate::ToGlibPtr;
|
|
||||||
|
|
||||||
match glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0) {
|
|
||||||
0 => Self::Stopped,
|
0 => Self::Stopped,
|
||||||
1 => Self::Paused,
|
1 => Self::Paused,
|
||||||
2 => Self::Playing,
|
2 => Self::Playing,
|
||||||
|
@ -31,6 +29,16 @@ unsafe impl<'a> glib::value::FromValue<'a> for State {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsafe impl<'a> glib::value::FromValue<'a> for State {
|
||||||
|
type Checker = glib::value::GenericValueTypeChecker<Self>;
|
||||||
|
|
||||||
|
unsafe fn from_value(value: &'a glib::Value) -> Self {
|
||||||
|
use glib::translate::ToGlibPtr;
|
||||||
|
|
||||||
|
glib::translate::from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl StaticType for State {
|
impl StaticType for State {
|
||||||
fn static_type() -> glib::Type {
|
fn static_type() -> glib::Type {
|
||||||
unsafe { glib::translate::from_glib(ffi::audrey_playbin_state_get_type()) }
|
unsafe { glib::translate::from_glib(ffi::audrey_playbin_state_get_type()) }
|
||||||
|
|
|
@ -96,11 +96,20 @@ mod imp {
|
||||||
|
|
||||||
#[template_callback]
|
#[template_callback]
|
||||||
fn mute_button_icon_name(&self, mute: bool) -> &'static str {
|
fn mute_button_icon_name(&self, mute: bool) -> &'static str {
|
||||||
if mute { "audio-volume-muted" } else { "audio-volume-high" }
|
if mute {
|
||||||
|
"audio-volume-muted"
|
||||||
|
} else {
|
||||||
|
"audio-volume-high"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[template_callback]
|
#[template_callback]
|
||||||
fn on_play_position_seek(&self, _range: >k::Range, _scroll_type: gtk::ScrollType, _value: f64) -> bool {
|
fn on_play_position_seek(
|
||||||
|
&self,
|
||||||
|
_range: >k::Range,
|
||||||
|
_scroll_type: gtk::ScrollType,
|
||||||
|
_value: f64,
|
||||||
|
) -> bool {
|
||||||
/*
|
/*
|
||||||
if (range.adjustment.lower < range.adjustment.upper) {
|
if (range.adjustment.lower < range.adjustment.upper) {
|
||||||
this.playbin.seek ((int64) value);
|
this.playbin.seek ((int64) value);
|
||||||
|
@ -141,13 +150,15 @@ mod imp {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[template_callback]
|
#[template_callback]
|
||||||
fn on_play_pause_clicked(&self) {
|
fn on_play_pause_clicked(&self, _button: >k::Button) {
|
||||||
// if (this.playbin.state == PlaybinState.PLAYING) {
|
let playbin = self.playbin.borrow();
|
||||||
// this.playbin.pause();
|
let playbin = playbin.as_ref().unwrap();
|
||||||
// } else {
|
|
||||||
// this.playbin.play();
|
if playbin.get_state() == crate::playbin::State::Playing {
|
||||||
// }
|
playbin.pause();
|
||||||
todo!()
|
} else {
|
||||||
|
playbin.play();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[template_callback]
|
#[template_callback]
|
||||||
|
|
Loading…
Reference in a new issue