Browse Source

Change `Frame::multiply_with_opacity` to multiply in gamma space (#4283)

This produces a more perceptually even change when used in animations,
like when fading out a closed window
pull/4285/head
Emil Ernerfeldt 7 months ago
committed by GitHub
parent
commit
ab720ce900
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      crates/ecolor/src/color32.rs
  2. 10
      crates/egui/src/containers/frame.rs

2
crates/ecolor/src/color32.rs

@ -212,7 +212,7 @@ impl Color32 {
/// Multiply with 0.5 to make color half as opaque in linear space.
///
/// This is using linear space, which is not perceptually even.
/// You may want to use [`Self::gamma_multiply`] instead.
/// You likely want to use [`Self::gamma_multiply`] instead.
#[inline]
pub fn linear_multiply(self, factor: f32) -> Self {
crate::ecolor_assert!(0.0 <= factor && factor <= 1.0);

10
crates/egui/src/containers/frame.rs

@ -196,11 +196,15 @@ impl Frame {
self
}
/// Opacity multiplier in gamma space.
///
/// For instance, multiplying with `0.5`
/// will make the frame half transparent.
#[inline]
pub fn multiply_with_opacity(mut self, opacity: f32) -> Self {
self.fill = self.fill.linear_multiply(opacity);
self.stroke.color = self.stroke.color.linear_multiply(opacity);
self.shadow.color = self.shadow.color.linear_multiply(opacity);
self.fill = self.fill.gamma_multiply(opacity);
self.stroke.color = self.stroke.color.gamma_multiply(opacity);
self.shadow.color = self.shadow.color.gamma_multiply(opacity);
self
}
}

Loading…
Cancel
Save