Checkpoint

Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
Antonio Scandurra 2023-09-22 14:40:39 -06:00
parent d1791a999d
commit 3dc1e917bf
8 changed files with 203 additions and 132 deletions

View file

@ -7,12 +7,14 @@ mod test;
use crate::{
AnyWindowHandle, Bounds, FontFeatures, FontId, FontMetrics, FontStyle, FontWeight, GlyphId,
LineLayout, Pixels, Point, Result, RunStyle, SharedString, Size,
LineLayout, Pixels, Point, RenderTarget, Result, RunStyle, SharedString, Size,
};
use anyhow::anyhow;
use async_task::Runnable;
use futures::channel::oneshot;
use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle};
use raw_window_handle::{
HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle, RawWindowHandle,
};
use seahash::SeaHasher;
use serde::{Deserialize, Serialize};
use std::ffi::c_void;
@ -114,7 +116,10 @@ impl Debug for PlatformScreenHandle {
unsafe impl Send for PlatformScreenHandle {}
pub trait PlatformWindow: HasRawWindowHandle + HasRawDisplayHandle {
pub trait PlatformWindow {
fn raw_window_handle(&self) -> RawWindowHandle;
fn raw_display_handle(&self) -> RawDisplayHandle;
fn bounds(&self) -> WindowBounds;
fn content_size(&self) -> Size<Pixels>;
fn scale_factor(&self) -> f32;
@ -148,6 +153,25 @@ pub trait PlatformWindow: HasRawWindowHandle + HasRawDisplayHandle {
fn is_topmost_for_position(&self, position: Point<Pixels>) -> bool;
}
unsafe impl<'a> HasRawWindowHandle for &'a dyn PlatformWindow {
fn raw_window_handle(&self) -> raw_window_handle::RawWindowHandle {
self.raw_window_handle()
}
}
unsafe impl<'a> HasRawDisplayHandle for &'a dyn PlatformWindow {
fn raw_display_handle(&self) -> raw_window_handle::RawDisplayHandle {
self.raw_display_handle()
}
}
impl<'a> RenderTarget for &'a dyn PlatformWindow {
fn content_device_size(&self) -> Size<crate::DevicePixels> {
self.content_size()
.map(|d| d.to_device_pixels(self.scale_factor()))
}
}
pub trait PlatformDispatcher: Send + Sync {
fn is_main_thread(&self) -> bool;
fn run_on_main_thread(&self, task: Runnable);