From 3493a2017356e21260f2644db7a5a50cbf50bf66 Mon Sep 17 00:00:00 2001 From: Kirill Chibisov Date: Thu, 1 May 2025 19:25:15 +0900 Subject: [PATCH] winit-core: new crate + split out as_any --- Cargo.toml | 12 ++++++++-- src/lib.rs | 2 +- winit-core/Cargo.toml | 30 ++++++++++++++++++++++++ winit-core/LICENSE | 1 + winit-core/README.md | 1 + winit-core/build.rs | 26 ++++++++++++++++++++ src/utils.rs => winit-core/src/as_any.rs | 3 ++- winit-core/src/lib.rs | 2 ++ 8 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 winit-core/Cargo.toml create mode 120000 winit-core/LICENSE create mode 120000 winit-core/README.md create mode 100644 winit-core/build.rs rename src/utils.rs => winit-core/src/as_any.rs (98%) create mode 100644 winit-core/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 7385cf7e..d46ee226 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,7 +56,14 @@ android-game-activity = ["android-activity/game-activity"] android-native-activity = ["android-activity/native-activity"] default = ["x11", "wayland", "wayland-dlopen", "wayland-csd-adwaita"] mint = ["dpi/mint"] -serde = ["dep:serde", "cursor-icon/serde", "smol_str/serde", "dpi/serde", "bitflags/serde"] +serde = [ + "dep:serde", + "cursor-icon/serde", + "smol_str/serde", + "dpi/serde", + "bitflags/serde", + "winit-core/serde", +] wayland = [ "wayland-client", "wayland-backend", @@ -83,6 +90,7 @@ rwh_06 = { package = "raw-window-handle", version = "0.6", features = ["std"] } serde = { workspace = true, optional = true } smol_str = "0.3" tracing = { version = "0.1.40", default-features = false } +winit-core = { version = "0.0.0", path = "winit-core" } [dev-dependencies] image = { version = "0.25.0", default-features = false, features = ["png"] } @@ -389,7 +397,7 @@ name = "window" name = "child_window" [workspace] -members = ["dpi"] +members = ["dpi", "winit-core"] resolver = "2" [workspace.package] diff --git a/src/lib.rs b/src/lib.rs index 2a11bd6e..667c4514 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -308,7 +308,7 @@ pub mod icon; pub mod keyboard; pub mod monitor; mod platform_impl; -mod utils; +use winit_core::as_any as utils; pub mod window; pub mod platform; diff --git a/winit-core/Cargo.toml b/winit-core/Cargo.toml new file mode 100644 index 00000000..a42a83f8 --- /dev/null +++ b/winit-core/Cargo.toml @@ -0,0 +1,30 @@ +[package] +authors = ["The winit contributors", "Kirill Chibisov "] +categories = ["gui"] +description = "winit core API." +documentation = "https://docs.rs/winit-core" +edition.workspace = true +keywords = ["windowing"] +license.workspace = true +name = "winit-core" +readme = "README.md" +repository.workspace = true +rust-version.workspace = true +version = "0.0.0" + +[features] +serde = ["dep:serde", "cursor-icon/serde", "smol_str/serde", "dpi/serde", "bitflags/serde"] + +[dependencies] +bitflags = "2" +cursor-icon = "1.1.0" +dpi = { version = "0.1.1", path = "../dpi" } +rwh_06 = { package = "raw-window-handle", version = "0.6", features = ["std"] } +serde = { workspace = true, optional = true } +smol_str = "0.3" + +[target.'cfg(target_family = "wasm")'.dependencies] +web-time = "1" + +[build-dependencies] +cfg_aliases = "0.2.1" diff --git a/winit-core/LICENSE b/winit-core/LICENSE new file mode 120000 index 00000000..ea5b6064 --- /dev/null +++ b/winit-core/LICENSE @@ -0,0 +1 @@ +../LICENSE \ No newline at end of file diff --git a/winit-core/README.md b/winit-core/README.md new file mode 120000 index 00000000..32d46ee8 --- /dev/null +++ b/winit-core/README.md @@ -0,0 +1 @@ +../README.md \ No newline at end of file diff --git a/winit-core/build.rs b/winit-core/build.rs new file mode 100644 index 00000000..1105d584 --- /dev/null +++ b/winit-core/build.rs @@ -0,0 +1,26 @@ +use cfg_aliases::cfg_aliases; + +fn main() { + // The script doesn't depend on our code. + println!("cargo:rerun-if-changed=build.rs"); + + // Setup cfg aliases. + cfg_aliases! { + // Systems. + android_platform: { target_os = "android" }, + web_platform: { all(target_family = "wasm", target_os = "unknown") }, + macos_platform: { target_os = "macos" }, + ios_platform: { all(target_vendor = "apple", not(target_os = "macos")) }, + windows_platform: { target_os = "windows" }, + free_unix: { all(unix, not(target_vendor = "apple"), not(android_platform), not(target_os = "emscripten")) }, + redox: { target_os = "redox" }, + + // Native displays. + x11_platform: { all(feature = "x11", free_unix, not(redox)) }, + wayland_platform: { all(feature = "wayland", free_unix, not(redox)) }, + orbital_platform: { redox }, + } + + // Winit defined cfgs. + println!("cargo:rustc-check-cfg=cfg(unreleased_changelogs)"); +} diff --git a/src/utils.rs b/winit-core/src/as_any.rs similarity index 98% rename from src/utils.rs rename to winit-core/src/as_any.rs index 3ef0b9f3..c22c3621 100644 --- a/src/utils.rs +++ b/winit-core/src/as_any.rs @@ -31,6 +31,7 @@ impl AsAny for T { } } +#[macro_export] macro_rules! impl_dyn_casting { ($trait:ident) => { impl dyn $trait + '_ { @@ -67,4 +68,4 @@ macro_rules! impl_dyn_casting { }; } -pub(crate) use impl_dyn_casting; +pub use impl_dyn_casting; diff --git a/winit-core/src/lib.rs b/winit-core/src/lib.rs new file mode 100644 index 00000000..dbf072b0 --- /dev/null +++ b/winit-core/src/lib.rs @@ -0,0 +1,2 @@ +#[macro_use] +pub mod as_any;