mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-24 06:11:30 +11:00
Make MonitorId::get_position() return (i32, i32) instead of (u32, u32) because it can be negative on Windows (#324)
This commit is contained in:
parent
229029f2da
commit
4e4db1749d
|
@ -6,6 +6,7 @@
|
||||||
`get_inner_size`.
|
`get_inner_size`.
|
||||||
- **Breaking:** `EventsLoop` is `!Send` and `!Sync` because of platform-dependant constraints,
|
- **Breaking:** `EventsLoop` is `!Send` and `!Sync` because of platform-dependant constraints,
|
||||||
but `Window`, `WindowId`, `DeviceId` and `MonitorId` guaranteed to be `Send`.
|
but `Window`, `WindowId`, `DeviceId` and `MonitorId` guaranteed to be `Send`.
|
||||||
|
- `MonitorId::get_position` now returns `(i32, i32)` instead of `(u32, u32)`.
|
||||||
|
|
||||||
# Version 0.8.3 (2017-10-11)
|
# Version 0.8.3 (2017-10-11)
|
||||||
|
|
||||||
|
|
|
@ -160,7 +160,7 @@ impl MonitorId {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn get_position(&self) -> (u32, u32) {
|
pub fn get_position(&self) -> (i32, i32) {
|
||||||
// Android assumes single screen
|
// Android assumes single screen
|
||||||
(0, 0)
|
(0, 0)
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ impl MonitorId {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn get_position(&self) -> (u32, u32) {
|
pub fn get_position(&self) -> (i32, i32) {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -141,7 +141,7 @@ impl MonitorId {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn get_position(&self) -> (u32, u32) {
|
pub fn get_position(&self) -> (i32, i32) {
|
||||||
// iOS assumes single screen
|
// iOS assumes single screen
|
||||||
(0, 0)
|
(0, 0)
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,7 +88,7 @@ impl MonitorId {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn get_position(&self) -> (u32, u32) {
|
pub fn get_position(&self) -> (i32, i32) {
|
||||||
match self {
|
match self {
|
||||||
&MonitorId::X(ref m) => m.get_position(),
|
&MonitorId::X(ref m) => m.get_position(),
|
||||||
&MonitorId::Wayland(ref m) => m.get_position(),
|
&MonitorId::Wayland(ref m) => m.get_position(),
|
||||||
|
@ -97,7 +97,10 @@ impl MonitorId {
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn get_hidpi_factor(&self) -> f32 {
|
pub fn get_hidpi_factor(&self) -> f32 {
|
||||||
1.0
|
match self {
|
||||||
|
&MonitorId::X(ref m) => m.get_hidpi_factor(),
|
||||||
|
&MonitorId::Wayland(ref m) => m.get_hidpi_factor(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ struct OutputInfo {
|
||||||
id: u32,
|
id: u32,
|
||||||
scale: f32,
|
scale: f32,
|
||||||
pix_size: (u32, u32),
|
pix_size: (u32, u32),
|
||||||
pix_pos: (u32, u32),
|
pix_pos: (i32, i32),
|
||||||
name: String
|
name: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,7 +162,7 @@ impl wl_output::Handler for WaylandEnv {
|
||||||
{
|
{
|
||||||
for m in self.monitors.iter_mut().filter(|m| m.output.equals(proxy)) {
|
for m in self.monitors.iter_mut().filter(|m| m.output.equals(proxy)) {
|
||||||
m.name = format!("{} ({})", model, make);
|
m.name = format!("{} ({})", model, make);
|
||||||
m.pix_pos = (x as u32, y as u32);
|
m.pix_pos = (x, y);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -397,7 +397,7 @@ impl MonitorId {
|
||||||
(0,0)
|
(0,0)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_position(&self) -> (u32, u32) {
|
pub fn get_position(&self) -> (i32, i32) {
|
||||||
let mut guard = self.ctxt.evq.lock().unwrap();
|
let mut guard = self.ctxt.evq.lock().unwrap();
|
||||||
let state = guard.state();
|
let state = guard.state();
|
||||||
let env = state.get_handler::<WaylandEnv>(self.ctxt.env_id);
|
let env = state.get_handler::<WaylandEnv>(self.ctxt.env_id);
|
||||||
|
|
|
@ -204,6 +204,8 @@ impl Window {
|
||||||
let mut find = default;
|
let mut find = default;
|
||||||
for monitor in monitors {
|
for monitor in monitors {
|
||||||
let (mx, my) = monitor.get_position();
|
let (mx, my) = monitor.get_position();
|
||||||
|
let mx = mx as u32;
|
||||||
|
let my = my as u32;
|
||||||
let (mw, mh) = monitor.get_dimensions();
|
let (mw, mh) = monitor.get_dimensions();
|
||||||
let (mxo, myo) = (mx+mw-1, my+mh-1);
|
let (mxo, myo) = (mx+mw-1, my+mh-1);
|
||||||
let (ox, oy) = (cmp::max(wx, mx), cmp::max(wy, my));
|
let (ox, oy) = (cmp::max(wx, mx), cmp::max(wy, my));
|
||||||
|
|
|
@ -12,7 +12,7 @@ pub struct MonitorId {
|
||||||
/// The size of the monitor
|
/// The size of the monitor
|
||||||
dimensions: (u32, u32),
|
dimensions: (u32, u32),
|
||||||
/// The position of the monitor in the X screen
|
/// The position of the monitor in the X screen
|
||||||
position: (u32, u32),
|
position: (i32, i32),
|
||||||
/// If the monitor is the primary one
|
/// If the monitor is the primary one
|
||||||
primary: bool,
|
primary: bool,
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ pub fn get_available_monitors(x: &Arc<XConnection>) -> Vec<MonitorId> {
|
||||||
id: i as u32,
|
id: i as u32,
|
||||||
name,
|
name,
|
||||||
dimensions: (monitor.width as u32, monitor.height as u32),
|
dimensions: (monitor.width as u32, monitor.height as u32),
|
||||||
position: (monitor.x as u32, monitor.y as u32),
|
position: (monitor.x as i32, monitor.y as i32),
|
||||||
primary: (monitor.primary != 0),
|
primary: (monitor.primary != 0),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ pub fn get_available_monitors(x: &Arc<XConnection>) -> Vec<MonitorId> {
|
||||||
id: crtcid as u32,
|
id: crtcid as u32,
|
||||||
name,
|
name,
|
||||||
dimensions: ((*crtc).width as u32, (*crtc).height as u32),
|
dimensions: ((*crtc).width as u32, (*crtc).height as u32),
|
||||||
position: ((*crtc).x as u32, (*crtc).y as u32),
|
position: ((*crtc).x as i32, (*crtc).y as i32),
|
||||||
primary: true,
|
primary: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ impl MonitorId {
|
||||||
self.dimensions
|
self.dimensions
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_position(&self) -> (u32, u32) {
|
pub fn get_position(&self) -> (i32, i32) {
|
||||||
self.position
|
self.position
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -332,6 +332,8 @@ impl Window2 {
|
||||||
let mut find = default;
|
let mut find = default;
|
||||||
for monitor in monitors {
|
for monitor in monitors {
|
||||||
let (mx, my) = monitor.get_position();
|
let (mx, my) = monitor.get_position();
|
||||||
|
let mx = mx as u32;
|
||||||
|
let my = my as u32;
|
||||||
let (mw, mh) = monitor.get_dimensions();
|
let (mw, mh) = monitor.get_dimensions();
|
||||||
let (mxo, myo) = (mx+mw-1, my+mh-1);
|
let (mxo, myo) = (mx+mw-1, my+mh-1);
|
||||||
let (ox, oy) = (cmp::max(wx, mx), cmp::max(wy, my));
|
let (ox, oy) = (cmp::max(wx, mx), cmp::max(wy, my));
|
||||||
|
|
|
@ -50,7 +50,7 @@ impl MonitorId {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn get_position(&self) -> (u32, u32) {
|
pub fn get_position(&self) -> (i32, i32) {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,8 @@ pub struct MonitorId {
|
||||||
|
|
||||||
/// The position of the monitor in pixels on the desktop.
|
/// The position of the monitor in pixels on the desktop.
|
||||||
///
|
///
|
||||||
/// A window that is positionned at these coordinates will overlap the monitor.
|
/// A window that is positioned at these coordinates will overlap the monitor.
|
||||||
position: (u32, u32),
|
position: (i32, i32),
|
||||||
|
|
||||||
/// The current resolution in pixels on the monitor.
|
/// The current resolution in pixels on the monitor.
|
||||||
dimensions: (u32, u32),
|
dimensions: (u32, u32),
|
||||||
|
@ -111,7 +111,7 @@ impl EventsLoop {
|
||||||
}
|
}
|
||||||
|
|
||||||
let point: &winapi::POINTL = mem::transmute(&dev.union1);
|
let point: &winapi::POINTL = mem::transmute(&dev.union1);
|
||||||
let position = (point.x as u32, point.y as u32);
|
let position = (point.x as i32, point.y as i32);
|
||||||
|
|
||||||
let dimensions = (dev.dmPelsWidth as u32, dev.dmPelsHeight as u32);
|
let dimensions = (dev.dmPelsWidth as u32, dev.dmPelsHeight as u32);
|
||||||
|
|
||||||
|
@ -176,9 +176,9 @@ impl MonitorId {
|
||||||
&self.adapter_name
|
&self.adapter_name
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A window that is positionned at these coordinates will overlap the monitor.
|
/// A window that is positioned at these coordinates will overlap the monitor.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn get_position(&self) -> (u32, u32) {
|
pub fn get_position(&self) -> (i32, i32) {
|
||||||
self.position
|
self.position
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -370,7 +370,7 @@ impl MonitorId {
|
||||||
/// Returns the top-left corner position of the monitor relative to the larger full
|
/// Returns the top-left corner position of the monitor relative to the larger full
|
||||||
/// screen area.
|
/// screen area.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn get_position(&self) -> (u32, u32) {
|
pub fn get_position(&self) -> (i32, i32) {
|
||||||
self.inner.get_position()
|
self.inner.get_position()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue