fast image operations
Diffstat (limited to 'src/term/size/windows.rs')
-rw-r--r--src/term/size/windows.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/term/size/windows.rs b/src/term/size/windows.rs
new file mode 100644
index 0000000..b7499cc
--- /dev/null
+++ b/src/term/size/windows.rs
@@ -0,0 +1,25 @@
+use std::mem::MaybeUninit as MU;
+use windows::Win32::System::Console::{
+ GetConsoleScreenBufferInfo, GetStdHandle, CONSOLE_SCREEN_BUFFER_INFO as winsize,
+ SMALL_RECT as rect, STD_OUTPUT_HANDLE,
+};
+
+pub fn size() -> Option<(u16, u16)> {
+ // SAFETY: SYS
+ unsafe {
+ let mut info = MU::uninit();
+ GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE).ok()?, info.as_mut_ptr())
+ .ok()?;
+ let winsize {
+ srWindow:
+ rect {
+ Top,
+ Left,
+ Right,
+ Bottom,
+ },
+ ..
+ } = info.assume_init();
+ Some(((Bottom - Top - 1) as u16, (Right - Left - 1) as u16))
+ }
+}