Skip to content

Commit

Permalink
fix: win11 drag lag
Browse files Browse the repository at this point in the history
  • Loading branch information
zzzgydi authored May 9, 2022
1 parent df0b5a8 commit 6596fb0
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 1 deletion.
1 change: 1 addition & 0 deletions src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ port_scanner = "0.1.5"
[target.'cfg(windows)'.dependencies]
runas = "0.2.1"
deelevate = "0.2.0"
windows-sys = "0.36"
winreg = { version = "0.10", features = ["transactions"] }

[features]
Expand Down
1 change: 1 addition & 0 deletions src-tauri/src/utils/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ pub mod resolve;
pub mod server;
pub mod sysopt;
pub mod tmpl;
mod winhelp;
8 changes: 7 additions & 1 deletion src-tauri/src/utils/resolve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,18 @@ fn resolve_window(app: &App) {

#[cfg(target_os = "windows")]
{
use crate::utils::winhelp;
use window_shadows::set_shadow;
use window_vibrancy::apply_blur;

let _ = window.set_decorations(false);
let _ = set_shadow(&window, true);
let _ = apply_blur(&window, None);

// todo
// win11 disable this feature temporarily due to lag
if !winhelp::is_win11() {
let _ = apply_blur(&window, None);
}
}

#[cfg(target_os = "macos")]
Expand Down
69 changes: 69 additions & 0 deletions src-tauri/src/utils/winhelp.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#![cfg(target_os = "windows")]
#![allow(non_snake_case)]
#![allow(non_camel_case_types)]

//!
//! From https://github.com/tauri-apps/window-vibrancy/blob/dev/src/windows.rs
//!
use windows_sys::Win32::{
Foundation::*,
System::{LibraryLoader::*, SystemInformation::*},
};

fn get_function_impl(library: &str, function: &str) -> Option<FARPROC> {
assert_eq!(library.chars().last(), Some('\0'));
assert_eq!(function.chars().last(), Some('\0'));

let module = unsafe { LoadLibraryA(library.as_ptr()) };
if module == 0 {
return None;
}
Some(unsafe { GetProcAddress(module, function.as_ptr()) })
}

macro_rules! get_function {
($lib:expr, $func:ident) => {
get_function_impl(concat!($lib, '\0'), concat!(stringify!($func), '\0')).map(|f| unsafe {
std::mem::transmute::<::windows_sys::Win32::Foundation::FARPROC, $func>(f)
})
};
}

/// Returns a tuple of (major, minor, buildnumber)
fn get_windows_ver() -> Option<(u32, u32, u32)> {
type RtlGetVersion = unsafe extern "system" fn(*mut OSVERSIONINFOW) -> i32;
let handle = get_function!("ntdll.dll", RtlGetVersion);
if let Some(rtl_get_version) = handle {
unsafe {
let mut vi = OSVERSIONINFOW {
dwOSVersionInfoSize: 0,
dwMajorVersion: 0,
dwMinorVersion: 0,
dwBuildNumber: 0,
dwPlatformId: 0,
szCSDVersion: [0; 128],
};

let status = (rtl_get_version)(&mut vi as _);

if status >= 0 {
Some((vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber))
} else {
None
}
}
} else {
None
}
}

pub fn is_win11() -> bool {
let v = get_windows_ver().unwrap_or_default();
v.2 >= 22000
}

#[test]
fn test_version() {
dbg!(get_windows_ver().unwrap_or_default());
}

0 comments on commit 6596fb0

Please sign in to comment.