use super::{super::super::Buffer, *};
use crate::{extensions::*, platform::windowing::WindowError};
#[cfg(feature = "keycodes")]
pub const trait WindowingFramework:
Window
+ MouseInput
+ KeyboardInput
+ Output
+ Timing
+ WindowHelper
+ core::fmt::Debug
{
}
#[cfg(feature = "keycodes")]
impl<
T: Window
+ MouseInput
+ KeyboardInput
+ Output
+ Timing
+ WindowHelper
+ core::fmt::Debug,
> WindowingFramework for T
{
}
#[cfg(not(feature = "keycodes"))]
pub const trait WindowingFramework:
Window + MouseInput + Output + Timing + WindowHelper + core::fmt::Debug
{
}
#[cfg(not(feature = "keycodes"))]
impl<
T: Window + MouseInput + Output + Timing + WindowHelper + core::fmt::Debug,
> WindowingFramework for T
{
}
#[cfg(all(feature = "svg", feature = "system", feature = "keycodes"))]
pub const trait ExtendedWindowingFramework:
WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ LoadCursorStyle
+ UseCursorStyle
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
+ KeyboardInput
+ ExtendedKeyboardInput
+ GetWindowHandle
{
}
#[cfg(all(feature = "svg", feature = "system", feature = "keycodes"))]
impl<T> ExtendedWindowingFramework for T where
T: WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ LoadCursorStyle
+ UseCursorStyle
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
+ KeyboardInput
+ ExtendedKeyboardInput
+ GetWindowHandle
{
}
#[cfg(all(feature = "svg", feature = "system", not(feature = "keycodes")))]
pub const trait ExtendedWindowingFramework:
WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ LoadCursorStyle
+ UseCursorStyle
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
+ GetWindowHandle
{
}
#[cfg(all(feature = "svg", feature = "system", not(feature = "keycodes")))]
impl<T> ExtendedWindowingFramework for T where
T: WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ LoadCursorStyle
+ UseCursorStyle
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
+ GetWindowHandle
{
}
#[cfg(all(feature = "svg", not(feature = "system"), feature = "keycodes"))]
pub const trait ExtendedWindowingFramework:
WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
+ KeyboardInput
+ ExtendedKeyboardInput
{
}
#[cfg(all(feature = "svg", not(feature = "system"), feature = "keycodes"))]
impl<T> ExtendedWindowingFramework for T where
T: WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
+ KeyboardInput
+ ExtendedKeyboardInput
{
}
#[cfg(all(not(feature = "svg"), feature = "system", feature = "keycodes"))]
pub const trait ExtendedWindowingFramework:
WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
+ KeyboardInput
+ ExtendedKeyboardInput
+ GetWindowHandle
{
}
#[cfg(all(not(feature = "svg"), feature = "system", feature = "keycodes"))]
impl<T> ExtendedWindowingFramework for T where
T: WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
+ KeyboardInput
+ ExtendedKeyboardInput
+ GetWindowHandle
{
}
#[cfg(all(
feature = "svg",
not(feature = "system"),
not(feature = "keycodes")
))]
pub const trait ExtendedWindowingFramework:
WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
{
}
#[cfg(all(
feature = "svg",
not(feature = "system"),
not(feature = "keycodes")
))]
impl<T> ExtendedWindowingFramework for T where
T: WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
{
}
#[cfg(all(
not(feature = "svg"),
feature = "system",
not(feature = "keycodes")
))]
pub const trait ExtendedWindowingFramework:
WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
+ GetWindowHandle
{
}
#[cfg(all(
not(feature = "svg"),
feature = "system",
not(feature = "keycodes")
))]
impl<T> ExtendedWindowingFramework for T where
T: WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
+ GetWindowHandle
{
}
#[cfg(all(
not(feature = "svg"),
not(feature = "system"),
feature = "keycodes"
))]
pub const trait ExtendedWindowingFramework:
WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
+ KeyboardInput
+ ExtendedKeyboardInput
{
}
#[cfg(all(
not(feature = "svg"),
not(feature = "system"),
feature = "keycodes"
))]
impl<T> ExtendedWindowingFramework for T where
T: WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
+ KeyboardInput
+ ExtendedKeyboardInput
{
}
#[cfg(all(
not(feature = "svg"),
not(feature = "system"),
not(feature = "keycodes")
))]
pub const trait ExtendedWindowingFramework:
WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
{
}
#[cfg(all(
not(feature = "svg"),
not(feature = "system"),
not(feature = "keycodes")
))]
impl<T> ExtendedWindowingFramework for T where
T: WindowingFramework
+ ExtendedWindow
+ Control
+ Visibility
+ IconControl
+ RenderLayer
+ MouseInput
+ ExtendedMouseInput
{
}
pub const trait WindowHelper {
fn update(&mut self, buffer: &Buffer) -> Result<(), WindowError>;
}
impl<T: Window> WindowHelper for T {
fn update(&mut self, buffer: &Buffer) -> Result<(), WindowError> {
self.update_raw(buffer, buffer.width, buffer.height)
}
}
#[cfg(feature = "std")]
pub const trait WindowInputHelper {
fn get_mouse_snapshot(&self) -> crate::platform::mouse::MouseSnapShot;
}
#[cfg(feature = "std")]
impl<T: MouseInput + ExtendedMouseInput> WindowInputHelper for T {
fn get_mouse_snapshot(&self) -> crate::platform::mouse::MouseSnapShot {
crate::platform::mouse::MouseSnapShot {
position: self.get_mouse_position(),
scroll: self.get_mouse_scroll(),
left_down: self.is_mouse_down(crate::platform::MouseButton::Left),
middle_down: self
.is_mouse_down(crate::platform::MouseButton::Middle),
right_down: self.is_mouse_down(crate::platform::MouseButton::Right),
}
}
}
pub const trait DeprecatedCompatibilityHelper {
#[deprecated]
fn update_with_buffer(
&mut self,
buffer: &Buffer,
) -> Result<(), WindowError>;
}
impl<T: Window + Control> DeprecatedCompatibilityHelper for T {
fn update_with_buffer(
&mut self,
buffer: &Buffer,
) -> Result<(), WindowError> {
self.update(buffer)
}
}
pub const trait RelativeMousePos {
fn get_mouse_position_relative(&self) -> Option<(f32, f32)>;
}
impl<T: MouseInput + Control> RelativeMousePos for T {
fn get_mouse_position_relative(&self) -> Option<(f32, f32)> {
let mouse_pos = self.get_mouse_position()?;
let window_pos = self.get_position().try_tuple_into()?;
Some(mouse_pos.sub(window_pos))
}
}