use dioxus::prelude::*;
use crate::core::{DndContext, JoinedWindow};
#[cfg_attr(not(any(target_os = "linux", target_os = "macos")), allow(dead_code))]
mod fallback;
mod windows;
#[cfg(target_os = "linux")]
mod linux;
#[cfg(target_os = "macos")]
mod macos;
#[cfg(not(any(target_os = "linux", target_os = "macos", target_os = "windows")))]
mod unsupported;
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub(super) enum GlobalCapability {
#[default]
Unknown,
Available,
#[cfg_attr(any(target_os = "windows", target_os = "macos"), allow(dead_code))]
Unavailable,
}
impl GlobalCapability {
pub(super) fn available(self) -> bool {
self == Self::Available
}
}
#[cfg(target_os = "linux")]
pub(super) fn use_global_capability() -> Signal<GlobalCapability> {
linux::use_global_capability()
}
#[cfg(target_os = "macos")]
pub(super) fn use_global_capability() -> Signal<GlobalCapability> {
macos::use_global_capability()
}
#[cfg(not(any(target_os = "linux", target_os = "macos", target_os = "windows")))]
pub(super) fn use_global_capability() -> Signal<GlobalCapability> {
unsupported::use_global_capability()
}
#[cfg(target_os = "windows")]
pub(super) fn use_global_capability() -> Signal<GlobalCapability> {
use_signal(|| GlobalCapability::Available)
}
pub(super) fn use_pointer_legs<T: Clone + PartialEq + 'static>(
joined: JoinedWindow<T>,
ctx: DndContext<T>,
capability: Signal<GlobalCapability>,
) {
windows::use_raw_input_leg(joined, ctx);
let _ = capability;
#[cfg(target_os = "linux")]
linux::use_portable_legs(joined, ctx, capability);
#[cfg(target_os = "macos")]
macos::use_portable_legs(joined, ctx, capability);
}