use std::rc::Rc;
-use narcissus_core::{flags_def, raw_window::AsRawWindow, Upcast};
+use narcissus_core::{flags_def, raw_window::AsRawWindow};
pub use key::Key;
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
pub struct WindowId(u64);
-pub trait Window: AsRawWindow + Upcast<dyn AsRawWindow> {
+pub trait Window: AsRawWindow {
fn id(&self) -> WindowId;
fn size(&self) -> (u32, u32);
use crate::{App, ButtonFlags, Event, Key, ModifierFlags, Window, WindowId};
use narcissus_core::{
+ Mutex,
raw_window::{AsRawWindow, RawWindow, WaylandWindow, XlibWindow},
- Mutex, Upcast,
};
use sdl3_sys::{
events::{
- SDL_EventType, SDL_PollEvent, SDL_EVENT_KEY_DOWN, SDL_EVENT_KEY_UP,
- SDL_EVENT_MOUSE_BUTTON_DOWN, SDL_EVENT_MOUSE_BUTTON_UP, SDL_EVENT_MOUSE_MOTION,
- SDL_EVENT_QUIT, SDL_EVENT_WINDOW_CLOSE_REQUESTED, SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED,
+ SDL_EVENT_KEY_DOWN, SDL_EVENT_KEY_UP, SDL_EVENT_MOUSE_BUTTON_DOWN,
+ SDL_EVENT_MOUSE_BUTTON_UP, SDL_EVENT_MOUSE_MOTION, SDL_EVENT_QUIT,
+ SDL_EVENT_WINDOW_CLOSE_REQUESTED, SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED,
SDL_EVENT_WINDOW_FOCUS_GAINED, SDL_EVENT_WINDOW_FOCUS_LOST, SDL_EVENT_WINDOW_MOUSE_ENTER,
SDL_EVENT_WINDOW_MOUSE_LEAVE, SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED,
- SDL_EVENT_WINDOW_RESIZED,
+ SDL_EVENT_WINDOW_RESIZED, SDL_EventType, SDL_PollEvent,
},
- init::{SDL_InitSubSystem, SDL_Quit, SDL_INIT_VIDEO},
+ init::{SDL_INIT_VIDEO, SDL_InitSubSystem, SDL_Quit},
keycode::*,
mouse::{
SDL_BUTTON_LMASK, SDL_BUTTON_MMASK, SDL_BUTTON_RMASK, SDL_BUTTON_X1MASK, SDL_BUTTON_X2MASK,
video::{
SDL_CreateWindow, SDL_DestroyWindow, SDL_GetCurrentVideoDriver, SDL_GetWindowDisplayScale,
SDL_GetWindowID, SDL_GetWindowProperties, SDL_GetWindowSize, SDL_GetWindowSizeInPixels,
- SDL_Window, SDL_PROP_WINDOW_WAYLAND_DISPLAY_POINTER,
- SDL_PROP_WINDOW_WAYLAND_SURFACE_POINTER, SDL_PROP_WINDOW_X11_DISPLAY_POINTER,
- SDL_PROP_WINDOW_X11_WINDOW_NUMBER, SDL_WINDOW_HIGH_PIXEL_DENSITY, SDL_WINDOW_RESIZABLE,
- SDL_WINDOW_VULKAN,
+ SDL_PROP_WINDOW_WAYLAND_DISPLAY_POINTER, SDL_PROP_WINDOW_WAYLAND_SURFACE_POINTER,
+ SDL_PROP_WINDOW_X11_DISPLAY_POINTER, SDL_PROP_WINDOW_X11_WINDOW_NUMBER,
+ SDL_WINDOW_HIGH_PIXEL_DENSITY, SDL_WINDOW_RESIZABLE, SDL_WINDOW_VULKAN, SDL_Window,
},
};
}
}
-impl Upcast<dyn AsRawWindow> for SdlWindow {
- fn upcast(&self) -> &(dyn AsRawWindow + 'static) {
- self
- }
-}
-
pub struct SdlApp {
windows: Mutex<HashMap<WindowId, Rc<SdlWindow>>>,
}
use renderdoc_sys as rdoc;
use fonts::{FontFamily, Fonts};
-use narcissus_app::{create_app, Event, Key, WindowDesc};
+use narcissus_app::{Event, Key, WindowDesc, create_app};
use narcissus_core::default;
use narcissus_font::{FontCollection, GlyphCache, HorizontalMetrics};
use narcissus_gpu::{
- create_device, ColorSpace, ImageFormat, ImageUsageFlags, PresentMode, SwapchainConfigurator,
- SwapchainImage, ThreadToken,
+ ColorSpace, ImageFormat, ImageUsageFlags, PresentMode, SwapchainConfigurator, SwapchainImage,
+ ThreadToken, create_device,
};
-use narcissus_maths::{sin_cos_pi_f32, vec2, Vec2};
+use narcissus_maths::{Vec2, sin_cos_pi_f32, vec2};
mod draw;
mod fonts;
let (width, height) = window.size_in_pixels();
if let Ok(result) = gpu.acquire_swapchain(
frame,
- window.upcast(),
+ window.as_ref(),
width,
height,
&mut swapchain_configurator,
}
CloseRequested { window_id } => {
let window = app.window(window_id);
- gpu.destroy_swapchain(window.upcast());
+ gpu.destroy_swapchain(window.as_ref());
}
_ => {}
}