12 个不稳定版本 (3 个重大更新)

新版本 0.5.1 2024年8月17日
0.5.0 2024年8月13日
0.4.0 2024年8月11日
0.3.0 2024年8月4日
0.2.4 2024年5月10日

#645GUI

Download history 133/week @ 2024-05-06 6/week @ 2024-05-13 7/week @ 2024-05-20 1/week @ 2024-06-10 158/week @ 2024-06-17 3/week @ 2024-06-24 111/week @ 2024-07-22 362/week @ 2024-07-29 261/week @ 2024-08-05 359/week @ 2024-08-12

每月1,093 次下载

MIT 许可证

160KB
3K SLoC

iced 的 sessionlock 绑定

Crates.io

iced-layershell 提供了 iced 和 sessionlock 的绑定。

会话锁定是锁定功能的 wayland 协议。此协议在 river、sway 等系统中得到支持。我们用它制作了twenty中的美丽锁程序。您也可以用它来构建自己的会话锁定。这将使您使用我们的 crate 与 pam crate 结合变得非常容易。

最小示例如下

use iced::widget::{button, column, text, text_input};
use iced::{event, Alignment, Command, Element, Event, Length, Theme};

use iced_sessionlock::actions::UnLockAction;
use iced_sessionlock::settings::Settings;
use iced_sessionlock::MultiApplication;

pub fn main() -> Result<(), iced_sessionlock::Error> {
    Counter::run(Settings::default())
}

struct Counter {
    value: i32,
    text: String,
}

#[derive(Debug, Clone)]
enum Message {
    IncrementPressed,
    DecrementPressed,
    TextInput(String),
    IcedEvent(Event),
    Lock,
}

impl MultiApplication for Counter {
    type Message = Message;
    type Flags = ();
    type Theme = Theme;
    type Executor = iced::executor::Default;

    fn new(_flags: ()) -> (Self, Command<Message>) {
        (
            Self {
                value: 0,
                text: "eee".to_string(),
            },
            Command::none(),
        )
    }

    fn namespace(&self) -> String {
        String::from("Counter - Iced")
    }

    fn subscription(&self) -> iced::Subscription<Self::Message> {
        event::listen().map(Message::IcedEvent)
    }

    fn update(&mut self, message: Message) -> Command<Message> {
        match message {
            Message::IcedEvent(event) => {
                println!("hello {event:?}");
                Command::none()
            }
            Message::IncrementPressed => {
                self.value += 1;
                Command::none()
            }
            Message::DecrementPressed => {
                self.value -= 1;
                Command::none()
            }
            Message::TextInput(text) => {
                self.text = text;
                Command::none()
            }
            Message::Lock => Command::single(UnLockAction.into()),
        }
    }

    fn view(&self, _id: iced::window::Id) -> Element<Message> {
        //println!("{:?}, {}", _id, self.value);
        column![
            button("Increment").on_press(Message::IncrementPressed),
            button("Lock").on_press(Message::Lock),
            text(self.value).size(50),
            text_input("hello", &self.text)
                .on_input(Message::TextInput)
                .padding(10),
            button("Decrement").on_press(Message::DecrementPressed)
        ]
        .padding(20)
        .align_items(Alignment::Center)
        .width(Length::Fill)
        .height(Length::Fill)
        .into()
    }
}

更多示例,请参阅 exwlshelleventloop

依赖项

~29–46MB
~812K SLoC