Replace dpi with scale
This commit is contained in:
parent
15b0c2e857
commit
f3ba681877
2 changed files with 23 additions and 19 deletions
11
src/event.rs
11
src/event.rs
|
@ -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)]
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Add table
Reference in a new issue