diff --git a/include/SFML/Graphics/Color.h b/include/SFML/Graphics/Color.h index 81a0e80..b14b537 100644 --- a/include/SFML/Graphics/Color.h +++ b/include/SFML/Graphics/Color.h @@ -109,6 +109,17 @@ CSFML_GRAPHICS_API sfUint32 sfColor_toInteger(sfColor color); //////////////////////////////////////////////////////////// CSFML_GRAPHICS_API sfColor sfColor_add(sfColor color1, sfColor color2); +//////////////////////////////////////////////////////////// +/// \brief Subtract two colors +/// +/// \param color1 First color +/// \param color2 Second color +/// +/// \return Component-wise saturated subtraction of the two colors +/// +//////////////////////////////////////////////////////////// +CSFML_GRAPHICS_API sfColor sfColor_subtract(sfColor color1, sfColor color2); + //////////////////////////////////////////////////////////// /// \brief Modulate two colors /// diff --git a/src/SFML/Graphics/Color.cpp b/src/SFML/Graphics/Color.cpp index 40e60da..d3b24d3 100644 --- a/src/SFML/Graphics/Color.cpp +++ b/src/SFML/Graphics/Color.cpp @@ -97,6 +97,21 @@ sfColor sfColor_add(sfColor color1, sfColor color2) } +//////////////////////////////////////////////////////////// +sfColor sfColor_subtract(sfColor color1, sfColor color2) +{ + int red = std::max(color1.r - color2.r, 0); + int green = std::max(color1.g - color2.g, 0); + int blue = std::max(color1.b - color2.b, 0); + int alpha = std::max(color1.a - color2.a, 0); + + return sfColor_fromRGBA(static_cast(red), + static_cast(green), + static_cast(blue), + static_cast(alpha)); +} + + //////////////////////////////////////////////////////////// sfColor sfColor_modulate(sfColor color1, sfColor color2) {