#ui #graphics #gamedev #render

yakui-miniquad

整合 yakui 和 miniquad 的库

12 个版本

0.3.1 2024 年 4 月 29 日
0.3.0 2024 年 4 月 29 日
0.2.4 2023 年 11 月 28 日
0.1.4 2023 年 11 月 8 日

#386GUI

每月 30 次下载
用于 yakui-macroquad

MIT 许可证

35KB
685

yakui-miniquad

CI Docs Crates.io version

这是一个简单的库,用于整合 yakui 和 miniquad,使您能够轻松地在 miniquad 项目中使用 yakui。

我很高兴接受以修复或改进形式的贡献,只需保持友好即可 :)

如果您对可直接与 macroquad 一起使用的版本感兴趣,请参阅: yakui-macroquad

版本

此版本适用于 miniquad 0.4 和 yakui 0.2.0。

示例

示例,您也可以使用 cargo run --example hello-world 来测试示例。

许可证

见 LICENSE


lib.rs:

yakui-miniquad 整合 yakui 和 miniquad。

用法

为了使用此库,请创建 YakuiMiniQuad 的实例,并从您的 miniquad::EventHandler 实现中调用其事件处理函数。

以下是一个仅将 "hello, world" 渲染到屏幕中央的示例。

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()))
    });
}

依赖项

~9MB
~227K SLoC