fix: playback icons on panel should use applet icon button
This commit is contained in:
parent
cd296207a7
commit
0505524eae
1 changed files with 60 additions and 50 deletions
|
|
@ -58,6 +58,11 @@ pub fn main() -> cosmic::iced::Result {
|
||||||
|
|
||||||
static SHOW_MEDIA_CONTROLS: Lazy<id::Toggler> = Lazy::new(id::Toggler::unique);
|
static SHOW_MEDIA_CONTROLS: Lazy<id::Toggler> = Lazy::new(id::Toggler::unique);
|
||||||
|
|
||||||
|
const GO_BACK: &str = "media-skip-backward-symbolic";
|
||||||
|
const GO_NEXT: &str = "media-skip-forward-symbolic";
|
||||||
|
const PAUSE: &str = "media-playback-pause-symbolic";
|
||||||
|
const PLAY: &str = "media-playback-start-symbolic";
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
struct Audio {
|
struct Audio {
|
||||||
core: cosmic::app::Core,
|
core: cosmic::app::Core,
|
||||||
|
|
@ -159,15 +164,34 @@ impl Audio {
|
||||||
fn playback_buttons(&self) -> Option<Element<Message>> {
|
fn playback_buttons(&self) -> Option<Element<Message>> {
|
||||||
if self.player_status.is_some() && self.config.show_media_controls_in_top_panel {
|
if self.player_status.is_some() && self.config.show_media_controls_in_top_panel {
|
||||||
let mut elements = Vec::with_capacity(3);
|
let mut elements = Vec::with_capacity(3);
|
||||||
let icon_size = self.core.applet.suggested_size().0;
|
if self
|
||||||
if let Some(go_prev) = self.go_previous(icon_size) {
|
.player_status
|
||||||
elements.push(go_prev);
|
.as_ref()
|
||||||
|
.map(|s| s.can_go_previous)
|
||||||
|
.unwrap_or_default()
|
||||||
|
{
|
||||||
|
elements.push(self.core.applet.icon_button(GO_BACK).into())
|
||||||
}
|
}
|
||||||
if let Some(play_pause) = self.play_pause(icon_size) {
|
if let Some(play) = self.is_play() {
|
||||||
elements.push(play_pause);
|
elements.push(
|
||||||
|
self.core
|
||||||
|
.applet
|
||||||
|
.icon_button(if play { PLAY } else { PAUSE })
|
||||||
|
.on_press(if play {
|
||||||
|
Message::MprisRequest(MprisRequest::Play)
|
||||||
|
} else {
|
||||||
|
Message::MprisRequest(MprisRequest::Pause)
|
||||||
|
})
|
||||||
|
.into(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if let Some(go_next) = self.go_next(icon_size) {
|
if self
|
||||||
elements.push(go_next);
|
.player_status
|
||||||
|
.as_ref()
|
||||||
|
.map(|s| s.can_go_next)
|
||||||
|
.unwrap_or_default()
|
||||||
|
{
|
||||||
|
elements.push(self.core.applet.icon_button(GO_NEXT).into())
|
||||||
}
|
}
|
||||||
|
|
||||||
Some(match self.core.applet.anchor {
|
Some(match self.core.applet.anchor {
|
||||||
|
|
@ -187,15 +211,11 @@ impl Audio {
|
||||||
self.player_status.as_ref().and_then(|s| {
|
self.player_status.as_ref().and_then(|s| {
|
||||||
if s.can_go_previous {
|
if s.can_go_previous {
|
||||||
Some(
|
Some(
|
||||||
button::icon(
|
button::icon(icon::from_name(GO_BACK).size(icon_size).symbolic(true))
|
||||||
icon::from_name("media-skip-backward-symbolic")
|
.extra_small()
|
||||||
.size(icon_size)
|
.style(cosmic::theme::Button::AppletIcon)
|
||||||
.symbolic(true),
|
.on_press(Message::MprisRequest(MprisRequest::Previous))
|
||||||
)
|
.into(),
|
||||||
.extra_small()
|
|
||||||
.style(cosmic::theme::Button::AppletIcon)
|
|
||||||
.on_press(Message::MprisRequest(MprisRequest::Previous))
|
|
||||||
.into(),
|
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
|
|
@ -207,15 +227,11 @@ impl Audio {
|
||||||
self.player_status.as_ref().and_then(|s| {
|
self.player_status.as_ref().and_then(|s| {
|
||||||
if s.can_go_next {
|
if s.can_go_next {
|
||||||
Some(
|
Some(
|
||||||
button::icon(
|
button::icon(icon::from_name(GO_NEXT).size(icon_size).symbolic(true))
|
||||||
icon::from_name("media-skip-forward-symbolic")
|
.extra_small()
|
||||||
.size(icon_size)
|
.style(cosmic::theme::Button::AppletIcon)
|
||||||
.symbolic(true),
|
.on_press(Message::MprisRequest(MprisRequest::Next))
|
||||||
)
|
.into(),
|
||||||
.extra_small()
|
|
||||||
.style(cosmic::theme::Button::AppletIcon)
|
|
||||||
.on_press(Message::MprisRequest(MprisRequest::Next))
|
|
||||||
.into(),
|
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
|
|
@ -223,21 +239,11 @@ impl Audio {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn play_pause(&self, icon_size: u16) -> Option<Element<Message>> {
|
fn is_play(&self) -> Option<bool> {
|
||||||
self.player_status.as_ref().and_then(|s| match s.status {
|
self.player_status.as_ref().and_then(|s| match s.status {
|
||||||
PlaybackStatus::Playing => {
|
PlaybackStatus::Playing => {
|
||||||
if s.can_pause {
|
if s.can_pause {
|
||||||
Some(
|
Some(false)
|
||||||
button::icon(
|
|
||||||
icon::from_name("media-playback-pause-symbolic")
|
|
||||||
.size(icon_size)
|
|
||||||
.symbolic(true),
|
|
||||||
)
|
|
||||||
.style(cosmic::theme::Button::AppletIcon)
|
|
||||||
.on_press(Message::MprisRequest(MprisRequest::Pause))
|
|
||||||
.extra_small()
|
|
||||||
.into(),
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
@ -245,17 +251,7 @@ impl Audio {
|
||||||
|
|
||||||
PlaybackStatus::Paused | PlaybackStatus::Stopped => {
|
PlaybackStatus::Paused | PlaybackStatus::Stopped => {
|
||||||
if s.can_play {
|
if s.can_play {
|
||||||
Some(
|
Some(true)
|
||||||
button::icon(
|
|
||||||
icon::from_name("media-playback-start-symbolic")
|
|
||||||
.size(32)
|
|
||||||
.symbolic(true),
|
|
||||||
)
|
|
||||||
.style(cosmic::theme::Button::AppletIcon)
|
|
||||||
.extra_small()
|
|
||||||
.on_press(Message::MprisRequest(MprisRequest::Play))
|
|
||||||
.into(),
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
@ -731,8 +727,22 @@ impl cosmic::Application for Audio {
|
||||||
if let Some(go_prev) = self.go_previous(32) {
|
if let Some(go_prev) = self.go_previous(32) {
|
||||||
elements.push(go_prev);
|
elements.push(go_prev);
|
||||||
}
|
}
|
||||||
if let Some(play_pause) = self.play_pause(32) {
|
if let Some(play) = self.is_play() {
|
||||||
elements.push(play_pause);
|
elements.push(
|
||||||
|
button::icon(
|
||||||
|
icon::from_name(if play { PLAY } else { PAUSE })
|
||||||
|
.size(32)
|
||||||
|
.symbolic(true),
|
||||||
|
)
|
||||||
|
.extra_small()
|
||||||
|
.style(cosmic::theme::Button::AppletIcon)
|
||||||
|
.on_press(if play {
|
||||||
|
Message::MprisRequest(MprisRequest::Play)
|
||||||
|
} else {
|
||||||
|
Message::MprisRequest(MprisRequest::Pause)
|
||||||
|
})
|
||||||
|
.into(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if let Some(go_next) = self.go_next(32) {
|
if let Some(go_next) = self.go_next(32) {
|
||||||
elements.push(go_next);
|
elements.push(go_next);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue