A simple UI framework for Rust built on top of IUP (http://webserver2.tecgraf.puc-rio.br/iup/)

Related tags

GUI kiss-ui
Overview

KISS-UI Build Status

A UI framework for Rust based on the KISS (Keep It Simple, Stupid!) philosophy.

Powered by the IUP GUI library for C by Tecgraf, via the bindings created for iup-rust.

(No relation to the equally awesome kiss3d.)

Contents

Documentation

kiss-ui docs hosted on Github Pages

Usage

Simply add the following to your Cargo.toml:

[dependencies.kiss-ui]
git = "https://github.com/cybergeek94/kiss-ui"

Import KISS-UI's macros and common types:

#[macro_use]
extern crate kiss_ui;

use kiss_ui::prelude::*;

KISS-UI builds on all Rust release channels!

Installing IUP Binaries

You will need to install the IUP binaries for your system, which are available for download here.

Consult the following for which files to download and where to install them. The specific steps depend on your platform and preferred method of linking: dynamic or static.

PRs amending or adding instructions for any platform are very welcome.


Windows

Dynamic linking

  1. Navigate to Windows Libraries/Dynamic
  • 32-bit: Download iup-3.14_Win32_dllw4_lib.zip
  • 64-bit: Download iup-3.14_Win64_dllw4_lib.zip
  1. Extract all .dll files to a folder where the linker can find them (pick one):
  • <Rust install>/bin/rustlib/<platform target>/lib/ (recommended)
  • (using MinGW/MSYS) <MinGW/MSYS install>/usr/lib
  • <Your cargo repository>/bin/<platform target>
  1. Copy the same DLLs to a folder in your PATH (pick one):
  • <Rust install>/bin/ (recommended)
  • Create a folder anywhere and add it to your PATH.
  • Add one of the folders from step 2 to your PATH.

You should NEVER place arbitrary files in your Windows install folder, no matter how benign.

Static Linking

Static linking with IUP on Windows is not currently possible as it requires resource scripts (.rc) files from IUP to be compiled and linked in, which Rust does not currently support.


Linux

The Linux binary packages for IUP include both static and dynamic libraries. While efforts are underway to create up-to-date packages for various distributions' package managers, the currently most well supported methods of obtaining IUP binaries are to either compile them from source or download precompiled binaries from the creators.

Compile from Source

To compile from source, see this page. The instructions to check-out the source tree are available here. If you understand how to build projects with Makefiles, then it shouldn't be too difficult.

Download the Precompiled Binaries

However, if you would rather download the precompiled binaries, begin by going to the download page.

  1. Navigate to the Linux Libraries folder.
  2. Identify your kernel version. This can be done by entering the command uname -r into a terminal.
  • If you don't know if your Linux is 32-bit or 64-bit, use the command uname -a and look for the following:
    • x86_64: Your system is 64-bit.
    • x86: Your system is 32-bit.
  1. Select and download the tarball for your kernel version and bit-arity.
  • For 32-bit (x86), there is only one package: iup-3.14_Linux32_lib.tar.gz
  • For 64-bit (x86_64), select one of the following based on your kernel version:
    • >= 3.19: iup-3.14_Linux319_64_lib.tar.gz
    • >= 3.13: iup-3.14_Linux313_64_lib.tar.gz
    • >= 3.5: iup-3.14_Linux35_64_lib.tar.gz
    • >= 3.2: iup-3.14_Linux32_64_lib.tar.gz
    • 2.6: iup-3.14_Linux26g4_64_lib.tar.gz
  1. Navigate to the folder where you downloaded the tarball to in a terminal.
  2. Extract the tarball:
  • mkdir iup_libs/
  • tar -xzvf <tarball file> -C iup_libs/
  1. Install the binaries:
  • cd iup_libs/ (The install script must be run in its folder.)
  • You can run either, or both, of the following two commands:
  • To install the dynamic libraries: sudo ./install
  • To install the static libraries: sudo ./install_dev
  1. Follow the prompts in the installer.

Once the installer completes, you are finished. If you later want to uninstall IUP, open that iup_libs/ folder in a terminal and run sudo ./uninstall. Otherwise, you may now delete the tarball and/or the iup_libs/ folder.


OS X

Before you install IUP, you need to install GTK+. (An IUP driver for Cocoa was under development, but as of 7/5/2015 is not being worked on.) You can use version 2.x or 3.x, IUP will work with both.

To install GTK+ 2:

brew install gtk+

To install GTK+ 3:

brew install gtk+3

Note: if you have troubles building after installing GTK+ 3, please consult this StackOverflow answer.

Once GTK+ is installed, you can download and install the precompiled Mac OS X IUP binary available here. It appears the only download available is for OS X 10.10 64-bit.

Once you have downloaded the tarball, the installation process should be equivalent to Linux's starting at Step 4.


Comparison to Other UI Frameworks

NOTE: This list is far from exhaustive and may contain outdated information.

Pull requests for corrections and additions are welcome!

  • KISS-UI
    • Build Status: Build Status
    • Supported Platforms: Windows (using Win32 APIs), Linux and Mac (using GTK+)
    • Native Look and Feel: Yes
    • "Hello, World!" LOC: 18
    • External Crates: 2
    • External Native Libs: 1
  • PistonDevelopers/conrod
    • Build Status: Build Status
    • Supported Platforms: Windows, Mac, Linux
    • Native Look and Feel: No
    • "Hello, World!" LOC: 40 (estimated based on linked example)
    • External Crates: 9 (not including testing crates and transitive dependencies)
    • External Native Libs: ~0 (depends on backend used)
  • rust-gnome/gtk
    • Build Status: Build Status
    • Supported Platforms: Windows, Mac, Linux
    • Native Look and Feel: Yes
    • "Hello, World!" LOC: 23
    • External Crates: 10 (1 local but pulled from Crates.io)
    • External Native Libs: ~5 (installed on most Linux distros/external on Windows, Mac)

Lines of code should be listed based on the # sloc stat on the Github file page. The raw linecount includes empty lines, which can arbitrarily affect the linecount.

Enabling Visual Styles on Windows

Since Rust/Cargo currently do not support adding resource items to executables, Windows XP and later need an external manifest file to enable visual styles in KISS-UI applications. Otherwise the visual style will be Windows Classic.

However, we have made this very simple to do! Simply copy the kiss-app.manifest file from this repo into the folder of your KISS-UI based executable, rename the file to <executable name>.manifest (including the .exe extension, e.g. my_executable.exe.manifest), and run the executable as-is. You may need to delete and replace or rebuild the executable for this to take effect, as Windows appears to cache manifest file data, likely to avoid reparsing it on each run.

Optionally, you can edit the name= and the <description> values in the manifest file, using any text editor. However, it is unclear to the author what these actually affect.

Comments
  • How can i access something inside a callback?

    How can i access something inside a callback?

    Hello! I need you help again.

    I try to access a struct inside a callback.

    My example code:

    #[macro_use]
    extern crate kiss_ui;
    
    use kiss_ui::prelude::*;
    
    use kiss_ui::button::Button;
    use kiss_ui::container::Horizontal;
    use kiss_ui::dialog::{self, AlertPopupBuilder};
    
    pub struct Counter {
     pub value: u8,
    }
    
    impl<'a> Counter {
        fn new() -> Counter {
            Counter {value: 0}
        }
    
        fn inc(&mut self) {
            self.value += 1;
        }
    }
    
    #[macro_use]
    extern crate lazy_static;
    // cargo [dependencies]
    // lazy_static = "0.1.*"
    
    lazy_static! {
        static ref counter: Counter = Counter::new();
    }
    // works but is immutable 
    
    // static mut counter: Counter = Counter::new();
    // error: function calls in statics are limited to struct and enum constructors
    // hmm isn't it a struct constructor?
    
    fn main() {
    //  let mut counter = Counter::new();
    
        kiss_ui::show_gui(||
            Dialog::new(
                Horizontal::new(
                    children![               
                        Button::new()
                            .set_label("Message")
                            .set_onclick(show_counter_dialog),
                        Button::new()
                            .set_label("Close")
                            .set_onclick(close_dialog),
                    ]
                )
                .set_elem_spacing_pixels(10)                   
            )
            .set_title("Button test!")
        )
    }
    
    // fn show_counter_dialog(_: Button, counter: Counter) { 
    // =>  (expected a tuple with 1 elements, found one with 2 elements)
    fn show_counter_dialog(_: Button) {
    //  let mut counter = Counter::new();
    // works, but i don't want to reset it 
        counter.inc();
        dialog::message_popup("Good job!", format!("You clicked the button {} times!", counter.value));
    }
    fn close_dialog(_: Button) -> CallbackStatus {
        println!("Closing dialog!");
        CallbackStatus::Close
    }
    

    I'm working on it since 3 days. :/ In PHP i just say something like "fn callback() use &counter {}".

    Any Ideas how i get it done?

    Thank you in advance!

    question 
    opened by Andi-K 14
  • iup-rust and kiss-ui

    iup-rust and kiss-ui

    TL;DR: Can and should kiss-ui and iup-rust coexist i.e. they have different goals?

    I have been working on overhauling iup-rust this week to be idiomatic Rust instead of just a low-level wrappers, in the middle of this task I ended up finding this library (very nice btw) which builds upon IUP, instead of dropping all my work I choose to continue and see what happens.

    But it still bites my mind that there's two kinda of similar libraries (at least at this moment that they are young), so I really needed to discuss this out over here to clear up my mind. I'm too new to the open source community and I'm not sure how everything ties together.

    What's the direction this library is taking? Binding IUP or building a completly independent widget toolkit that just has IUP as backend? If not the later what should be done about two libraries doing the exactly same thing?

    Best regards, nice library you are building here in a very quick pace :)

    question 
    opened by thelink2012 7
  • children! and BaseWidget Methods

    children! and BaseWidget Methods

    If i try to use Button::new().set_enabled(false) or .set_name() i get the this error:

    <kiss_ui macros>:1:52: 1:62 error: the trait core::convert::From<()> is not implemented for the type > kiss_ui::BaseWidget [E0277] <kiss_ui macros>:1 ( $ ( $ child : expr ) , + , ) => ( [ $ ( $ child . into ( ) ) , + ] ) ; ( ) ^~~~~~~~~~ <kiss_ui macros>:1:1: 2:14 note: in expansion of children!

    I don't know how to try it without using children! But i think is because Button don't implement set_enabled().

    opened by Andi-K 4
  • Soundness fixes

    Soundness fixes

    • KISS-UI is forbidden to run in more than one thread (went from thread-local flag to static atomic boolean), since I believe most GUI toolkits don't support more than one running instance at a time.
    • Consolidated thread-local data to one object (may put in Box so we don't consume too much TLS)

    And the big fix:

    • String slices from widget metadata are now tracked so that they cannot be updated while there are references to them. Mostly non-breaking except for client code that depended on string accessors returning &str.

    Closes #29.

    opened by abonander 3
  • Don't unconditionally link gtk-3 on not windows

    Don't unconditionally link gtk-3 on not windows

    The iup package on my system links to gtk-2, but kiss-ui unconditionally tries to link to gtk-3, making the build fail.

    One possible solution to this letting the user decide whether he wants to link to gtk-3 through a cargo feature. But this might not be a very ideal solution.

    Here is what I cooked up:

    diff --git a/Cargo.toml b/Cargo.toml
    index 6f005ea..c9c6b0d 100644
    --- a/Cargo.toml
    +++ b/Cargo.toml
    @@ -5,6 +5,10 @@ authors = ["Austin Bonander <[email protected]>"]
    
     [dependencies.iup-sys]
     path = "iup-sys/"
    +features = [""]
    
     [dependencies]
     libc = "*"
    +
    +[features]
    +no-gtk3 = ["iup-sys/no-gtk3"]
    diff --git a/iup-sys/Cargo.toml b/iup-sys/Cargo.toml
    index 805e976..74a45e1 100644
    --- a/iup-sys/Cargo.toml
    +++ b/iup-sys/Cargo.toml
    @@ -8,3 +8,6 @@ build = "build.rs"
    
     [dependencies]
     libc = "*"
    +
    +[features]
    +no-gtk3 = []
    diff --git a/iup-sys/build.rs b/iup-sys/build.rs
    index 464af6c..ceee847 100644
    --- a/iup-sys/build.rs
    +++ b/iup-sys/build.rs
    @@ -1,7 +1,7 @@
     fn main() {
         add_link("iup");
    
    -    if cfg!(not(windows)) {
    +    if cfg!(not(windows)) && std::env::var_os("CARGO_FEATURE_NO_GTK3").is_none(){
             add_link("gtk-3"); 
         }
     }
    
    
    opened by crumblingstatue 3
  • Panic in textbox_test example

    Panic in textbox_test example

    On exit of show_alert_message text gets dropped and its refcount underflows.

    This message is printed to the console:

    thread '<main>' panicked at 'arithmetic operation overflowed', C:\devel\Rust\kiss-ui\src\widget.rs:213
    fatal runtime error: Could not unwind stack, error = 5
    
    opened by lxn 2
  • libiup.so: cannot open shared object file: No such file or directory

    libiup.so: cannot open shared object file: No such file or directory

    I always get this error, when trying to run the examples I followed the installation of iup for

    3.13.0-53-generic #89-Ubuntu x86_64 libiup.so: cannot open shared object file: No such file or directory

    I know that when installing the iup library it transfer this file to that directory

    'libiup.so’ -> ‘/usr/lib64/libiup.so’

    and make sure it is there

    /usr/lib64$ ls -la | grep libiup
    -rwxr-xr-x  1 root root  826955 May 27 16:49 libiup.so
    

    Luckily, I was able to solve it via

    sudo ln -s /usr/lib64/libiup.so  /usr/lib/libiup.so
    
    opened by ivanceras 2
  • Getting

    Getting "unauthorized" by rust-ci.org using 2d35878's secure token

    System: Arch Linux lpt1 4.0.7-2-ARCH #1 SMP PREEMPT Tue Jun 30 07:50:21 UTC 2015 x86_64 GNU/Linux

    Also tried this from a Debian Jessie container with the same results...

    $ curl http://www.rust-ci.org/artifacts/put?t=$RUSTCI_TOKEN -v

    • Trying 151.236.11.197...
    • Connected to www.rust-ci.org (151.236.11.197) port 80 (#0)

      GET /artifacts/put?t=LBCp1Sz9ofbWbyN0GtpbICw0CZW4Hw+iOrw1zYJInHtS4/dJjrHjKJqy8aRB2rBPwc7Mt8sSgRVirj90XA0UwDD8nennQB9m8diXYOm03Itj+/2iKJCMchM8r/cNmaYeHelYcEHzLHykNaWSZ08gj0Bz3hDYVMI4ey4h1CpIdwM= HTTP/1.1 Host: www.rust-ci.org User-Agent: curl/7.43.0 Accept: /

      < HTTP/1.1 401 UNAUTHORIZED < Server: nginx/1.5.6 < Content-Type: text/html; charset=utf-8 < cache-control: max-age=0 < Content-Length: 12 < Accept-Ranges: bytes < Date: Wed, 08 Jul 2015 05:47:17 GMT < X-Varnish: 1493651606 < Via: 1.1 varnish < Connection: keep-alive < age: 0 < X-Cache: MISS <

    • Connection #0 to host www.rust-ci.org left intact Unauthorized
    opened by comwt 1
  • Other widgets

    Other widgets

    Is there a way to use other commonly used widgets , such as ListViews and ComboBoxes? I can't seem to find it so I am assuming that it is not finished at the moment.

    opened by elwl 1
  • Unsoundness on widgets with string accessors

    Unsoundness on widgets with string accessors

    I just realized there's unsoundness in some of the APIs because of widgets implementing Copy and Clone:

    • Widget::set_name() and Widget::get_name(): users can set a new name string and make the current one point to garbage in safe code. Even though set_name() takes self, the Copy impl makes ownership pointless and Clone allows creating a new owned alias.
    • Label::set_text()/get_text(), TextBox::set_text()/get_text(): same thing.

    Are people using these impls yet? It would break the progress_test example but as #27 shows, it's not all that intuitive a pattern anyways. Retrieving children by-name should probably be the preferred method, though... that can also produce unsoundness.

    Maybe this API requires more thought. Or just return owned strings from these getters? That would be a lot of copying. Perhaps an unsafe method that returns the string slice, and then a safe method that returns a clone.

    bug 
    opened by abonander 1
  • Implement asynchronous tasks

    Implement asynchronous tasks

    Users should be able to start a long-running task on a new thread, and be notified when it completes in a callback on the UI thread.

    Maybe use threadpool crate and a Cargo feature, async, so users don't pay for what they don't need.

    enhancement help wanted discussion 
    opened by abonander 1
  • Linking fails, possibly an IUP problem

    Linking fails, possibly an IUP problem

    Hey, I installed IUP statically and I'm getting this error when trying to build my project. https://hastebin.com/ohikojorum.php

    I'm probably just dumb and missed a step, but I can't seem to figure out why it can't find my GTK libs?

    opened by hedgehog1029 1
  • Docs refer to nonexistent `.show()` method

    Docs refer to nonexistent `.show()` method

    The docs for kiss_ui::show_gui state

    "The closure argument should initialize and call .show()."

    and the docs for kiss_ui::dialog::Dialog state

    "This does not make the dialog appear on screen. .show() must be called after the dialog has been configured."

    There doesn't appear to be any .show() method though.

    opened by Seeker14491 2
  • Build error in windows

    Build error in windows

    I downloaded iup-3.14_Win64_dllw4_lib.zip, copied its contents in \Rust\bin\ and \Rust\lib\rustlib\x86_64-pc-windows-msvc\lib\. then I ceated a hello-world project with

    [dependencies.kiss-ui]
    git = "https://github.com/cybergeek94/kiss-ui"
    

    and

    #[macro_use]
    extern crate kiss_ui;
    
    use kiss_ui::container::Horizontal;
    use kiss_ui::dialog::Dialog;
    use kiss_ui::text::Label;
    
    
    fn main() {
        kiss_ui::show_gui(|| {
            Dialog::new(
                Horizontal::new(
                    children![
                        Label::new("Hello, world!"),
                    ]
                )
            )
            .set_title("Hello, world!")
            .set_size_pixels(640, 480)
        });
    }
    

    Next I got this build error:

    error: linking with `link.exe` failed: exit code: 1181
    ...
    note: Non-UTF-8 output: LINK : fatal error LNK1181: \xed\xe5 \xf3\xe4\xe0\xe5\xf2\xf1\xff \xee\xf2\xea\xf0\xfb\xf2\xfc \xe2\xf5\xee\xe4\xed\xee\xe9 \x
    f4\xe0\xe9\xeb \"iup.lib\"\r\n
    error: aborting due to previous error
    
    
    opened by fpawel 3
  • Clarify instructions for building on -msvc

    Clarify instructions for building on -msvc

    The instructions currently tell people to download the dllw4 version of iup which does not come with .lib libraries and is unsuitable for use with -msvc. For those targets the instructions should tell the user to download the dll12 version instead which definitely has .lib files. The instructions should also inform the user to place the .lib files where the linker can find them and not the .dll files. Also perhaps the instructions should tell the user how to use a build script override to tell it where to look for the .lib and .dll files instead of stuffing those files all over the place in weird directories.

    opened by retep998 1
  • publish to crates.io

    publish to crates.io

    I was just asked about UI libraries for rust. My suggestion of KISS-UI got met with the complaint that it's not on crates.

    it would probably be a good idea to also add keywords like "ui" and "gui"

    enhancement 
    opened by oli-obk 1
  • Build problems with IUP

    Build problems with IUP

    I haven't messed with C libraries much so I'm not sure if this is a problem with kiss-ui, IUP, my system, or me, but I'm getting a build error that I'm not sure how to resolve.

    $ cargo build
       Compiling grim-edit v0.0.1 (file:///Users/erincalling/code/grim-edit)
    error: linking with `cc` failed: exit code: 1
    note: "cc" "-m64" "-L" "/usr/local/Cellar/rust/1.0.0/lib/rustlib/x86_64-apple-darwin/lib" "-o" "/Users/erincalling/code/grim-edit/target/debug/grim_edit" "/Users/erincalling/code/grim-edit/target/debug/grim_edit.o" "-Wl,-force_load,/usr/local/Cellar/rust/1.0.0/lib/rustlib/x86_64-apple-darwin/lib/libmorestack.a" "-Wl,-dead_strip" "-nodefaultlibs" "/Users/erincalling/code/grim-edit/target/debug/deps/libkiss_ui-3b13f82488719214.rlib" "/Users/erincalling/code/grim-edit/target/debug/deps/libiup_sys-4a23062e27aae405.rlib" "/Users/erincalling/code/grim-edit/target/debug/deps/liblibc-ef5cbad4ef5c7a1e.rlib" "/usr/local/Cellar/rust/1.0.0/lib/rustlib/x86_64-apple-darwin/lib/libstd-4e7c5e5c.rlib" "/usr/local/Cellar/rust/1.0.0/lib/rustlib/x86_64-apple-darwin/lib/libcollections-4e7c5e5c.rlib" "/usr/local/Cellar/rust/1.0.0/lib/rustlib/x86_64-apple-darwin/lib/libunicode-4e7c5e5c.rlib" "/usr/local/Cellar/rust/1.0.0/lib/rustlib/x86_64-apple-darwin/lib/librand-4e7c5e5c.rlib" "/usr/local/Cellar/rust/1.0.0/lib/rustlib/x86_64-apple-darwin/lib/liballoc-4e7c5e5c.rlib" "/usr/local/Cellar/rust/1.0.0/lib/rustlib/x86_64-apple-darwin/lib/liblibc-4e7c5e5c.rlib" "/usr/local/Cellar/rust/1.0.0/lib/rustlib/x86_64-apple-darwin/lib/libcore-4e7c5e5c.rlib" "-L" "/Users/erincalling/code/grim-edit/target/debug" "-L" "/Users/erincalling/code/grim-edit/target/debug/deps" "-L" "/usr/local/Cellar/rust/1.0.0/lib/rustlib/x86_64-apple-darwin/lib" "-L" "/Users/erincalling/code/grim-edit/.rust/lib/x86_64-apple-darwin" "-L" "/Users/erincalling/code/grim-edit/lib/x86_64-apple-darwin" "-liup" "-lc" "-lm" "-lSystem" "-lpthread" "-lc" "-lm" "-lcompiler-rt"
    note: Undefined symbols for architecture x86_64:
      "_gtk_range_set_value", referenced from:
          _gtkValSetValueAttrib in libiup.a(iupgtk_val.o)
          _gtkValKeyPressEvent in libiup.a(iupgtk_val.o)
          _gtkValChangeValue in libiup.a(iupgtk_val.o)
      "_gtk_adjustment_new", referenced from:
          _gtkValMapMethod in libiup.a(iupgtk_val.o)
      "_gtk_hscale_new", referenced from:
          _gtkValMapMethod in libiup.a(iupgtk_val.o)
    
    { 600 other symbols snipped }
    
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    
    error: aborting due to previous error
    Could not compile `grim-edit`.
    
    To learn more, run the command again with --verbose.
    

    full, un-snipped error

    This is on OSX 10.10.3 after installing IUP using the "precompiled binary" instructions in the README. I'm using cargo 0.4.0-nightly (b48cd46 2015-07-01) (built 2015-07-01) and rustc 1.0.0 (built 2015-05-16)

    I'd appreciate any help you can offer!

    opened by ErinCall 13
Owner
null
Rust binding for IUP

IUP Rust This library provides a high level wrapper around IUP, a multi-platform toolkit for building graphical user interfaces. See rust-iup-sys for

David Campbell 41 May 28, 2022
A UI-framework, built for speed and ease-of-use

A UI-framework, built for speed and ease-of-use. Focused on one thing, the best user-experience for the client and developer.

Vacaro 46 Dec 6, 2022
A simple news reading GUI app built in Rust

Headlines [WIP] A native GUI app built with Rust using egui. Uses newsapi.org as the source to fetch news articles. This is a WIP and the current stat

creativcoder 89 Dec 29, 2022
Deno is a simple, modern and secure runtime for JavaScript and TypeScript that uses V8 and is built in Rust.

Deno Deno is a simple, modern and secure runtime for JavaScript and TypeScript that uses V8 and is built in Rust. Features Secure by default. No file,

Derek Jones 2 Aug 13, 2022
A powerful color picker and formatter, built with GTK and Rust

Eyedropper A powerful color picker and formatter. More screenshots Features Pick a Color Enter a color in Hex-Format Parse RGBA/ARGB Hex-Colors View c

Jonathan 108 Dec 24, 2022
A collection of components and widgets that are built for bevy_ui and the ECS pattern

Widgets for Bevy UI A collection of components and widgets that are built for bevy_ui and the ECS pattern. Current State This was started recently and

Gabriel Bourgeois 3 Sep 2, 2022
A powerful desktop widget app for windows, built with Vue and Tauri.

DashboardX Widgets A powerful desktop widget app for windows, built with Vue and Tauri. Still in development Currently only runs on windows (uses nati

DashboardX Widgets 3 Oct 25, 2023
Desktop GUI Framework

Azul - Desktop GUI framework WARNING: The features advertised in this README may not work yet. Azul is a free, functional, immediate mode GUI framewor

Maps4Print 5.4k Jan 1, 2023
yew-material is a material-ui framework for yew

About yew-material is a material-ui framework for yew create-yew-material-app Create Yew Material App is a way to create a single page Yew application

jie.wang 79 Dec 26, 2022
Azul - Desktop GUI framework

Azul - Desktop GUI framework Azul is a free, functional, reactive GUI framework for Rust and C++, built using the WebRender rendering engine and a CSS

Felix Schütt 5.4k Dec 31, 2022
A simple, cross-platform GUI automation module for Rust.

AutoPilot AutoPilot is a Rust port of the Python C extension AutoPy, a simple, cross-platform GUI automation library for Python. For more information,

null 271 Dec 27, 2022
A simple, efficient spring animation library for smooth, natural motion in Rust

Natura A simple, efficient spring animation library for smooth, natural motion in Rust Usage Natura is framework-agnostic and works well in 2D and 3D

O(ʒ) 57 Nov 14, 2022
A simple note taking application written in Rust and GTK4

Rnote A simple note taking application written in Rust and GTK4. Rnote aims to be a simple but functional note taking application for freehand drawing

Felix Zwettler 3.4k Jan 5, 2023
Simple GTK Rust Fuzzer which aims to test all available classes and functions in GTK.

Gtk Rust Fuzzer Simple GTK Rust Fuzzer which aims to test all available classes and functions in GTK. It finds bugs inside GTK functions, GTK exported

Rafał Mikrut 8 Nov 19, 2022
Crate for simple implementation of Component for Native API 1C:Enterprise written in rust

Гайд по использованию на русском языке можно посмотреть здесь и задать вопросы по использованию, но не оставляйте там комментарии об ошибках, т.к. там

Maxim Kozlov 40 Sep 30, 2023
Simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports.

libui: a portable GUI library for C This README is being written. Status It has come to my attention that I have not been particularly clear about how

Pietro Gagliardi 10.4k Dec 31, 2022
Marko Editor is a simple WYSIWYG editor for note taking.

Marko Editor Marko Editor is a simple WYSIWYG editor for note taking written in Rust and GTK 4. It uses Markdown as storage format and can read simple

Michael 49 Jan 6, 2023
A simple GUI version of the pH calibration tool written in egui, based on the eframe template.

caliphui A simple GUI version of the pH calibration tool written in egui, based on the eframe template. Usage Native binaries are provided under relea

Peter Dunne 0 Dec 29, 2021
Szyszka is a simple but powerful and fast bulk file renamer.

Szyszka is a simple but powerful and fast bulk file renamer. Features Written in Rust Available for Linux, Mac and Windows Simple GUI created

Rafał Mikrut 649 Dec 28, 2022