#![cfg(target_os = "ios")]
use std::os::raw::c_void;
use crate::{
event_loop::EventLoop,
monitor::MonitorHandle,
window::{Window, WindowBuilder},
};
pub trait EventLoopExtIOS {
fn idiom(&self) -> Idiom;
}
impl<T: 'static> EventLoopExtIOS for EventLoop<T> {
fn idiom(&self) -> Idiom {
self.event_loop.idiom()
}
}
pub trait WindowExtIOS {
fn ui_window(&self) -> *mut c_void;
fn ui_view_controller(&self) -> *mut c_void;
fn ui_view(&self) -> *mut c_void;
fn set_hidpi_factor(&self, hidpi_factor: f64);
fn set_valid_orientations(&self, valid_orientations: ValidOrientations);
}
impl WindowExtIOS for Window {
#[inline]
fn ui_window(&self) -> *mut c_void {
self.window.ui_window() as _
}
#[inline]
fn ui_view_controller(&self) -> *mut c_void {
self.window.ui_view_controller() as _
}
#[inline]
fn ui_view(&self) -> *mut c_void {
self.window.ui_view() as _
}
#[inline]
fn set_hidpi_factor(&self, hidpi_factor: f64) {
self.window.set_hidpi_factor(hidpi_factor)
}
#[inline]
fn set_valid_orientations(&self, valid_orientations: ValidOrientations) {
self.window.set_valid_orientations(valid_orientations)
}
}
pub trait WindowBuilderExtIOS {
fn with_root_view_class(self, root_view_class: *const c_void) -> WindowBuilder;
fn with_hidpi_factor(self, hidpi_factor: f64) -> WindowBuilder;
fn with_valid_orientations(self, valid_orientations: ValidOrientations) -> WindowBuilder;
}
impl WindowBuilderExtIOS for WindowBuilder {
#[inline]
fn with_root_view_class(mut self, root_view_class: *const c_void) -> WindowBuilder {
self.platform_specific.root_view_class = unsafe { &*(root_view_class as *const _) };
self
}
#[inline]
fn with_hidpi_factor(mut self, hidpi_factor: f64) -> WindowBuilder {
self.platform_specific.hidpi_factor = Some(hidpi_factor);
self
}
#[inline]
fn with_valid_orientations(mut self, valid_orientations: ValidOrientations) -> WindowBuilder {
self.platform_specific.valid_orientations = valid_orientations;
self
}
}
pub trait MonitorHandleExtIOS {
fn ui_screen(&self) -> *mut c_void;
}
impl MonitorHandleExtIOS for MonitorHandle {
#[inline]
fn ui_screen(&self) -> *mut c_void {
self.inner.ui_screen() as _
}
}
#[derive(Clone, Copy, Debug)]
pub enum ValidOrientations {
LandscapeAndPortrait,
Landscape,
Portrait,
}
impl Default for ValidOrientations {
#[inline]
fn default() -> ValidOrientations {
ValidOrientations::LandscapeAndPortrait
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Idiom {
Unspecified,
Phone,
Pad,
TV,
CarPlay,
}