Allow Application
configuration with Settings
This commit is contained in:
parent
e72b5ceeb8
commit
d70021fa68
@ -1,12 +1,12 @@
|
|||||||
use iced::{
|
use iced::{
|
||||||
button, scrollable, text_input, Align, Application, Background, Button,
|
button, scrollable, text_input, Align, Application, Background, Button,
|
||||||
Checkbox, Color, Column, Command, Container, Element, Font,
|
Checkbox, Color, Column, Command, Container, Element, Font,
|
||||||
HorizontalAlignment, Length, Row, Scrollable, Text, TextInput,
|
HorizontalAlignment, Length, Row, Scrollable, Settings, Text, TextInput,
|
||||||
};
|
};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
Todos::run()
|
Todos::run(Settings::default())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
use iced::{
|
use iced::{
|
||||||
button, scrollable, slider, text_input, Background, Button, Checkbox,
|
button, scrollable, slider, text_input, Background, Button, Checkbox,
|
||||||
Color, Column, Container, Element, HorizontalAlignment, Image, Length,
|
Color, Column, Container, Element, HorizontalAlignment, Image, Length,
|
||||||
Radio, Row, Sandbox, Scrollable, Slider, Text, TextInput,
|
Radio, Row, Sandbox, Scrollable, Settings, Slider, Text, TextInput,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
env_logger::init();
|
env_logger::init();
|
||||||
|
|
||||||
Tour::run()
|
Tour::run(Settings::default())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Tour {
|
pub struct Tour {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use crate::{Command, Element};
|
use crate::{Command, Element, Settings};
|
||||||
|
|
||||||
/// An interactive cross-platform application.
|
/// An interactive cross-platform application.
|
||||||
///
|
///
|
||||||
@ -19,10 +19,10 @@ use crate::{Command, Element};
|
|||||||
/// before](index.html#overview). We just need to fill in the gaps:
|
/// before](index.html#overview). We just need to fill in the gaps:
|
||||||
///
|
///
|
||||||
/// ```no_run
|
/// ```no_run
|
||||||
/// use iced::{button, Application, Button, Column, Command, Element, Text};
|
/// use iced::{button, Application, Button, Column, Command, Element, Settings, Text};
|
||||||
///
|
///
|
||||||
/// pub fn main() {
|
/// pub fn main() {
|
||||||
/// Counter::run()
|
/// Counter::run(Settings::default())
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// #[derive(Default)]
|
/// #[derive(Default)]
|
||||||
@ -132,12 +132,12 @@ pub trait Application: Sized {
|
|||||||
/// It should probably be that last thing you call in your `main` function.
|
/// It should probably be that last thing you call in your `main` function.
|
||||||
///
|
///
|
||||||
/// [`Application`]: trait.Application.html
|
/// [`Application`]: trait.Application.html
|
||||||
fn run()
|
fn run(settings: Settings)
|
||||||
where
|
where
|
||||||
Self: 'static,
|
Self: 'static,
|
||||||
{
|
{
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
<Instance<Self> as iced_winit::Application>::run();
|
<Instance<Self> as iced_winit::Application>::run(settings.into());
|
||||||
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
#[cfg(target_arch = "wasm32")]
|
||||||
<Instance<Self> as iced_web::Application>::run();
|
<Instance<Self> as iced_web::Application>::run();
|
||||||
|
@ -185,6 +185,9 @@ mod application;
|
|||||||
mod platform;
|
mod platform;
|
||||||
mod sandbox;
|
mod sandbox;
|
||||||
|
|
||||||
|
pub mod settings;
|
||||||
|
|
||||||
pub use application::Application;
|
pub use application::Application;
|
||||||
pub use platform::*;
|
pub use platform::*;
|
||||||
pub use sandbox::Sandbox;
|
pub use sandbox::Sandbox;
|
||||||
|
pub use settings::Settings;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use crate::{Application, Command, Element};
|
use crate::{Application, Command, Element, Settings};
|
||||||
|
|
||||||
/// A sandboxed [`Application`].
|
/// A sandboxed [`Application`].
|
||||||
///
|
///
|
||||||
@ -19,10 +19,10 @@ use crate::{Application, Command, Element};
|
|||||||
/// to remove the use of [`Command`]:
|
/// to remove the use of [`Command`]:
|
||||||
///
|
///
|
||||||
/// ```no_run
|
/// ```no_run
|
||||||
/// use iced::{button, Button, Column, Element, Sandbox, Text};
|
/// use iced::{button, Button, Column, Element, Sandbox, Settings, Text};
|
||||||
///
|
///
|
||||||
/// pub fn main() {
|
/// pub fn main() {
|
||||||
/// Counter::run()
|
/// Counter::run(Settings::default())
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// #[derive(Default)]
|
/// #[derive(Default)]
|
||||||
@ -121,11 +121,11 @@ pub trait Sandbox {
|
|||||||
/// It should probably be that last thing you call in your `main` function.
|
/// It should probably be that last thing you call in your `main` function.
|
||||||
///
|
///
|
||||||
/// [`Sandbox`]: trait.Sandbox.html
|
/// [`Sandbox`]: trait.Sandbox.html
|
||||||
fn run()
|
fn run(settings: Settings)
|
||||||
where
|
where
|
||||||
Self: 'static + Sized,
|
Self: 'static + Sized,
|
||||||
{
|
{
|
||||||
<Self as Application>::run()
|
<Self as Application>::run(settings)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
43
src/settings.rs
Normal file
43
src/settings.rs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
//! Configure your application.
|
||||||
|
|
||||||
|
/// The settings of an application.
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
|
||||||
|
pub struct Settings {
|
||||||
|
/// The [`Window`] settings.
|
||||||
|
///
|
||||||
|
/// They will be ignored on the Web.
|
||||||
|
///
|
||||||
|
/// [`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,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
impl From<Settings> for iced_winit::Settings {
|
||||||
|
fn from(settings: Settings) -> iced_winit::Settings {
|
||||||
|
iced_winit::Settings {
|
||||||
|
window: iced_winit::settings::Window {
|
||||||
|
size: settings.window.size,
|
||||||
|
resizable: settings.window.resizable,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -3,7 +3,7 @@ use crate::{
|
|||||||
input::{keyboard, mouse},
|
input::{keyboard, mouse},
|
||||||
renderer::{Target, Windowed},
|
renderer::{Target, Windowed},
|
||||||
Cache, Command, Container, Debug, Element, Event, Length, MouseCursor,
|
Cache, Command, Container, Debug, Element, Event, Length, MouseCursor,
|
||||||
UserInterface,
|
Settings, UserInterface,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// An interactive, native cross-platform application.
|
/// 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.
|
/// It should probably be that last thing you call in your `main` function.
|
||||||
///
|
///
|
||||||
/// [`Application`]: trait.Application.html
|
/// [`Application`]: trait.Application.html
|
||||||
fn run()
|
fn run(settings: Settings)
|
||||||
where
|
where
|
||||||
Self: 'static,
|
Self: 'static,
|
||||||
{
|
{
|
||||||
@ -96,13 +96,15 @@ pub trait Application: Sized {
|
|||||||
|
|
||||||
let mut title = application.title();
|
let mut title = application.title();
|
||||||
|
|
||||||
// TODO: Ask for window settings and configure this properly
|
let (width, height) = settings.window.size;
|
||||||
|
|
||||||
let window = WindowBuilder::new()
|
let window = WindowBuilder::new()
|
||||||
.with_title(&title)
|
.with_title(&title)
|
||||||
.with_inner_size(winit::dpi::LogicalSize {
|
.with_inner_size(winit::dpi::LogicalSize {
|
||||||
width: 1280.0,
|
width: f64::from(width),
|
||||||
height: 1024.0,
|
height: f64::from(height),
|
||||||
})
|
})
|
||||||
|
.with_resizable(settings.window.resizable)
|
||||||
.build(&event_loop)
|
.build(&event_loop)
|
||||||
.expect("Open window");
|
.expect("Open window");
|
||||||
|
|
||||||
|
@ -26,10 +26,12 @@ pub use iced_native::*;
|
|||||||
pub use winit;
|
pub use winit;
|
||||||
|
|
||||||
pub mod conversion;
|
pub mod conversion;
|
||||||
|
pub mod settings;
|
||||||
|
|
||||||
mod application;
|
mod application;
|
||||||
|
|
||||||
pub use application::Application;
|
pub use application::Application;
|
||||||
|
pub use settings::Settings;
|
||||||
|
|
||||||
// We disable debug capabilities on release builds unless the `debug` feature
|
// We disable debug capabilities on release builds unless the `debug` feature
|
||||||
// is explicitly enabled.
|
// is explicitly enabled.
|
||||||
|
29
winit/src/settings.rs
Normal file
29
winit/src/settings.rs
Normal 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,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user