#ui #graphics #gamedev #render

yakui-miniquad

A library integrating yakui with miniquad

13 releases

new 0.3.2 Sep 28, 2024
0.3.1 Apr 29, 2024
0.2.4 Nov 28, 2023
0.1.4 Nov 8, 2023

#258 in GUI

Download history 2/week @ 2024-06-10 1/week @ 2024-06-24 1/week @ 2024-07-15 30/week @ 2024-07-29 205/week @ 2024-09-23

205 downloads per month
Used in yakui-macroquad

MIT license

35KB
687 lines

yakui-miniquad

CI Docs Crates.io version

This is a simple library integrating yakui with miniquad, allowing you to use yakui with your miniquad projects easily.

I'm happy to accept contributions in the form of fixes or improvements, just be nice :)

If you're interested in the version usable with macroquad directly, it's here: yakui-macroquad!

Version

This version is for miniquad 0.4 and yakui 0.2.0.

Example

See the example, you can also cargo run --example hello-world to test the example.

License

See LICENSE


lib.rs:

yakui-miniquad integrates yakui with miniquad.

Usage

In order to use this library, create an instance of YakuiMiniQuad and call its event-handler functions from your miniquad::EventHandler implementation.

Here's an example which just renders "hello, world" in the middle of the screen.

use std::ops::DerefMut;

use miniquad::*;
use miniquad::window::new_rendering_backend;
use yakui::{widgets::Pad, Color};

use yakui_miniquad::*;

struct Stage {
    ctx: Box<Context>,
    yakui_mq: YakuiMiniQuad,
}

impl Stage {
    pub fn new(mut ctx: Box<Context>) -> Stage {
        let yakui_mq = YakuiMiniQuad::new(ctx.deref_mut());
        Stage {
            ctx,
            yakui_mq
        }
    }
}

impl EventHandler for Stage {
    fn update(&mut self) {
        self.yakui_mq.start();

        yakui::center(|| {
            yakui::colored_box_container(Color::CORNFLOWER_BLUE, || {
                yakui::pad(Pad::all(16.0), || {
                    yakui::text(32.0, "hello, world!");
                });
            });
        });

        self.yakui_mq.finish();
    }

    fn draw(&mut self) {
        self.ctx.begin_default_pass(Default::default());

        // draw some stuff before the UI?

        self.yakui_mq.draw(self.ctx.deref_mut());

        // ... draw some stuff after the UI!

        self.ctx.end_render_pass();

        self.ctx.commit_frame();
    }

    fn resize_event(&mut self, width: f32, height: f32) {
        self.yakui_mq.resize_event(width, height);
    }

    fn mouse_motion_event(&mut self, x: f32, y: f32) {
        self.yakui_mq.mouse_motion_event(x, y);
    }

    fn mouse_wheel_event(&mut self, x: f32, y: f32) {
        self.yakui_mq.mouse_wheel_event(x, y);
    }

    fn mouse_button_down_event(&mut self, button: MouseButton, x: f32, y: f32) {
        self.yakui_mq.mouse_button_down_event(button, x, y);
    }

    fn mouse_button_up_event(&mut self, button: MouseButton, x: f32, y: f32) {
        self.yakui_mq.mouse_button_up_event(button, x, y);
    }

    fn char_event(&mut self, character: char, keymods: KeyMods, repeat: bool) {
        self.yakui_mq.char_event(character, keymods, repeat);
    }

    fn key_down_event(
        &mut self,
        keycode: KeyCode,
        keymods: KeyMods,
        repeat: bool,
    ) {
        self.yakui_mq.key_down_event(keycode, keymods, repeat);
    }

    fn key_up_event(&mut self, keycode: KeyCode, keymods: KeyMods) {
        self.yakui_mq.key_up_event(keycode, keymods);
    }
}

fn main() {
    miniquad::start(conf::Conf::default(), || {
        Box::new(Stage::new(new_rendering_backend()))
    });
}

Dependencies

~9MB
~227K SLoC