Allow Application configuration with Settings

This commit is contained in:
Héctor Ramón Jiménez 2019-11-25 14:17:13 +01:00
parent e72b5ceeb8
commit d70021fa68
9 changed files with 98 additions and 19 deletions

View file

@ -3,7 +3,7 @@ use crate::{
input::{keyboard, mouse},
renderer::{Target, Windowed},
Cache, Command, Container, Debug, Element, Event, Length, MouseCursor,
UserInterface,
Settings, UserInterface,
};
/// An interactive, native cross-platform application.
@ -72,7 +72,7 @@ pub trait Application: Sized {
/// It should probably be that last thing you call in your `main` function.
///
/// [`Application`]: trait.Application.html
fn run()
fn run(settings: Settings)
where
Self: 'static,
{
@ -96,13 +96,15 @@ pub trait Application: Sized {
let mut title = application.title();
// TODO: Ask for window settings and configure this properly
let (width, height) = settings.window.size;
let window = WindowBuilder::new()
.with_title(&title)
.with_inner_size(winit::dpi::LogicalSize {
width: 1280.0,
height: 1024.0,
width: f64::from(width),
height: f64::from(height),
})
.with_resizable(settings.window.resizable)
.build(&event_loop)
.expect("Open window");

View file

@ -26,10 +26,12 @@ pub use iced_native::*;
pub use winit;
pub mod conversion;
pub mod settings;
mod application;
pub use application::Application;
pub use settings::Settings;
// We disable debug capabilities on release builds unless the `debug` feature
// is explicitly enabled.

29
winit/src/settings.rs Normal file
View file

@ -0,0 +1,29 @@
//! Configure your application.
/// The settings of an application.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Settings {
/// The [`Window`] settings
///
/// [`Window`]: struct.Window.html
pub window: Window,
}
/// The window settings of an application.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Window {
/// The size of the window.
pub size: (u32, u32),
/// Whether the window should be resizable or not.
pub resizable: bool,
}
impl Default for Window {
fn default() -> Window {
Window {
size: (1024, 768),
resizable: true,
}
}
}