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日 |
#645 在 GUI 中
每月1,093 次下载
160KB
3K SLoC
iced 的 sessionlock 绑定
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