mirror of
https://github.com/storytold/deckcraft.git
synced 2026-11-02 06:57:04 -06:00
Merge pull request #1630
Apply alphaMod and alphaOff in ColorRef::alpha
This commit is contained in:
@@ -55,10 +55,12 @@ impl ColorRef {
|
||||
};
|
||||
deckcraft_color::apply(base, &self.mods)
|
||||
}
|
||||
/// Alpha (0–1) from an `alpha` transform, if any.
|
||||
/// Alpha (0–1) from the `alpha`, `alphaMod` and `alphaOff` transforms, applied in order.
|
||||
pub fn alpha(&self) -> f64 {
|
||||
self.mods.iter().fold(1.0, |a, m| match m {
|
||||
ColorTransform::Alpha(v) => (*v as f64 / 100_000.0).clamp(0.0, 1.0),
|
||||
ColorTransform::AlphaMod(v) => (a * *v as f64 / 100_000.0).clamp(0.0, 1.0),
|
||||
ColorTransform::AlphaOff(v) => (a + *v as f64 / 100_000.0).clamp(0.0, 1.0),
|
||||
_ => a,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -327,3 +327,15 @@ fn only_web_and_mail_links_are_safe_to_open() {
|
||||
assert!(!safe_url(url), "{url}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn colour_alpha_follows_alpha_mod_and_off() {
|
||||
use deckcraft_color::{ColorTransform, Rgba};
|
||||
let base = || ColorRef::rgb(Rgba::rgb(1, 2, 3));
|
||||
let mod_half = base().with(ColorTransform::AlphaMod(50000));
|
||||
assert!((mod_half.alpha() - 0.5).abs() < 1e-9, "{}", mod_half.alpha());
|
||||
let off = base().with(ColorTransform::AlphaOff(-50000));
|
||||
assert!((off.alpha() - 0.5).abs() < 1e-9, "{}", off.alpha());
|
||||
let both = base().with(ColorTransform::Alpha(40000)).with(ColorTransform::AlphaMod(50000));
|
||||
assert!((both.alpha() - 0.2).abs() < 1e-9, "{}", both.alpha());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user