Kaydet (Commit) 5984cc83 authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl

Add ability to change tint/shade of a color.

Change-Id: I6933393732d23fe9386cb8b768676887c026bd39
üst 6719b36a
......@@ -161,6 +161,16 @@ public:
void IncreaseLuminance(sal_uInt8 cLumInc);
void DecreaseLuminance(sal_uInt8 cLumDec);
/**
* Apply tint or shade to a color.
*
* The input value is the percentage (in 100th of percent) of how much the
* color changes towards the black (shade) or white (tint). If the value
* is positive, the color is tinted, if the value is negative, the color is
* shaded.
**/
void ApplyTintOrShade(sal_Int16 n100thPercent);
void DecreaseContrast(sal_uInt8 cContDec);
void Invert();
......
......@@ -29,6 +29,8 @@
#include <tools/rcid.h>
#include <tools/resid.hxx>
#include <tools/rc.h>
#include <tools/helpers.hxx>
#include <basegfx/color/bcolortools.hxx>
static inline long _FRound( double fVal )
{
......@@ -113,6 +115,34 @@ bool Color::IsBright() const
return GetLuminance() >= 245;
}
void Color::ApplyTintOrShade(sal_Int16 n100thPercent)
{
if (n100thPercent > 0)
{
basegfx::BColor aBColor = basegfx::tools::rgb2hsl(getBColor());
double fFactor = std::abs(n100thPercent) / 10000.0;
aBColor.setBlue(aBColor.getBlue() * fFactor + (100.0 - aBColor.getBlue()));
aBColor = basegfx::tools::hsl2rgb(aBColor);
SetRed(sal_uInt8((aBColor.getRed() * 255.0) + 0.5));
SetGreen(sal_uInt8((aBColor.getGreen() * 255.0) + 0.5));
SetBlue(sal_uInt8((aBColor.getBlue() * 255.0) + 0.5));
}
else if (n100thPercent < 0)
{
basegfx::BColor aBColor = basegfx::tools::rgb2hsl(getBColor());
double fFactor = std::abs(n100thPercent) / 10000.0;
aBColor.setBlue(aBColor.getBlue() * fFactor);
aBColor = basegfx::tools::hsl2rgb(aBColor);
SetRed(sal_uInt8((aBColor.getRed() * 255.0) + 0.5));
SetGreen(sal_uInt8((aBColor.getGreen() * 255.0) + 0.5));
SetBlue(sal_uInt8((aBColor.getBlue() * 255.0) + 0.5));
}
}
// color space conversion
void Color::RGBtoHSB( sal_uInt16& nHue, sal_uInt16& nSat, sal_uInt16& nBri ) const
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment