feat: add system tray positioning method

pull/291/head
Xinyu Yang 2 years ago
parent bf1106a0a5
commit d0e48c24d4

@ -24,14 +24,20 @@ pub enum Position {
#[cfg(feature = "system-tray")] #[cfg(feature = "system-tray")]
TrayLeft, TrayLeft,
#[cfg(feature = "system-tray")] #[cfg(feature = "system-tray")]
TrayFixedLeft,
#[cfg(feature = "system-tray")]
TrayBottomLeft, TrayBottomLeft,
#[cfg(feature = "system-tray")] #[cfg(feature = "system-tray")]
TrayRight, TrayRight,
#[cfg(feature = "system-tray")] #[cfg(feature = "system-tray")]
TrayFixedRight,
#[cfg(feature = "system-tray")]
TrayBottomRight, TrayBottomRight,
#[cfg(feature = "system-tray")] #[cfg(feature = "system-tray")]
TrayCenter, TrayCenter,
#[cfg(feature = "system-tray")] #[cfg(feature = "system-tray")]
TrayFixedCenter,
#[cfg(feature = "system-tray")]
TrayBottomCenter, TrayBottomCenter,
} }
@ -113,7 +119,23 @@ impl<R: Runtime> WindowExt for Window<R> {
y: tray_y - window_size.height, y: tray_y - window_size.height,
} }
} else { } else {
panic!("tray position not set"); panic!("Tray position not set");
}
}
#[cfg(feature = "system-tray")]
TrayFixedLeft => {
if let(Some((tray_x, tray_y)), Some((_, tray_height))) = (tray_position, tray_size) {
let y = tray_y - window_size.height;
// Choose y value based on the target OS
#[cfg(target_os = "windows")]
let y = if y < 0 { tray_y + tray_height } else { y };
#[cfg(target_os = "macos")]
let y = if y < 0 { tray_y } else { y };
PhysicalPosition { x: tray_x, y }
} else {
panic!("Tray position not set");
} }
} }
#[cfg(feature = "system-tray")] #[cfg(feature = "system-tray")]
@ -140,6 +162,22 @@ impl<R: Runtime> WindowExt for Window<R> {
} }
} }
#[cfg(feature = "system-tray")] #[cfg(feature = "system-tray")]
TrayFixedRight => {
if let(Some((tray_x, tray_y)), Some((tray_width, tray_height))) = (tray_position, tray_size) {
let y = tray_y - window_size.height;
// Choose y value based on the target OS
#[cfg(target_os = "windows")]
let y = if y < 0 { tray_y + tray_height } else { y };
#[cfg(target_os = "macos")]
let y = if y < 0 { tray_y } else { y };
PhysicalPosition { x: tray_x + tray_width, y }
} else {
panic!("Tray position not set");
}
}
#[cfg(feature = "system-tray")]
TrayBottomRight => { TrayBottomRight => {
if let (Some((tray_x, tray_y)), Some((tray_width, _))) = (tray_position, tray_size) if let (Some((tray_x, tray_y)), Some((tray_width, _))) = (tray_position, tray_size)
{ {
@ -164,6 +202,24 @@ impl<R: Runtime> WindowExt for Window<R> {
} }
} }
#[cfg(feature = "system-tray")] #[cfg(feature = "system-tray")]
TrayFixedCenter => {
if let (Some((tray_x, tray_y)), Some((tray_width, tray_height))) = (tray_position, tray_size)
{
let x = tray_x + tray_width / 2 - window_size.width / 2;
let y = tray_y - window_size.height;
// Choose y value based on the target OS
#[cfg(target_os = "windows")]
let y = if y < 0 { tray_y + tray_height } else { y };
#[cfg(target_os = "macos")]
let y = if y < 0 { tray_y } else { y };
PhysicalPosition { x, y }
} else {
panic!("Tray position not set");
}
}
#[cfg(feature = "system-tray")]
TrayBottomCenter => { TrayBottomCenter => {
if let (Some((tray_x, tray_y)), Some((tray_width, _))) = (tray_position, tray_size) if let (Some((tray_x, tray_y)), Some((tray_width, _))) = (tray_position, tray_size)
{ {

Loading…
Cancel
Save