hmm
This commit is contained in:
parent
636bf2a75f
commit
bbd2a6089c
10 changed files with 62 additions and 16 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -503,6 +503,7 @@ name = "moonhare_window"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gtk4",
|
"gtk4",
|
||||||
|
"moonhare_event",
|
||||||
"moonhare_log",
|
"moonhare_log",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,4 +4,4 @@ edition = "2024"
|
||||||
version.workspace = true
|
version.workspace = true
|
||||||
authors.workspace = true
|
authors.workspace = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
@ -9,4 +9,8 @@ pub enum EventType {
|
||||||
pub trait Event {
|
pub trait Event {
|
||||||
fn get_event_name() -> &'static str;
|
fn get_event_name() -> &'static str;
|
||||||
fn get_event_type() -> EventType;
|
fn get_event_type() -> EventType;
|
||||||
}
|
|
||||||
|
/// Emits the Event
|
||||||
|
fn emit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
use crate::{event::Event,};
|
use crate::{event::{Event, EventType}, events::key_events::KeyEvent};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
struct KeyPressedEvent{}
|
struct KeyPressedEvent{}
|
||||||
|
|
||||||
const KEY_PRESSED_EVENT_NAME: &str = "KeyPressedEvent";
|
const KEY_PRESSED_EVENT_NAME: &str = "KeyPressedEvent";
|
||||||
|
|
@ -9,8 +10,12 @@ impl Event for KeyPressedEvent {
|
||||||
KEY_PRESSED_EVENT_NAME
|
KEY_PRESSED_EVENT_NAME
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_event_type() -> crate::event::EventType {
|
fn get_event_type() -> EventType {
|
||||||
crate::event::EventType::KeyPressed
|
EventType::KeyPressed
|
||||||
|
}
|
||||||
|
|
||||||
|
fn emit(&self) -> &impl Event{
|
||||||
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
pub mod window_close_event;
|
||||||
|
|
||||||
use crate::event::Event;
|
use crate::event::Event;
|
||||||
|
|
||||||
pub trait WindowEvent: Event {
|
pub trait WindowEvent: Event {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
use crate::{event::Event, events::window_events::WindowEvent};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct WindowCloseEvent {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Event for WindowCloseEvent {
|
||||||
|
fn get_event_name() -> &'static str {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_event_type() -> crate::event::EventType {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn emit(){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl WindowEvent for WindowCloseEvent {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -8,6 +8,7 @@ pub mod basic;
|
||||||
/// Only one Game may exist per project
|
/// Only one Game may exist per project
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Game {
|
pub struct Game {
|
||||||
|
pub is_running: bool,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub context: WindowRenderContext,
|
pub context: WindowRenderContext,
|
||||||
}
|
}
|
||||||
|
|
@ -15,6 +16,7 @@ pub struct Game {
|
||||||
impl Default for Game {
|
impl Default for Game {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
is_running: true,
|
||||||
name: default_game_name(),
|
name: default_game_name(),
|
||||||
context: WindowRenderContext::OPENGLGTK
|
context: WindowRenderContext::OPENGLGTK
|
||||||
}
|
}
|
||||||
|
|
@ -28,7 +30,7 @@ impl Game {
|
||||||
|
|
||||||
pub fn run(&self) {
|
pub fn run(&self) {
|
||||||
info("Running Game...");
|
info("Running Game...");
|
||||||
loop {
|
while self.is_running {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,4 +6,5 @@ authors.workspace = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
moonhare_log = { path = "../moonhare_log" }
|
moonhare_log = { path = "../moonhare_log" }
|
||||||
|
moonhare_event = { path = "../moonhare_event" }
|
||||||
gtk4 = "*"
|
gtk4 = "*"
|
||||||
|
|
@ -1,12 +1,5 @@
|
||||||
//! Provides functionality to create either a vulkan or opengl window
|
//! Provides functionality to create either a vulkan or opengl window
|
||||||
|
|
||||||
use std::marker;
|
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
|
||||||
use crate::platforms::gtk_window::GTKWindow;
|
|
||||||
|
|
||||||
pub mod window_config;
|
pub mod window_config;
|
||||||
|
|
||||||
pub mod platforms;
|
pub mod platforms;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
|
@ -30,7 +23,8 @@ pub struct Window {
|
||||||
|
|
||||||
|
|
||||||
impl Window {
|
impl Window {
|
||||||
/// creates a gtk4 window
|
/// creates a gtk4 window while spaning a new thread that the window runs on.
|
||||||
|
/// here: gtk sends engine events when _things happen_ with the window that other engine parts can interact with
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
pub fn create(context: WindowRenderContext) {
|
pub fn create(context: WindowRenderContext) {
|
||||||
match context {
|
match context {
|
||||||
|
|
@ -51,7 +45,6 @@ impl Window {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(target_os = "linux"))]
|
#[cfg(not(target_os = "linux"))]
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
use gtk4::{gio::prelude::ApplicationExt, glib, prelude::{GtkWindowExt, WidgetExt}, Application, ApplicationWindow};
|
use gtk4::{gio::{prelude::{ActionMapExtManual, ApplicationExt}, ActionEntry}, glib, prelude::{GtkWindowExt, WidgetExt}, Application, ApplicationWindow};
|
||||||
|
use moonhare_event::{event::Event, events::window_events::window_close_event::WindowCloseEvent};
|
||||||
|
|
||||||
use crate::{window_config, MoonhareWindow};
|
use crate::{window_config, MoonhareWindow};
|
||||||
|
|
||||||
|
|
@ -21,8 +22,20 @@ impl GTKWindow {
|
||||||
window.set_default_size(window_config.width as i32, window_config.height as i32);
|
window.set_default_size(window_config.width as i32, window_config.height as i32);
|
||||||
window.set_visible(window_config.visble);
|
window.set_visible(window_config.visble);
|
||||||
|
|
||||||
|
// Add action "close" to `window` taking no parameter
|
||||||
|
let action_close = ActionEntry::builder("close")
|
||||||
|
.activate(|window: &ApplicationWindow, _, _| {
|
||||||
|
GTKWindow::shutdown();
|
||||||
|
window.close();
|
||||||
|
})
|
||||||
|
.build();
|
||||||
|
|
||||||
|
window.add_action_entries([action_close]);
|
||||||
|
|
||||||
window.show();
|
window.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MoonhareWindow for GTKWindow {
|
impl MoonhareWindow for GTKWindow {
|
||||||
|
|
@ -43,6 +56,8 @@ impl MoonhareWindow for GTKWindow {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn shutdown() {
|
fn shutdown() {
|
||||||
|
// todo: emit WindowCloseEvent
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue