From f58b3fcf859f48ecda7a489b93e5c1eab375810f Mon Sep 17 00:00:00 2001 From: Amir Saeid Date: Sun, 29 Jun 2025 18:45:50 +0100 Subject: Add macOS support --- src/platform/linux.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/platform/linux.rs (limited to 'src/platform/linux.rs') diff --git a/src/platform/linux.rs b/src/platform/linux.rs new file mode 100644 index 0000000..351bcb6 --- /dev/null +++ b/src/platform/linux.rs @@ -0,0 +1,34 @@ +use std::os::raw::{c_ushort, c_void}; +use std::ptr; +use x11::xlib::{XCloseDisplay, XDefaultScreen, XFree, XOpenDisplay, XRootWindow}; +use x11::xrandr::{ + XRRAllocGamma, XRRCrtcGamma, XRRGetCrtcGammaSize, XRRGetScreenResourcesCurrent, XRRSetCrtcGamma, +}; + +pub fn set_temp(temp: u32) { + let ratio: f64 = (temp % 500) as f64 / 500f64; + unsafe { + let display = XOpenDisplay(ptr::null_mut()); + let screen = XDefaultScreen(display); + let root = XRootWindow(display, screen); + let resource = XRRGetScreenResourcesCurrent(display, root); + + for x in 0..(*resource).ncrtc { + let crtcxid = (*resource).crtcs.offset(x as isize); + let size = XRRGetCrtcGammaSize(display, *crtcxid); + let crtc_gamma: *mut XRRCrtcGamma = XRRAllocGamma(size); + let gamma = avg(temp, ratio); + + for i in 0..size { + let g = (65535f64 * i as f64) / size as f64; + *((*crtc_gamma).red as *mut c_ushort).offset(i as isize) = (g * gamma.red) as u16; + *((*crtc_gamma).green as *mut c_ushort).offset(i as isize) = + (g * gamma.green) as u16; + *((*crtc_gamma).blue as *mut c_ushort).offset(i as isize) = (g * gamma.blue) as u16; + } + XRRSetCrtcGamma(display, *crtcxid, crtc_gamma); + XFree(crtc_gamma as *mut c_void); + } + XCloseDisplay(display); + } +} -- cgit v1.2.3 From 7a9375a3b2cccbbc0fd9373c1cd1101082b68499 Mon Sep 17 00:00:00 2001 From: Amir Saeid Date: Sun, 29 Jun 2025 20:36:08 +0100 Subject: Fix a compilation issue in Linux module --- src/platform/linux.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/platform/linux.rs') diff --git a/src/platform/linux.rs b/src/platform/linux.rs index 351bcb6..ec0fc6a 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -17,7 +17,7 @@ pub fn set_temp(temp: u32) { let crtcxid = (*resource).crtcs.offset(x as isize); let size = XRRGetCrtcGammaSize(display, *crtcxid); let crtc_gamma: *mut XRRCrtcGamma = XRRAllocGamma(size); - let gamma = avg(temp, ratio); + let gamma = crate::avg(temp, ratio); for i in 0..size { let g = (65535f64 * i as f64) / size as f64; -- cgit v1.2.3