Skip to content

Commit

Permalink
Merge pull request #8 from s1n-Lab/master
Browse files Browse the repository at this point in the history
Updated to ggez v0.8.1 and egui v0.20.1
  • Loading branch information
NemuiSen committed Dec 20, 2022
2 parents 8905932 + 6fd8a3b commit 9ba2d93
Show file tree
Hide file tree
Showing 8 changed files with 127 additions and 178 deletions.
6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ggez-egui"
version = "0.2.1"
version = "0.3.1"
edition = "2021"
authors = ["NemuiSen <nekonya.sen@gmail.com>"]
license = "MIT"
Expand All @@ -11,5 +11,5 @@ description = "A simple implementation of egui for ggez"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
egui = "0.18.1"
ggez = "0.8.0-rc0"
egui = "0.20.1"
ggez = "0.8.1"
50 changes: 28 additions & 22 deletions examples/basic_template.rs
Original file line number Diff line number Diff line change
@@ -1,47 +1,53 @@
use ggez::{
*,
event::*,
};
use ggez_egui::{egui, EguiBackend};
use ggez::{Context, ContextBuilder, GameResult, glam};
use ggez::graphics::{self, Color, DrawParam};
use ggez::event::{self, EventHandler};
use ggez_egui::{EguiBackend, egui};

