summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authorLibravatar Billy Messenger <BillyDM@tutamail.com>2021-07-22 13:08:13 -0500
committerLibravatar Billy Messenger <BillyDM@tutamail.com>2021-07-22 13:08:13 -0500
commita7d2834a6d15466eecca29bb6357d3539cb652cd (patch)
tree4cd74ac7fbde634e32b90704184296568e220aaf /graphics
parent191288771f747f89e555dd315b424b468ab3d52a (diff)
downloadiced-a7d2834a6d15466eecca29bb6357d3539cb652cd.tar.gz
iced-a7d2834a6d15466eecca29bb6357d3539cb652cd.tar.bz2
iced-a7d2834a6d15466eecca29bb6357d3539cb652cd.zip
add custom error for Compositor::draw()
Diffstat (limited to 'graphics')
-rw-r--r--graphics/src/window.rs2
-rw-r--r--graphics/src/window/compositor.rs33
2 files changed, 30 insertions, 5 deletions
diff --git a/graphics/src/window.rs b/graphics/src/window.rs
index 3e74db5f..6813643d 100644
--- a/graphics/src/window.rs
+++ b/graphics/src/window.rs
@@ -4,7 +4,7 @@ mod compositor;
#[cfg(feature = "opengl")]
mod gl_compositor;
-pub use compositor::Compositor;
+pub use compositor::{Compositor, CompositorDrawError};
#[cfg(feature = "opengl")]
pub use gl_compositor::GLCompositor;
diff --git a/graphics/src/window/compositor.rs b/graphics/src/window/compositor.rs
index 7342245c..9f7cb43f 100644
--- a/graphics/src/window/compositor.rs
+++ b/graphics/src/window/compositor.rs
@@ -43,9 +43,6 @@ pub trait Compositor: Sized {
/// Draws the output primitives to the next frame of the given [`SwapChain`].
///
- /// This will return an error if drawing could not be completed on this frame.
- /// If an error occurs, try calling this again on the next frame.
- ///
/// [`SwapChain`]: Self::SwapChain
fn draw<T: AsRef<str>>(
&mut self,
@@ -55,5 +52,33 @@ pub trait Compositor: Sized {
background_color: Color,
output: &<Self::Renderer as iced_native::Renderer>::Output,
overlay: &[T],
- ) -> Result<mouse::Interaction, ()>;
+ ) -> Result<mouse::Interaction, CompositorDrawError>;
+}
+
+/// Result of an unsuccessful call to [`Compositor::draw`].
+#[derive(Debug)]
+pub enum CompositorDrawError {
+ /// The swapchain is outdated. Try rendering again next frame.
+ SwapchainOutdated(Box<dyn std::error::Error>),
+ /// A fatal swapchain error occured. Rendering cannot continue.
+ FatalSwapchainError(Box<dyn std::error::Error>),
+}
+
+impl std::error::Error for CompositorDrawError {}
+
+impl std::fmt::Display for CompositorDrawError {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ match self {
+ CompositorDrawError::SwapchainOutdated(e) => write!(
+ f,
+ "Swapchain is outdated: {}. Try rendering next frame.",
+ e
+ ),
+ CompositorDrawError::FatalSwapchainError(e) => write!(
+ f,
+ "Fatal swapchain error: {}. Rendering cannot continue.",
+ e
+ ),
+ }
+ }
}