From 355977e3b76fca02c94fcf79f72ae7df3875a82b Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Sun, 22 May 2022 19:20:14 +0200 Subject: [PATCH] Simplify window traits --- maplibre-demo/src/main.rs | 7 ------- maplibre-winit/src/winit/mod.rs | 2 +- maplibre-winit/src/winit/noweb.rs | 9 ++++---- maplibre/src/lib.rs | 2 +- maplibre/src/render/mod.rs | 6 ++---- maplibre/src/render/resource/surface.rs | 15 ++++++------- maplibre/src/window.rs | 28 ++++++------------------- 7 files changed, 21 insertions(+), 48 deletions(-) diff --git a/maplibre-demo/src/main.rs b/maplibre-demo/src/main.rs index 28759fb9..c765ac0c 100644 --- a/maplibre-demo/src/main.rs +++ b/maplibre-demo/src/main.rs @@ -33,16 +33,9 @@ impl MapWindowConfig for HeadlessMapWindowConfig { pub struct HeadlessMapWindow; impl MapWindow for HeadlessMapWindow { - type EventLoop = (); - type RawWindow = (); - fn size(&self) -> WindowSize { WindowSize::new(1920, 1080).unwrap() } - - fn inner(&self) -> &Self::RawWindow { - &() - } } impl Runnable for HeadlessMapWindow diff --git a/maplibre-winit/src/winit/mod.rs b/maplibre-winit/src/winit/mod.rs index f566d9c2..b3dbbf07 100644 --- a/maplibre-winit/src/winit/mod.rs +++ b/maplibre-winit/src/winit/mod.rs @@ -8,7 +8,7 @@ use winit::event_loop::ControlFlow; use crate::input::{InputController, UpdateState}; use maplibre::map_schedule::MapSchedule; -use maplibre::window::{MapWindow, MapWindowConfig, Runnable}; +use maplibre::window::{HeadedMapWindow, MapWindow, MapWindowConfig, Runnable}; use winit::event::Event; #[cfg(target_arch = "wasm32")] diff --git a/maplibre-winit/src/winit/noweb.rs b/maplibre-winit/src/winit/noweb.rs index 3b7337e1..9457745b 100644 --- a/maplibre-winit/src/winit/noweb.rs +++ b/maplibre-winit/src/winit/noweb.rs @@ -10,12 +10,9 @@ use super::WinitMapWindow; use super::WinitWindow; use super::WinitMapWindowConfig; -use maplibre::window::{MapWindow, MapWindowConfig, WindowSize}; +use maplibre::window::{HeadedMapWindow, MapWindow, MapWindowConfig, WindowSize}; impl MapWindow for WinitMapWindow { - type EventLoop = WinitEventLoop; - type RawWindow = WinitWindow; - fn size(&self) -> WindowSize { let size = self.window.inner_size(); #[cfg(target_os = "android")] @@ -29,6 +26,10 @@ impl MapWindow for WinitMapWindow { WindowSize::new(size.width, size.height).expect("failed to get window dimensions."); window_size } +} +impl HeadedMapWindow for WinitMapWindow { + type EventLoop = WinitEventLoop; + type RawWindow = WinitWindow; fn inner(&self) -> &Self::RawWindow { &self.window diff --git a/maplibre/src/lib.rs b/maplibre/src/lib.rs index cbc657ff..04b17893 100644 --- a/maplibre/src/lib.rs +++ b/maplibre/src/lib.rs @@ -22,7 +22,7 @@ use crate::map_schedule::MapSchedule; use crate::render::settings::{RendererSettings, WgpuSettings}; use crate::render::{RenderState, Renderer}; use crate::style::Style; -use crate::window::{HasRawWindow, MapWindow, MapWindowConfig, Runnable, WindowSize}; +use crate::window::{HeadedMapWindow, MapWindow, MapWindowConfig, Runnable, WindowSize}; pub mod context; pub mod coords; diff --git a/maplibre/src/render/mod.rs b/maplibre/src/render/mod.rs index e08e2962..b35dd765 100644 --- a/maplibre/src/render/mod.rs +++ b/maplibre/src/render/mod.rs @@ -27,7 +27,7 @@ use crate::render::shaders::{ShaderFeatureStyle, ShaderLayerMetadata}; use crate::render::tile_view_pattern::{TileInView, TileShape, TileViewPattern}; use crate::render::util::Eventually; use crate::tessellation::IndexDataType; -use crate::{HasRawWindow, MapWindow, MapWindowConfig}; +use crate::{HeadedMapWindow, MapWindow, MapWindowConfig}; use log::info; use std::sync::Arc; @@ -122,10 +122,8 @@ impl Renderer { settings: RendererSettings, ) -> Result where - MWC::MapWindow: HasRawWindow, MWC: MapWindowConfig, - /* <::MapWindow as MapWindow>::Window: - raw_window_handle::HasRawWindowHandle,*/ + ::MapWindow: HeadedMapWindow, { let instance = wgpu::Instance::new(wgpu_settings.backends.unwrap_or(wgpu::Backends::all())); diff --git a/maplibre/src/render/resource/surface.rs b/maplibre/src/render/resource/surface.rs index 1feeb0b8..f2547886 100644 --- a/maplibre/src/render/resource/surface.rs +++ b/maplibre/src/render/resource/surface.rs @@ -4,7 +4,8 @@ use crate::render::resource::texture::TextureView; use crate::render::settings::RendererSettings; use crate::render::util::HasChanged; -use crate::{HasRawWindow, MapWindow, MapWindowConfig, WindowSize}; +use crate::window::HeadedMapWindow; +use crate::{MapWindow, MapWindowConfig, WindowSize}; use std::fs::File; use std::io::Write; use std::mem::size_of; @@ -46,8 +47,7 @@ impl WindowHead { pub fn recreate_surface(&mut self, window: &MWC::MapWindow, instance: &wgpu::Instance) where MWC: MapWindowConfig, - <::MapWindow as MapWindow>::RawWindow: - raw_window_handle::HasRawWindowHandle, + ::MapWindow: HeadedMapWindow, { self.surface = unsafe { instance.create_surface(window.inner()) }; } @@ -127,9 +127,7 @@ impl Surface { ) -> Self where MWC: MapWindowConfig, - MWC::MapWindow: HasRawWindow, - /* <::MapWindow as MapWindow>::Window: - raw_window_handle::HasRawWindowHandle,*/ + ::MapWindow: HeadedMapWindow, { let size = window.size(); let surface_config = wgpu::SurfaceConfiguration { @@ -141,7 +139,7 @@ impl Surface { present_mode: wgpu::PresentMode::Fifo, // VSync }; - let surface = unsafe { instance.create_surface(window.raw_window()) }; + let surface = unsafe { instance.create_surface(window.inner()) }; Self { size, @@ -254,8 +252,7 @@ impl Surface { pub fn recreate(&mut self, window: &MWC::MapWindow, instance: &wgpu::Instance) where MWC: MapWindowConfig, - <::MapWindow as MapWindow>::RawWindow: - raw_window_handle::HasRawWindowHandle, + ::MapWindow: HeadedMapWindow, { match &mut self.head { Head::Headed(window_head) => { diff --git a/maplibre/src/window.rs b/maplibre/src/window.rs index ea339d4e..784859e4 100644 --- a/maplibre/src/window.rs +++ b/maplibre/src/window.rs @@ -3,34 +3,18 @@ use crate::{HTTPClient, MapSchedule, ScheduleMethod}; use raw_window_handle::{HasRawWindowHandle, RawWindowHandle}; -/// Window with an optional [carte::window::WindowSize]. +/// Window with a [carte::window::WindowSize]. pub trait MapWindow { - type EventLoop; - type RawWindow; - fn size(&self) -> WindowSize; +} + +pub trait HeadedMapWindow: MapWindow { + type EventLoop; + type RawWindow: HasRawWindowHandle; fn inner(&self) -> &Self::RawWindow; } -pub trait HasRawWindow { - type HRWH: HasRawWindowHandle; - - fn raw_window(&self) -> &Self::HRWH; -} - -impl HasRawWindow for MW -where - MW: MapWindow, - MW::RawWindow: HasRawWindowHandle, -{ - type HRWH = MW::RawWindow; - - fn raw_window(&self) -> &Self::HRWH { - self.inner() - } -} - pub trait MapWindowConfig: 'static { type MapWindow: MapWindow;