fn main() -> GameResult {
let (ctx, event_loop) = ContextBuilder::new("game_id", "author")
.build()?;
fn main() {
let (mut ctx, event_loop) = ContextBuilder::new("game_id", "author")
.build()
.expect("FATAL - Failed to create the window.s");

let my_game = MyGame {
egui_backend: EguiBackend::default(),
};
let my_game = MyGame::new(&mut ctx);

event::run(ctx, event_loop, my_game)
event::run(ctx, event_loop, my_game);
}

struct MyGame {
egui_backend: EguiBackend
egui_backend: EguiBackend,
}

impl EventHandler<GameError> for MyGame {
impl MyGame {
pub fn new(_ctx: &mut Context) -> MyGame {
MyGame {
egui_backend: EguiBackend::new(_ctx),
}
}
}

impl EventHandler for MyGame {
fn update(&mut self, ctx: &mut Context) -> GameResult {

let egui_ctx = self.egui_backend.ctx();

egui::Window::new("egui-window").show(&egui_ctx, |ui| {
ui.label("a very nice gui :3");
if ui.button("print \"hello world\"").clicked() {
println!("hello world");
}
if ui.button("quit").clicked() {
request_quit(ctx);
ctx.request_quit();
}
});

self.egui_backend.update(ctx);

Ok(())
}

fn draw(&mut self, ctx: &mut Context) -> GameResult {
let mut canvas = graphics::Canvas::from_frame(
ctx,
graphics::CanvasLoadOp::Clear([0.1, 0.1, 0.1, 1.0].into())
);
canvas.draw(&self.egui_backend, graphics::DrawParam::default());
let mut canvas = graphics::Canvas::from_frame(ctx, Color::BLACK);
canvas.draw(&self.egui_backend, DrawParam::default().dest(glam::vec2(0.0, 0.0)));
canvas.finish(ctx)
}
}

}
102 changes: 36 additions & 66 deletions examples/scale_factor.rs
Original file line number Diff line number Diff line change
@@ -1,94 +1,64 @@
use ggez::{event::{EventHandler, quit, run}, graphics::*};
use ggez_egui::{egui, EguiBackend};
use ggez::{Context, ContextBuilder, GameResult, glam};
use ggez::graphics::{self, Color, DrawParam};
use ggez::event::{self, EventHandler};
use ggez_egui::{EguiBackend, egui};

struct State {
fn main() {
let (mut ctx, event_loop) = ContextBuilder::new("game_id", "author")
.build()
.expect("FATAL - Failed to create the window.");
let my_game = MyGame::new(&mut ctx);

event::run(ctx, event_loop, my_game);
}

struct MyGame {
egui_backend: EguiBackend,
scale_factor: f32,
text: String,
scale_factor: f32
}

impl State {
fn new(ctx: &ggez::Context) -> Self {
Self {
egui_backend: EguiBackend::new(ctx),
scale_factor: 1.0,
text: String::new(),
impl MyGame {
pub fn new(_ctx: &mut Context) -> MyGame {
MyGame {
egui_backend: EguiBackend::new(_ctx),
scale_factor: 1.0
}
}
}

impl EventHandler<ggez::GameError> for State {
fn update(&mut self, ctx: &mut ggez::Context) -> ggez::GameResult {
impl EventHandler for MyGame {
fn update(&mut self, ctx: &mut Context) -> GameResult {

let egui_ctx = self.egui_backend.ctx();

egui::Window::new("egui-window").show(&egui_ctx, |ui| {
ui.group(|ui| {
ui.label("scale_factor");
ui.horizontal(|ui| {
ui.add(egui::Slider::new(&mut self.scale_factor, 0.5..=1.5));
if ui.button("update scale_factor").clicked() {
let (w, h) = size(ctx);
let (w, h) = ctx.gfx.size();
self.egui_backend.input.set_scale_factor(self.scale_factor, (w, h));
}
});
});
ui.add(egui::TextEdit::multiline(&mut self.text).hint_text("text test:"));
ui.add(egui::TextEdit::multiline(&mut "Test!").hint_text("text test:"));
if ui.button("print text test").clicked() {
println!("{}", self.text);
println!("Test!");
}
if ui.button("close button").clicked() {
quit(ctx);
ctx.request_quit();
}
});
Ok(())
}

fn draw(&mut self, ctx: &mut ggez::Context) -> ggez::GameResult {
clear(ctx, Color::BLACK);
let mesh = MeshBuilder::new().rectangle(
DrawMode::fill(),
Rect::new(300.0, 300.0, 100.0, 100.0),
Color::WHITE
)?.build(ctx)?;
draw(ctx, &mesh, DrawParam::default())?;
draw(ctx, &self.egui_backend, ([0.0, 0.0],))?;
present(ctx)
}

fn resize_event(&mut self, ctx: &mut ggez::Context, width: f32, height: f32) {
self.egui_backend.input.resize_event(width, height);
let rect = ggez::graphics::Rect::new(0.0, 0.0, width, height);
ggez::graphics::set_screen_coordinates(ctx, rect).unwrap();
}

fn mouse_button_up_event(&mut self, _ctx: &mut ggez::Context, button: ggez::event::MouseButton, _x: f32, _y: f32) {
self.egui_backend.input.mouse_button_up_event(button);
}

fn mouse_button_down_event(&mut self, _ctx: &mut ggez::Context, button: ggez::event::MouseButton, _x: f32, _y: f32) {
self.egui_backend.input.mouse_button_down_event(button);
}

fn mouse_wheel_event(&mut self, _ctx: &mut ggez::Context, x: f32, y: f32) {
self.egui_backend.input.mouse_wheel_event(x, y);
}

fn mouse_motion_event(&mut self, _ctx: &mut ggez::Context, x: f32, y: f32, _dx: f32, _dy: f32) {
self.egui_backend.input.mouse_motion_event(x, y);
}

fn key_down_event(&mut self, _ctx: &mut ggez::Context, keycode: ggez::event::KeyCode, keymods: ggez::event::KeyMods, _repeat: bool) {
self.egui_backend.input.key_down_event(keycode, keymods);
self.egui_backend.update(ctx);

Ok(())
}

fn text_input_event(&mut self, _ctx: &mut ggez::Context, character: char) {
self.egui_backend.input.text_input_event(character);
fn draw(&mut self, ctx: &mut Context) -> GameResult {
let mut canvas = graphics::Canvas::from_frame(ctx, Color::BLACK);
canvas.draw(&self.egui_backend, DrawParam::default().dest(glam::vec2(0.0, 0.0)));
canvas.finish(ctx)
}
}

fn main() -> ggez::GameResult {
let cb = ggez::ContextBuilder::new("game_id", "author");
let (mut ctx, event_loop) = cb.build()?;
ggez::graphics::set_resizable(&mut ctx, true)?;
let state = State::new(&ctx);
run(ctx, event_loop, state);
}
}
91 changes: 34 additions & 57 deletions examples/select_element.rs
Original file line number Diff line number Diff line change
@@ -1,36 +1,35 @@
use std::{collections::HashMap, f32::consts::TAU};

use ggez::{ContextBuilder, event::{EventHandler, run}, graphics::*};
use ggez::{ContextBuilder, event::{EventHandler, self}, graphics::{*, self}, context::Has, Context, GameError};
use ggez_egui::{egui, EguiBackend};

#[derive(Clone)]
struct Element {
pos: [f32; 2],
size: [f32; 2],
angle: f32,
mesh: Mesh
}

impl Default for Element {
fn default() -> Self {
Self {
impl Element {
fn new(ctx: &mut Context) -> Element {
Element {
pos: [300.0, 500.0],
size: [100.0, 50.0],
angle: 0.0,
mesh: Mesh::new_rectangle(
ctx,
DrawMode::fill(),
Rect::new(-1.0, -1.0, 1.0, 1.0),
Color::WHITE
).unwrap()
}
}
}

impl Drawable for Element {
fn draw(&self, ctx: &mut ggez::Context, _param: DrawParam) -> ggez::GameResult {
let mesh = Mesh::new_rectangle(
ctx,
DrawMode::fill(),
Rect::new(-1.0, -1.0, 1.0, 1.0),
Color::WHITE
)?;

draw(
ctx, &mesh,
fn draw(&self, canvas: &mut Canvas, _param: impl Into<DrawParam>) {
canvas.draw(
&self.mesh,
DrawParam::default()
.dest(self.pos)
.offset([-0.5, -0.5])
Expand All @@ -39,34 +38,37 @@ impl Drawable for Element {
)
}

fn dimensions(&self, _ctx: &mut ggez::Context) -> Option<Rect> {
fn dimensions(&self, _gfx: &impl Has<GraphicsContext>) -> Option<graphics::Rect> {
None
}
}

fn blend_mode(&self) -> Option<BlendMode> {
None
}
fn main() {
let (ctx, event_loop) = ContextBuilder::new("game_id", "author")
.build()
.expect("FATAL - Failed to create the window.s");

fn set_blend_mode(&mut self, _mode: Option<BlendMode>) {}
let my_game = MyGame::default();
event::run(ctx, event_loop, my_game);
}

#[derive(Default)]
struct State {
struct MyGame {
egui_backend: EguiBackend,
elements: HashMap<String, Element>,
curret_element: String,
}

impl EventHandler<ggez::GameError> for State {
fn update(&mut self, _ctx: &mut ggez::Context) -> ggez::GameResult {
impl EventHandler<ggez::GameError> for MyGame {
fn update(&mut self, ctx: &mut ggez::Context) -> ggez::GameResult {
let egui_ctx = self.egui_backend.ctx();
egui::Window::new("Editor").show(&egui_ctx, |ui| {
ui.add(
egui::TextEdit::singleline(&mut self.curret_element).hint_text("put an id here")
);
let selected = self.elements.get(&self.curret_element).is_some() && !self.curret_element.is_empty();
if ui.add_enabled(!selected, egui::Button::new("add element")).clicked() {
self.elements.insert(self.curret_element.clone(), Element::default());
self.elements.insert(self.curret_element.clone(), Element::new(ctx));
self.curret_element = String::new();
}

Expand Down Expand Up @@ -112,46 +114,21 @@ impl EventHandler<ggez::GameError> for State {
});
}
});
self.egui_backend.update(ctx);
Ok(())
}

fn draw(&mut self, ctx: &mut ggez::Context) -> ggez::GameResult {
clear(ctx, Color::BLACK);
let mut canvas = graphics::Canvas::from_frame(ctx, Color::BLACK);
for (_, element) in &self.elements {
draw(ctx, element, DrawParam::default())?;
canvas.draw(element, DrawParam::default());
}
draw(ctx, &self.egui_backend, DrawParam::default())?;
present(ctx)
canvas.draw(&self.egui_backend, DrawParam::default());
canvas.finish(ctx)
}

fn mouse_button_down_event(&mut self, _ctx: &mut ggez::Context, button: ggez::event::MouseButton, _x: f32, _y: f32) {
self.egui_backend.input.mouse_button_down_event(button);
}

fn mouse_button_up_event(&mut self, _ctx: &mut ggez::Context, button: ggez::event::MouseButton, _x: f32, _y: f32) {
self.egui_backend.input.mouse_button_up_event(button);
}

fn mouse_wheel_event(&mut self, _ctx: &mut ggez::Context, x: f32, y: f32) {
self.egui_backend.input.mouse_wheel_event(x, y)
}

fn mouse_motion_event(&mut self, _ctx: &mut ggez::Context, x: f32, y: f32, _dx: f32, _dy: f32) {
self.egui_backend.input.mouse_motion_event(x, y);
}

fn key_down_event(&mut self, _ctx: &mut ggez::Context, keycode: ggez::event::KeyCode, keymods: ggez::event::KeyMods, _repeat: bool) {
self.egui_backend.input.key_down_event(keycode, keymods);
}

fn text_input_event(&mut self, _ctx: &mut ggez::Context, character: char) {
fn text_input_event(&mut self, _ctx: &mut ggez::Context, character: char) -> Result<(), GameError> {
self.egui_backend.input.text_input_event(character);
Ok(())
}
}

fn main() -> ggez::GameResult {
let cb = ContextBuilder::new("game_id", "author");
let (ctx, events_loop) = cb.build()?;
let state = State::default();
run(ctx, events_loop, state);
}
}

0 comments on commit 9ba2d93

Please sign in to comment.