- Eliminated duplicate platform stubs: Created shared macro for macOS/Linux implementations - Extracted cursor restoration logic: Shared helper function for Windows API calls - Refactored cursor application: Helper function for copy/apply/error handling pattern - Reduced ~70 lines of duplicate code while maintaining all functionality
82 lines
2.2 KiB
Rust
82 lines
2.2 KiB
Rust
// Platform-specific cursor handling
|
|
|
|
// Common types for cursor handling
|
|
pub mod types;
|
|
|
|
// Shared stub implementations for unimplemented platforms
|
|
mod stub_impl;
|
|
|
|
// Windows implementation
|
|
#[cfg(target_os = "windows")]
|
|
mod windows;
|
|
|
|
// macOS implementation
|
|
#[cfg(target_os = "macos")]
|
|
mod macos;
|
|
|
|
// Linux implementation
|
|
#[cfg(target_os = "linux")]
|
|
mod linux;
|
|
|
|
use anyhow::Result;
|
|
|
|
use image::RgbaImage;
|
|
|
|
// Platform-agnostic interface for cursor handling
|
|
#[cfg(target_os = "windows")]
|
|
pub use self::windows::{set_cursor, restore_default_cursor, restore_default_cursor_temporarily, init};
|
|
|
|
#[cfg(target_os = "macos")]
|
|
pub use self::macos::{set_cursor, restore_default_cursor, init};
|
|
|
|
#[cfg(target_os = "linux")]
|
|
pub use self::linux::{set_cursor, restore_default_cursor, init};
|
|
|
|
// Initialize platform-specific cursor handling
|
|
pub fn initialize() -> Result<()> {
|
|
#[cfg(target_os = "windows")]
|
|
{
|
|
init()
|
|
}
|
|
#[cfg(not(target_os = "windows"))]
|
|
{
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
// Cross-platform implementation for setting cursor
|
|
pub fn set_system_cursor(image: &RgbaImage) -> Result<()> {
|
|
set_cursor(image)
|
|
}
|
|
|
|
// Cross-platform implementation for restoring default cursor
|
|
pub fn restore_system_cursor() -> Result<()> {
|
|
println!("Restoring system cursor");
|
|
restore_default_cursor()
|
|
}
|
|
|
|
// Cross-platform implementation for temporarily restoring default cursor
|
|
pub fn restore_system_cursor_temporarily() -> Result<()> {
|
|
println!("Temporarily restoring system cursor");
|
|
#[cfg(target_os = "windows")]
|
|
{
|
|
restore_default_cursor_temporarily()
|
|
}
|
|
#[cfg(not(target_os = "windows"))]
|
|
{
|
|
// For non-Windows platforms, just use the regular restore for now
|
|
restore_default_cursor()
|
|
}
|
|
}
|
|
|
|
// Default implementations for non-supported platforms
|
|
#[cfg(not(any(target_os = "windows", target_os = "macos", target_os = "linux")))]
|
|
pub fn set_cursor(_path: &str) -> Result<()> {
|
|
Err("Cursor customization not supported on this platform".to_string())
|
|
}
|
|
|
|
#[cfg(not(any(target_os = "windows", target_os = "macos", target_os = "linux")))]
|
|
pub fn restore_default_cursor() -> Result<()> {
|
|
Err("Cursor restoration not supported on this platform".to_string())
|
|
}
|