Thanks to visit codestin.com
Credit goes to github.com

Skip to content

craft-gui/craft

Repository files navigation

📜 Craft

License: Unlicense Discord

Craft is a library for creating desktops user interfaces. craft_retained provides platform independent widgets.

Example

use std::cell::RefCell;
use std::rc::Rc;

use craft_retained::elements::{Container, Element, Text, Window};
use craft_retained::events::ui_events::pointer::PointerButton;
use craft_retained::style::{AlignItems, FlexDirection, JustifyContent};
use craft_retained::{Color, CraftOptions, pct, px, rgb};

fn create_button(label: &str, base_color: Color, delta: i64, state: Rc<RefCell<i64>>, count_text: Text) -> Container {
    let border_color = rgb(0, 0, 0);
    Container::new()
        .border_width(px(1), px(2), px(3), px(4))
        .border_color(border_color, border_color, border_color, border_color)
        .border_radius((10.0, 10.0), (10.0, 10.0), (10.0, 10.0), (10.0, 10.0))
        .padding(px(15), px(30), px(15), px(30))
        .justify_content(Some(JustifyContent::Center))
        .background_color(base_color)
        .on_pointer_button_up(Rc::new(move |event, pointer_button_event| {
            if pointer_button_event.button == Some(PointerButton::Primary) {
                *state.borrow_mut() += delta;
                count_text.clone().text(&format!("Count: {}", state.borrow()));
                event.prevent_propagate();
            }
        }))
        .push(Text::new(label).font_size(24.0).color(Color::WHITE).selectable(false))
}

fn main() {
    let count = Rc::new(RefCell::new(0));
    let count_text = Text::new(&format!("Count: {}", count.borrow()));

    Window::new()
        .flex_direction(FlexDirection::Column)
        .justify_content(Some(JustifyContent::Center))
        .align_items(Some(AlignItems::Center))
        .width(pct(100))
        .height(pct(100))
        .gap(px(20), px(20))
        .push(count_text.clone())
        .push({
            Container::new()
                .gap(px(20), px(20))
                .push(create_button(
                    "-",
                    rgb(244, 67, 54),
                    -1,
                    count.clone(),
                    count_text.clone(),
                ))
                .push(create_button(
                    "+",
                    rgb(76, 175, 80),
                    1,
                    count.clone(),
                    count_text.clone(),
                ))
        });

    craft_retained::craft_main(CraftOptions::basic("Counter"));
}

About

Experimental Rust GUI

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages