From 2978a77a9c1f87511933ba80d5039eb0abe255f2 Mon Sep 17 00:00:00 2001 From: Josh Simmons Date: Sat, 5 Apr 2025 23:38:07 +0200 Subject: [PATCH] narcissus-core: Use stable trait upcasting --- engine/narcissus-app/src/lib.rs | 4 ++-- engine/narcissus-app/src/sdl.rs | 25 +++++++++---------------- engine/narcissus-core/src/lib.rs | 4 ---- title/shark/src/main.rs | 12 ++++++------ 4 files changed, 17 insertions(+), 28 deletions(-) diff --git a/engine/narcissus-app/src/lib.rs b/engine/narcissus-app/src/lib.rs index f4f2d3b..f2c206f 100644 --- a/engine/narcissus-app/src/lib.rs +++ b/engine/narcissus-app/src/lib.rs @@ -3,7 +3,7 @@ mod sdl; 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; @@ -33,7 +33,7 @@ pub struct WindowDesc<'a> { #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)] pub struct WindowId(u64); -pub trait Window: AsRawWindow + Upcast { +pub trait Window: AsRawWindow { fn id(&self) -> WindowId; fn size(&self) -> (u32, u32); diff --git a/engine/narcissus-app/src/sdl.rs b/engine/narcissus-app/src/sdl.rs index 1676801..542b36f 100644 --- a/engine/narcissus-app/src/sdl.rs +++ b/engine/narcissus-app/src/sdl.rs @@ -8,19 +8,19 @@ use std::{ 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, @@ -30,10 +30,9 @@ use sdl3_sys::{ 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, }, }; @@ -137,12 +136,6 @@ impl AsRawWindow for SdlWindow { } } -impl Upcast for SdlWindow { - fn upcast(&self) -> &(dyn AsRawWindow + 'static) { - self - } -} - pub struct SdlApp { windows: Mutex>>, } diff --git a/engine/narcissus-core/src/lib.rs b/engine/narcissus-core/src/lib.rs index cc9f12c..17eb367 100644 --- a/engine/narcissus-core/src/lib.rs +++ b/engine/narcissus-core/src/lib.rs @@ -258,10 +258,6 @@ pub unsafe fn box_assume_init(value: Box>) -> Box { /// Negative traits aren't stable yet, so use a dummy PhantomData marker to implement !Send pub type PhantomUnsend = std::marker::PhantomData<*mut ()>; -pub trait Upcast { - fn upcast(&self) -> &T; -} - #[must_use] pub fn align_offset(x: usize, align: usize) -> usize { debug_assert!(align.is_power_of_two()); diff --git a/title/shark/src/main.rs b/title/shark/src/main.rs index 8529445..fe4652f 100644 --- a/title/shark/src/main.rs +++ b/title/shark/src/main.rs @@ -10,14 +10,14 @@ use shark_shaders::pipelines::{Draw2dCmd, Draw2dScissor}; 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; @@ -295,7 +295,7 @@ pub fn main() { 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, @@ -346,7 +346,7 @@ pub fn main() { } CloseRequested { window_id } => { let window = app.window(window_id); - gpu.destroy_swapchain(window.upcast()); + gpu.destroy_swapchain(window.as_ref()); } _ => {} } -- 2.49.0