Crates.io | vgtk |
lib.rs | vgtk |
version | 0.3.0 |
source | src |
created_at | 2020-02-07 16:16:13.975306 |
updated_at | 2020-07-05 13:04:50.990319 |
description | A declarative UI framework for GTK |
homepage | http://vgtk.rs |
repository | https://github.com/bodil/vgtk |
max_upload_size | |
id | 205870 |
size | 130,951 |
A declarative desktop UI framework for Rust built on GTK and Gtk-rs.
Future
s using
GLib's event loop, giving you
async/await superpowers cleanly integrated with the
GTK event model.
use vgtk::{ext::*, gtk, run, Component, UpdateAction, VNode};
use vgtk::lib::{gtk::*, gio::ApplicationFlags};
#[derive(Clone, Default, Debug)]
struct Model {
counter: usize,
}
#[derive(Clone, Debug)]
enum Message {
Inc,
Exit,
}
impl Component for Model {
type Message = Message;
type Properties = ();
fn update(&mut self, message: Message) -> UpdateAction<Self> {
match message {
Message::Inc => {
self.counter += 1;
UpdateAction::Render
}
Message::Exit => {
vgtk::quit();
UpdateAction::None
}
}
}
fn view(&self) -> VNode<Model> {
gtk! {
<Application::new_unwrap(None, ApplicationFlags::empty())>
<Window border_width=20 on destroy=|_| Message::Exit>
<HeaderBar title="inc!" show_close_button=true />
<Box spacing=10 halign=Align::Center>
<Label label=self.counter.to_string() />
<Button label="inc!" image="add" always_show_image=true
on clicked=|_| Message::Inc />
</Box>
</Window>
</Application>
}
}
}
fn main() {
std::process::exit(run::<Model>());
}
You'll need to ensure GTK is installed and usable on your system before you can use vgtk
. Please
consult the Gtk-rs requirements doc for detailed
instructions. It can be especially involved on Windows, but if you follow their instructions
carefully, it does eventually work.
You can use cargo generate
to start a vgtk
project:
cargo generate --git https://github.com/bodil/cargo-template-vgtk
Alternatively, if you don't want to install cargo generate
, you can clone the
template repo and edit the Cargo.toml
file
manually to fit your project.
To run your app, enter the project folder and type cargo run
, and marvel at the little window
which eventually appears and what wonders you could fill it with.
See the examples folder for a collection of example applications, including a complete
TodoMVC implementation. To try out the TodoMVC example, clone the vgtk
repo
and issue cargo run --bin todomvc
from the project root directory.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public Licence as published by the Free Software Foundation, either version 3 of the Licence, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public Licence for more details.
You should have received a copy of the GNU Lesser General Public Licence along with this program. If not, see https://www.gnu.org/licenses/.