diff options
author | 2021-07-22 13:08:13 -0500 | |
---|---|---|
committer | 2021-07-22 13:08:13 -0500 | |
commit | a7d2834a6d15466eecca29bb6357d3539cb652cd (patch) | |
tree | 4cd74ac7fbde634e32b90704184296568e220aaf /graphics | |
parent | 191288771f747f89e555dd315b424b468ab3d52a (diff) | |
download | iced-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.rs | 2 | ||||
-rw-r--r-- | graphics/src/window/compositor.rs | 33 |
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 + ), + } + } } |