🏡 index : ~doyle/shalom.git

author Jordan Doyle <jordan@doyle.la> 2024-01-03 1:07:17.0 +00:00:00
committer Jordan Doyle <jordan@doyle.la> 2024-01-03 1:07:17.0 +00:00:00
commit
cf926ce133ca1115bd758b6861ae30da5a25c395 [patch]
tree
2b64bea16b20ea46dfd6961034977cb0abbc6ad0
parent
a729bbf6b8a35ee55451e1e327b03d856e4fd1d5
download
cf926ce133ca1115bd758b6861ae30da5a25c395.tar.gz

Fix event passthrough with image background



Diff

 shalom/src/pages/room.rs               | 38 ++++++++++++++++++++---------------
 shalom/src/widgets/image_background.rs | 29 +++++++++++++++++----------
 shalom/src/widgets/toggle_card.rs      | 28 +++++++++++++-------------
 3 files changed, 56 insertions(+), 39 deletions(-)

diff --git a/shalom/src/pages/room.rs b/shalom/src/pages/room.rs
index f3d5e69..ce26d64 100644
--- a/shalom/src/pages/room.rs
+++ b/shalom/src/pages/room.rs
@@ -186,10 +186,15 @@ impl Room {

        let mut col = Column::new().spacing(20).padding(40).push(header);

        if let Some((_, speaker)) = self.speaker.clone() {
            col = col.push(
                container(
                    widgets::media_player::media_player(speaker, self.now_playing_image.clone())
        match self.current_page {
            Page::Climate => {}
            Page::Listen => {
                if let Some((_, speaker)) = self.speaker.clone() {
                    col = col.push(container(
                        widgets::media_player::media_player(
                            speaker,
                            self.now_playing_image.clone(),
                        )
                        .on_volume_change(Message::OnSpeakerVolumeChange)
                        .on_mute_change(Message::OnSpeakerMuteChange)
                        .on_repeat_change(Message::OnSpeakerRepeatChange)
@@ -198,21 +203,22 @@ impl Room {
                        .on_next_track(Message::OnSpeakerNextTrack)
                        .on_previous_track(Message::OnSpeakerPreviousTrack)
                        .on_shuffle_change(Message::OnSpeakerShuffleChange),
                    ));
                }
            }
            Page::Lights => {
                let lights = Row::with_children(
                    self.lights
                        .iter()
                        .map(|(id, item)| light(*id, item))
                        .map(Element::from)
                        .collect::<Vec<_>>(),
                )
                .padding([12, 0, 24, 0]),
            );
                .spacing(10);
                col = col.push(lights);
            }
        }

        let lights = Row::with_children(
            self.lights
                .iter()
                .map(|(id, item)| light(*id, item))
                .map(Element::from)
                .collect::<Vec<_>>(),
        )
        .spacing(10);
        col = col.push(lights);

        row![
            RoomNavigation::new(self.current_page)
                .width(Length::FillPortion(2))
diff --git a/shalom/src/widgets/image_background.rs b/shalom/src/widgets/image_background.rs
index 3de7cfb..9cf8dc7 100644
--- a/shalom/src/widgets/image_background.rs
+++ b/shalom/src/widgets/image_background.rs
@@ -144,7 +144,9 @@ impl<'a, 'b, M: Clone, R: iced::advanced::Renderer> overlay::Overlay<M, R>
    for Overlay<'a, 'b, M, R>
{
    fn layout(&self, renderer: &R, _bounds: Size, position: Point) -> Node {
        let limits = Limits::new(Size::ZERO, self.size).pad([0, 0, 10, 0].into());
        let limits = Limits::new(Size::ZERO, self.size)
            .width(Length::Fill)
            .height(Length::Fill);

        let mut child = self.el.as_widget().layout(renderer, &limits);
        child.align(Alignment::Start, Alignment::Start, limits.max());
@@ -176,16 +178,23 @@ impl<'a, 'b, M: Clone, R: iced::advanced::Renderer> overlay::Overlay<M, R>

    fn on_event(
        &mut self,
        _event: Event,
        _layout: Layout<'_>,
        _cursor: Cursor,
        _renderer: &R,
        _clipboard: &mut dyn Clipboard,
        _shell: &mut Shell<'_, M>,
        event: Event,
        layout: Layout<'_>,
        cursor: Cursor,
        renderer: &R,
        clipboard: &mut dyn Clipboard,
        shell: &mut Shell<'_, M>,
    ) -> Status {
        Status::Ignored
        // self.el.as_widget_mut().on_event(self.tree, event, layout, cursor, renderer, clipboard,
        // shell, &layout.children().next().unwrap().bounds())
        self.el.as_widget_mut().on_event(
            self.tree,
            event,
            layout.children().next().unwrap(),
            cursor,
            renderer,
            clipboard,
            shell,
            &layout.bounds(),
        )
    }
}

diff --git a/shalom/src/widgets/toggle_card.rs b/shalom/src/widgets/toggle_card.rs
index a303e3f..23fc736 100644
--- a/shalom/src/widgets/toggle_card.rs
+++ b/shalom/src/widgets/toggle_card.rs
@@ -203,39 +203,41 @@ impl container::StyleSheet for Style {
    type Style = Theme;

    fn appearance(&self, _style: &Self::Style) -> container::Appearance {
        let c = |c| Color { a: 0.8, ..c };

        match self {
            Style::Disabled => container::Appearance {
                text_color: Some(Color::BLACK),
                background: Some(Background::Color(SLATE_600)),
                border_radius: 5.0.into(),
                text_color: Some(Color::WHITE),
                background: Some(Background::Color(c(SLATE_600))),
                border_radius: 10.0.into(),
                border_width: 0.0,
                border_color: Color::default(),
            },
            Style::Inactive => container::Appearance {
                text_color: Some(Color::BLACK),
                background: Some(Background::Color(SLATE_200)),
                border_radius: 5.0.into(),
                text_color: Some(Color::WHITE),
                background: Some(Background::Color(c(SLATE_200))),
                border_radius: 10.0.into(),
                border_width: 0.0,
                border_color: Color::default(),
            },
            Style::InactiveHover => container::Appearance {
                text_color: Some(Color::BLACK),
                background: Some(Background::Color(SLATE_300)),
                border_radius: 5.0.into(),
                text_color: Some(Color::WHITE),
                background: Some(Background::Color(c(SLATE_300))),
                border_radius: 10.0.into(),
                border_width: 0.0,
                border_color: Color::default(),
            },
            Style::Active(_) => container::Appearance {
                text_color: Some(Color::WHITE),
                background: Some(Background::Color(SKY_400)),
                border_radius: 5.0.into(),
                background: Some(Background::Color(c(SKY_400))),
                border_radius: 10.0.into(),
                border_width: 0.0,
                border_color: Color::default(),
            },
            Style::ActiveHover(_) => container::Appearance {
                text_color: Some(Color::WHITE),
                background: Some(Background::Color(SKY_500)),
                border_radius: 5.0.into(),
                background: Some(Background::Color(c(SKY_500))),
                border_radius: 10.0.into(),
                border_width: 0.0,
                border_color: Color::default(),
            },