Add custom window background/clear color (incl. transparency) support, fixes #272

wgpu would currently ignore the alpha: https://github.com/gfx-rs/wgpu/issues/687

glow (and naively patched wgpu) requires premultiplied alpha, so if you don't
multiply the RGB by the A right now, the semi-transparent color would be wrong
(too bright).

winit with_transparent doesn't seem necessary.
This commit is contained in:
Greg V 2020-05-31 16:53:57 +03:00
parent 05750bf186
commit a65d6a11cb
6 changed files with 49 additions and 9 deletions

View file

@ -195,6 +195,7 @@ pub trait Application: Sized {
} else {
None
},
background_color: settings.background_color,
..crate::renderer::Settings::default()
};

View file

@ -1,8 +1,8 @@
//! Configure your application.
use crate::window;
use crate::{window, Color};
/// The settings of an application.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Settings<Flags> {
/// The window settings.
///
@ -32,6 +32,29 @@ pub struct Settings<Flags> {
///
/// [`Canvas`]: ../widget/canvas/struct.Canvas.html
pub antialiasing: bool,
/// The background color of the window.
///
/// On supported backends, this makes it possible to have
/// (semi-)transparent windows.
///
/// By default, it is white.
pub background_color: Color,
}
impl<Flags> Default for Settings<Flags>
where
Flags: Default,
{
fn default() -> Self {
Self {
flags: Default::default(),
antialiasing: Default::default(),
default_font: Default::default(),
window: Default::default(),
background_color: Color::WHITE,
}
}
}
impl<Flags> Settings<Flags> {
@ -46,6 +69,7 @@ impl<Flags> Settings<Flags> {
antialiasing: Default::default(),
default_font: Default::default(),
window: Default::default(),
background_color: Color::WHITE,
}
}
}