iced/src/settings.rs
Héctor Ramón Jiménez 7337ab63bc
Introduce explicit id field to Settings
... and use it to set the application id of the window on Unix systems, instead of relying on the title of the application.
2021-08-11 19:48:55 +07:00

106 lines
3.2 KiB
Rust

//! Configure your application.
use crate::window;
/// The settings of an application.
#[derive(Debug, Clone)]
pub struct Settings<Flags> {
/// The identifier of the application.
///
/// If provided, this identifier may be used to identify the application or
/// communicate with it through the windowing system.
pub id: Option<String>,
/// The window settings.
///
/// They will be ignored on the Web.
pub window: window::Settings,
/// The data needed to initialize the [`Application`].
///
/// [`Application`]: crate::Application
pub flags: Flags,
/// The bytes of the font that will be used by default.
///
/// If `None` is provided, a default system font will be chosen.
// TODO: Add `name` for web compatibility
pub default_font: Option<&'static [u8]>,
/// The text size that will be used by default.
///
/// The default value is 20.
pub default_text_size: u16,
/// If enabled, spread text workload in multiple threads when multiple cores
/// are available.
///
/// By default, it is disabled.
pub text_multithreading: bool,
/// If set to true, the renderer will try to perform antialiasing for some
/// primitives.
///
/// Enabling it can produce a smoother result in some widgets, like the
/// [`Canvas`], at a performance cost.
///
/// By default, it is disabled.
///
/// [`Canvas`]: crate::widget::Canvas
pub antialiasing: bool,
/// Whether the [`Application`] should exit when the user requests the
/// window to close (e.g. the user presses the close button).
///
/// By default, it is enabled.
pub exit_on_close_request: bool,
}
impl<Flags> Settings<Flags> {
/// Initialize [`Application`] settings using the given data.
///
/// [`Application`]: crate::Application
pub fn with_flags(flags: Flags) -> Self {
let default_settings = Settings::<()>::default();
Self {
flags,
id: default_settings.id,
window: default_settings.window,
default_font: default_settings.default_font,
default_text_size: default_settings.default_text_size,
text_multithreading: default_settings.text_multithreading,
antialiasing: default_settings.antialiasing,
exit_on_close_request: default_settings.exit_on_close_request,
}
}
}
impl<Flags> Default for Settings<Flags>
where
Flags: Default,
{
fn default() -> Self {
Self {
id: None,
window: Default::default(),
flags: Default::default(),
default_font: Default::default(),
default_text_size: 20,
text_multithreading: false,
antialiasing: false,
exit_on_close_request: true,
}
}
}
#[cfg(not(target_arch = "wasm32"))]
impl<Flags> From<Settings<Flags>> for iced_winit::Settings<Flags> {
fn from(settings: Settings<Flags>) -> iced_winit::Settings<Flags> {
iced_winit::Settings {
id: settings.id,
window: settings.window.into(),
flags: settings.flags,
exit_on_close_request: settings.exit_on_close_request,
}
}
}