Simplify window traits

This commit is contained in:
Maximilian Ammann 2022-05-22 19:20:14 +02:00
parent 1e63718dfc
commit 355977e3b7
7 changed files with 21 additions and 48 deletions

View File

@ -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<MWC, SM, HC> Runnable<MWC, SM, HC> for HeadlessMapWindow

View File

@ -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")]

View File

@ -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

View File

@ -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;

View File

@ -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<Self, wgpu::RequestDeviceError>
where
MWC::MapWindow: HasRawWindow,
MWC: MapWindowConfig,
/* <<MWC as MapWindowConfig>::MapWindow as MapWindow>::Window:
raw_window_handle::HasRawWindowHandle,*/
<MWC as MapWindowConfig>::MapWindow: HeadedMapWindow,
{
let instance = wgpu::Instance::new(wgpu_settings.backends.unwrap_or(wgpu::Backends::all()));

View File

@ -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<MWC>(&mut self, window: &MWC::MapWindow, instance: &wgpu::Instance)
where
MWC: MapWindowConfig,
<<MWC as MapWindowConfig>::MapWindow as MapWindow>::RawWindow:
raw_window_handle::HasRawWindowHandle,
<MWC as MapWindowConfig>::MapWindow: HeadedMapWindow,
{
self.surface = unsafe { instance.create_surface(window.inner()) };
}
@ -127,9 +127,7 @@ impl Surface {
) -> Self
where
MWC: MapWindowConfig,
MWC::MapWindow: HasRawWindow,
/* <<MWC as MapWindowConfig>::MapWindow as MapWindow>::Window:
raw_window_handle::HasRawWindowHandle,*/
<MWC as MapWindowConfig>::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<MWC>(&mut self, window: &MWC::MapWindow, instance: &wgpu::Instance)
where
MWC: MapWindowConfig,
<<MWC as MapWindowConfig>::MapWindow as MapWindow>::RawWindow:
raw_window_handle::HasRawWindowHandle,
<MWC as MapWindowConfig>::MapWindow: HeadedMapWindow,
{
match &mut self.head {
Head::Headed(window_head) => {

View File

@ -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<MW> 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;