1
0
Fork 0

Replace dpi with scale

This commit is contained in:
Billy Messenger 2020-09-05 14:55:45 -05:00
parent 15b0c2e857
commit f3ba681877
2 changed files with 23 additions and 19 deletions

View file

@ -14,17 +14,10 @@ pub struct MouseScroll {
pub y_delta: f64, pub y_delta: f64,
} }
#[derive(Debug, Copy, Clone)]
pub enum MouseClickType {
Single,
Double,
Triple,
}
#[derive(Debug, Copy, Clone)] #[derive(Debug, Copy, Clone)]
pub struct MouseClick { pub struct MouseClick {
pub id: MouseButtonID, pub id: MouseButtonID,
pub click_type: MouseClickType, pub click_count: usize,
pub x: i32, pub x: i32,
pub y: i32, pub y: i32,
} }
@ -33,7 +26,7 @@ pub struct MouseClick {
pub struct WindowInfo { pub struct WindowInfo {
pub width: u32, pub width: u32,
pub height: u32, pub height: u32,
pub dpi: Option<f64>, pub scale: f64,
} }
#[derive(Debug)] #[derive(Debug)]

View file

@ -11,7 +11,7 @@ use crate::{AppWindow, Event, MouseButtonID, MouseScroll, Parent, WindowInfo, Wi
use raw_window_handle::RawWindowHandle; use raw_window_handle::RawWindowHandle;
pub struct Window<A: AppWindow> { pub struct Window<A: AppWindow> {
scaling: Option<f64>, // DPI scale, 96.0 is "default". scaling: f64,
xcb_connection: XcbConnection, xcb_connection: XcbConnection,
app_window: A, app_window: A,
app_message_rx: mpsc::Receiver<A::AppMessage>, app_message_rx: mpsc::Receiver<A::AppMessage>,
@ -131,21 +131,29 @@ impl<A: AppWindow> Window<A> {
..raw_window_handle::unix::XcbHandle::empty() ..raw_window_handle::unix::XcbHandle::empty()
}); });
let scaling = {
let maybe_scaling =
get_scaling_xft(&xcb_connection).or(get_scaling_screen_dimensions(&xcb_connection));
if let Some(scaling) = maybe_scaling {
scaling
} else {
1.0
}
};
println!("Scale factor: {:?}", scaling);
let mut x11_window = Self { let mut x11_window = Self {
scaling: None, scaling,
xcb_connection, xcb_connection,
app_window, app_window,
app_message_rx, app_message_rx,
}; };
x11_window.scaling = get_scaling_xft(&x11_window.xcb_connection)
.or(get_scaling_screen_dimensions(&x11_window.xcb_connection));
println!("Scale factor: {:?}", x11_window.scaling);
let window_info = WindowInfo { let window_info = WindowInfo {
width: options.width as u32, width: options.width as u32,
height: options.height as u32, height: options.height as u32,
dpi: x11_window.scaling, scale: x11_window.scaling,
}; };
x11_window x11_window
@ -291,8 +299,9 @@ fn get_scaling_xft(xcb_connection: &XcbConnection) -> Option<f64> {
let value_addr: &CStr = CStr::from_ptr(value.addr); let value_addr: &CStr = CStr::from_ptr(value.addr);
value_addr.to_str().ok(); value_addr.to_str().ok();
let value_str = value_addr.to_str().ok()?; let value_str = value_addr.to_str().ok()?;
let value_f64 = value_str.parse().ok()?; let value_f64: f64 = value_str.parse().ok()?;
Some(value_f64) let dpi_to_scale = value_f64 / 96.0;
Some(dpi_to_scale)
} else { } else {
None None
}; };
@ -329,8 +338,10 @@ fn get_scaling_screen_dimensions(xcb_connection: &XcbConnection) -> Option<f64>
let _xres = width_px * 25.4 / width_mm; let _xres = width_px * 25.4 / width_mm;
let yres = height_px * 25.4 / height_mm; let yres = height_px * 25.4 / height_mm;
let yscale = yres / 96.0;
// TODO: choose between `xres` and `yres`? (probably both are the same?) // TODO: choose between `xres` and `yres`? (probably both are the same?)
Some(yres) Some(yscale)
} }
fn mouse_id(id: u8) -> MouseButtonID { fn mouse_id(id: u8) -> MouseButtonID {