<-- test --!> A declarative desktop UI framework for Rust built on GTK and GTK-rs – Best Reviews By Consumers
A declarative desktop UI framework for Rust built on GTK and GTK-rs

A declarative desktop UI framework for Rust built on GTK and GTK-rs

news image

A declarative desktop UI framework for Rust built on GTK and Gtk-rs.

At A Glance

  • A clean, functional component model inspired by the
    Elm architecture, Redux and
    Yew.
  • A declarative DSL for composing GTK widgets inspired by React and
    JSX, using virtual “DOM” diffing for efficient
    updates.
  • Fully cross platform with a native look and feel for Linux, Windows and macOS.
  • Built on Rust’s Futures using
    GLib’s event loop, giving you
    async/await superpowers cleanly integrated with the
    GTK event model.
  • Absolutely no need for an embedded browser engine, unless you
    really want one.

Documentation

  • API docs (latest release)
  • Tutorial

Show Me!




}
}
}

fn main() {
std::process::exit(run::());
}”>

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) -> UpdateActionSelf> {
       match message {
           Message::Inc => {
               self.counter += 1;
               UpdateAction::Render
           }
           Message::Exit => {
               vgtk::quit();
               UpdateAction::None
           }
       }
   }

   fn view(&self) -> VNode {
       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::());
}

Installation

You’ll need to ensure GTK is installed and usable on your system before you can use vgtk. Please
consult the Gtk documentation for detailed
instructions. It can be especially involved on Windows, but if you follow their instructions
carefully, it does eventually work.

Getting Started

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 w

(None,>
Read More