pub trait Blend {
// Required methods
fn multiply(self, other: Self) -> Self;
fn screen(self, other: Self) -> Self;
fn overlay(self, other: Self) -> Self;
fn darken(self, other: Self) -> Self;
fn lighten(self, other: Self) -> Self;
fn dodge(self, other: Self) -> Self;
fn burn(self, other: Self) -> Self;
fn hard_light(self, other: Self) -> Self;
fn soft_light(self, other: Self) -> Self;
fn difference(self, other: Self) -> Self;
fn exclusion(self, other: Self) -> Self;
}
Expand description
A trait for different ways of mixing colors together.
This implements the classic separable blend modes, as described by W3C.
Note: The default implementations of the blend modes are meant for color components in the range [0.0, 1.0] and may otherwise produce strange results.
Required Methods§
sourcefn multiply(self, other: Self) -> Self
fn multiply(self, other: Self) -> Self
Multiply self
with other
. This uses the alpha component to regulate
the effect, so it’s not just plain component wise multiplication.
sourcefn overlay(self, other: Self) -> Self
fn overlay(self, other: Self) -> Self
Multiply self
or other
if other is dark, or screen them if other
is light. This results in an S curve.
sourcefn dodge(self, other: Self) -> Self
fn dodge(self, other: Self) -> Self
Lighten other
to reflect self
. Results in other
if self
is
black.
sourcefn burn(self, other: Self) -> Self
fn burn(self, other: Self) -> Self
Darken other
to reflect self
. Results in other
if self
is
white.
sourcefn hard_light(self, other: Self) -> Self
fn hard_light(self, other: Self) -> Self
Multiply self
or other
if other is dark, or screen them if self
is light. This is similar to overlay
, but depends on self
instead
of other
.
sourcefn soft_light(self, other: Self) -> Self
fn soft_light(self, other: Self) -> Self
Lighten other
if self
is light, or darken other
as if it’s burned
if self
is dark. The effect is increased if the components of self
is further from 0.5.
sourcefn difference(self, other: Self) -> Self
fn difference(self, other: Self) -> Self
Return the absolute difference between self
and other
. It’s
basically abs(self - other)
, but regulated by the alpha component.