diff --git a/scripts/sao-ui/Cargo.toml b/scripts/sao-ui/Cargo.toml index 2a09cd0..798db04 100644 --- a/scripts/sao-ui/Cargo.toml +++ b/scripts/sao-ui/Cargo.toml @@ -11,7 +11,9 @@ crate-type = ["cdylib"] glam = "^0.21" keyframe = "1" canary-music-player = { path = "../../apps/music-player" } +canary-notifications = { path = "../../apps/notifications" } canary-script = { path = "../../crates/script" } +canary-textwrap = { path = "../../crates/textwrap" } serde = { version = "1", features = ["derive"] } serde_json = "1" wee_alloc = "^0.4" diff --git a/scripts/sao-ui/src/lib.rs b/scripts/sao-ui/src/lib.rs index 948c2e9..f379d19 100644 --- a/scripts/sao-ui/src/lib.rs +++ b/scripts/sao-ui/src/lib.rs @@ -7,6 +7,7 @@ static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; pub mod anim; pub mod main_menu; pub mod music_player; +pub mod notifications; pub mod style; pub mod widgets; @@ -14,6 +15,7 @@ use api::*; use canary_script::*; use main_menu::MainMenuPanel; use music_player::MusicPlayerPanel; +use notifications::NotificationPanel; use widgets::Widget; export_abi!(bind_panel_impl); @@ -24,6 +26,7 @@ fn bind_panel_impl(panel: Panel, protocol: Message, msg: Message) -> Box MusicPlayerPanel::bind(panel, msg), + "tebibyte-media.desktop.notification" => NotificationPanel::bind(panel, msg), "wip-dialog" => ConfirmationDialogPanel::bind(panel, msg), _ => MainMenuPanel::bind(panel, msg), } diff --git a/scripts/sao-ui/src/notifications.rs b/scripts/sao-ui/src/notifications.rs new file mode 100644 index 0000000..4860f93 --- /dev/null +++ b/scripts/sao-ui/src/notifications.rs @@ -0,0 +1,82 @@ +// Copyright (c) 2022 Marceline Crmaer +// SPDX-License-Identifier: AGPL-3.0-or-later + +use super::widgets::prelude::*; +use api::*; +use canary_script::*; +use canary_textwrap::{Content, Layout, TextCache}; + +use shell::Offset; +use text::{Label, LabelText}; + +pub struct NotificationPanel { + panel: Panel, + summary: Offset