summaryrefslogtreecommitdiffstats
path: root/src/sandbox.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sandbox.rs')
-rw-r--r--src/sandbox.rs79
1 files changed, 46 insertions, 33 deletions
diff --git a/src/sandbox.rs b/src/sandbox.rs
index c6fa45d0..dbaa02f1 100644
--- a/src/sandbox.rs
+++ b/src/sandbox.rs
@@ -1,4 +1,6 @@
-use crate::{executor, Application, Command, Element, Settings, Subscription};
+use crate::{
+ Application, Color, Command, Element, Error, Settings, Subscription,
+};
/// A sandboxed [`Application`].
///
@@ -12,11 +14,6 @@ use crate::{executor, Application, Command, Element, Settings, Subscription};
/// Therefore, it is recommended to always start by implementing this trait and
/// upgrade only once necessary.
///
-/// [`Application`]: trait.Application.html
-/// [`Sandbox`]: trait.Sandbox.html
-/// [`Command`]: struct.Command.html
-/// [`Command::none`]: struct.Command.html#method.none
-///
/// # Examples
/// [The repository has a bunch of examples] that use the [`Sandbox`] trait:
///
@@ -38,20 +35,20 @@ use crate::{executor, Application, Command, Element, Settings, Subscription};
/// - [`tour`], a simple UI tour that can run both on native platforms and the
/// web!
///
-/// [The repository has a bunch of examples]: https://github.com/hecrj/iced/tree/0.1/examples
-/// [`bezier_tool`]: https://github.com/hecrj/iced/tree/0.1/examples/bezier_tool
-/// [`counter`]: https://github.com/hecrj/iced/tree/0.1/examples/counter
-/// [`custom_widget`]: https://github.com/hecrj/iced/tree/0.1/examples/custom_widget
-/// [`geometry`]: https://github.com/hecrj/iced/tree/0.1/examples/geometry
-/// [`pane_grid`]: https://github.com/hecrj/iced/tree/0.1/examples/pane_grid
-/// [`progress_bar`]: https://github.com/hecrj/iced/tree/0.1/examples/progress_bar
-/// [`styling`]: https://github.com/hecrj/iced/tree/0.1/examples/styling
-/// [`svg`]: https://github.com/hecrj/iced/tree/0.1/examples/svg
-/// [`tour`]: https://github.com/hecrj/iced/tree/0.1/examples/tour
+/// [The repository has a bunch of examples]: https://github.com/hecrj/iced/tree/0.2/examples
+/// [`bezier_tool`]: https://github.com/hecrj/iced/tree/0.2/examples/bezier_tool
+/// [`counter`]: https://github.com/hecrj/iced/tree/0.2/examples/counter
+/// [`custom_widget`]: https://github.com/hecrj/iced/tree/0.2/examples/custom_widget
+/// [`geometry`]: https://github.com/hecrj/iced/tree/0.2/examples/geometry
+/// [`pane_grid`]: https://github.com/hecrj/iced/tree/0.2/examples/pane_grid
+/// [`progress_bar`]: https://github.com/hecrj/iced/tree/0.2/examples/progress_bar
+/// [`styling`]: https://github.com/hecrj/iced/tree/0.2/examples/styling
+/// [`svg`]: https://github.com/hecrj/iced/tree/0.2/examples/svg
+/// [`tour`]: https://github.com/hecrj/iced/tree/0.2/examples/tour
/// [`lyon`]: https://github.com/nical/lyon
/// [the overview]: index.html#overview
-/// [`iced_wgpu`]: https://github.com/hecrj/iced/tree/0.1/wgpu
-/// [`Svg` widget]: widget/svg/struct.Svg.html
+/// [`iced_wgpu`]: https://github.com/hecrj/iced/tree/0.2/wgpu
+/// [`Svg` widget]: crate::widget::Svg
/// [Ghostscript Tiger]: https://commons.wikimedia.org/wiki/File:Ghostscript_Tiger.svg
///
/// ## A simple "Hello, world!"
@@ -62,7 +59,7 @@ use crate::{executor, Application, Command, Element, Settings, Subscription};
/// ```no_run
/// use iced::{Element, Sandbox, Settings, Text};
///
-/// pub fn main() {
+/// pub fn main() -> iced::Result {
/// Hello::run(Settings::default())
/// }
///
@@ -90,49 +87,57 @@ use crate::{executor, Application, Command, Element, Settings, Subscription};
/// ```
pub trait Sandbox {
/// The type of __messages__ your [`Sandbox`] will produce.
- ///
- /// [`Sandbox`]: trait.Sandbox.html
type Message: std::fmt::Debug + Send;
/// Initializes the [`Sandbox`].
///
/// Here is where you should return the initial state of your app.
- ///
- /// [`Sandbox`]: trait.Sandbox.html
fn new() -> Self;
/// Returns the current title of the [`Sandbox`].
///
/// This title can be dynamic! The runtime will automatically update the
/// title of your application when necessary.
- ///
- /// [`Sandbox`]: trait.Sandbox.html
fn title(&self) -> String;
/// Handles a __message__ and updates the state of the [`Sandbox`].
///
/// This is where you define your __update logic__. All the __messages__,
/// produced by user interactions, will be handled by this method.
- ///
- /// [`Sandbox`]: trait.Sandbox.html
fn update(&mut self, message: Self::Message);
/// Returns the widgets to display in the [`Sandbox`].
///
/// These widgets can produce __messages__ based on user interaction.
- ///
- /// [`Sandbox`]: trait.Sandbox.html
fn view(&mut self) -> Element<'_, Self::Message>;
+ /// Returns the background color of the [`Sandbox`].
+ ///
+ /// By default, it returns [`Color::WHITE`].
+ fn background_color(&self) -> Color {
+ Color::WHITE
+ }
+
+ /// Returns the scale factor of the [`Sandbox`].
+ ///
+ /// It can be used to dynamically control the size of the UI at runtime
+ /// (i.e. zooming).
+ ///
+ /// For instance, a scale factor of `2.0` will make widgets twice as big,
+ /// while a scale factor of `0.5` will shrink them to half their size.
+ ///
+ /// By default, it returns `1.0`.
+ fn scale_factor(&self) -> f64 {
+ 1.0
+ }
+
/// Runs the [`Sandbox`].
///
/// On native platforms, this method will take control of the current thread
/// and __will NOT return__.
///
/// It should probably be that last thing you call in your `main` function.
- ///
- /// [`Sandbox`]: trait.Sandbox.html
- fn run(settings: Settings<()>)
+ fn run(settings: Settings<()>) -> Result<(), Error>
where
Self: 'static + Sized,
{
@@ -144,7 +149,7 @@ impl<T> Application for T
where
T: Sandbox,
{
- type Executor = executor::Null;
+ type Executor = crate::runtime::executor::Null;
type Flags = ();
type Message = T::Message;
@@ -169,4 +174,12 @@ where
fn view(&mut self) -> Element<'_, T::Message> {
T::view(self)
}
+
+ fn background_color(&self) -> Color {
+ T::background_color(self)
+ }
+
+ fn scale_factor(&self) -> f64 {
+ T::scale_factor(self)
+ }
}