diff --git a/src/Color.cpp b/src/Color.cpp index b2beb9a..aabde09 100644 --- a/src/Color.cpp +++ b/src/Color.cpp @@ -79,6 +79,19 @@ Rgb& Rgb::operator+=( Rgb in ) { return *this; } +Rgb Rgb::operator-( Rgb in ) const { + auto copy = *this; + copy -= in; + return copy; +} + +Rgb& Rgb::operator-=( Rgb in ) { + r = ( in.r > r ) ? 0 : r - in.r; + g = ( in.g > g ) ? 0 : g - in.g; + b = ( in.b > b ) ? 0 : b - in.b; + return *this; +} + Rgb& Rgb::blend( Rgb in ) { unsigned int inAlpha = in.a * ( 255 - a ); unsigned int alpha = a + inAlpha; diff --git a/src/Color.h b/src/Color.h index 1923cf0..6590ef0 100644 --- a/src/Color.h +++ b/src/Color.h @@ -16,6 +16,8 @@ union Rgb { Rgb& operator=( Hsv hsv ); Rgb operator+( Rgb in ) const; Rgb& operator+=( Rgb in ); + Rgb operator-(Rgb in) const; + Rgb &operator-=(Rgb in); bool operator==( Rgb in ) const { return in.value == value; } Rgb& blend( Rgb in ); void swap( Rgb& o ) { value = o.value; }