From b0d9d0b87f8884639001d69f3a79d4bb41f019f4 Mon Sep 17 00:00:00 2001 From: Tomaka17 Date: Sat, 2 Aug 2014 11:23:32 +0200 Subject: Dimensions will now match the monitor's in case of fullscreen --- src/lib.rs | 21 +++++++++++++++++---- src/win32/init.rs | 4 ++-- src/x11/mod.rs | 2 +- 3 files changed, 20 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index 7a4c644..7fbb0ff 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,7 +26,7 @@ pub struct MonitorID(winimpl::MonitorID); /// Object that allows you to build windows. pub struct WindowBuilder { - dimensions: (uint, uint), + dimensions: Option<(uint, uint)>, title: String, monitor: Option, gl_version: Option<(uint, uint)>, @@ -36,7 +36,7 @@ impl WindowBuilder { /// Initializes a new `WindowBuilder` with default values. pub fn new() -> WindowBuilder { WindowBuilder { - dimensions: (1024, 768), + dimensions: None, title: String::new(), monitor: None, gl_version: None, @@ -47,7 +47,7 @@ impl WindowBuilder { /// /// Width and height are in pixels. pub fn with_dimensions(mut self, width: uint, height: uint) -> WindowBuilder { - self.dimensions = (width, height); + self.dimensions = Some((width, height)); self } @@ -58,6 +58,8 @@ impl WindowBuilder { } /// Requests fullscreen mode. + /// + /// If you don't specify dimensions for the window, it will match the monitor's. pub fn with_fullscreen(mut self, monitor: MonitorID) -> WindowBuilder { let MonitorID(monitor) = monitor; self.monitor = Some(monitor); @@ -77,7 +79,18 @@ impl WindowBuilder { /// /// Error should be very rare and only occur in case of permission denied, incompatible system, /// out of memory, etc. - pub fn build(self) -> Result { + pub fn build(mut self) -> Result { + // resizing the window to the dimensions of the monitor when fullscreen + if self.dimensions.is_none() && self.monitor.is_some() { + self.dimensions = Some(self.monitor.as_ref().unwrap().get_dimensions()) + } + + // default dimensions + if self.dimensions.is_none() { + self.dimensions = Some((1024, 768)); + } + + // building winimpl::Window::new(self).map(|w| Window { window: w }) } } diff --git a/src/win32/init.rs b/src/win32/init.rs index 09df5b0..efa27fd 100644 --- a/src/win32/init.rs +++ b/src/win32/init.rs @@ -59,8 +59,8 @@ pub fn new_window(builder: WindowBuilder) -> Result { // building a RECT object with coordinates let mut rect = ffi::RECT { - left: 0, right: builder.dimensions.val0() as ffi::LONG, - top: 0, bottom: builder.dimensions.val1() as ffi::LONG, + left: 0, right: builder.dimensions.unwrap_or((1024, 768)).val0() as ffi::LONG, + top: 0, bottom: builder.dimensions.unwrap_or((1024, 768)).val1() as ffi::LONG, }; // switching to fullscreen if necessary diff --git a/src/x11/mod.rs b/src/x11/mod.rs index f157237..580a897 100644 --- a/src/x11/mod.rs +++ b/src/x11/mod.rs @@ -39,7 +39,7 @@ impl MonitorID { impl Window { pub fn new(builder: WindowBuilder) -> Result { // TODO: temporary - let dimensions = Some(builder.dimensions); + let dimensions = builder.dimensions; let title = builder.title.as_slice(); // calling XOpenDisplay -- cgit v1.2.3