diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2015-05-07 13:55:59 +0900 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2015-05-07 14:10:51 +0900 |
commit | 5984cc83fe756f7483d1ac582b8adbef5042be8b (patch) | |
tree | 11a06b6c812e1a7b5e398ebbbb059ffc60c24872 /tools/source | |
parent | 6719b36a66171f59b383ccc5e7497d208bd566aa (diff) |
Add ability to change tint/shade of a color.
Change-Id: I6933393732d23fe9386cb8b768676887c026bd39
Diffstat (limited to 'tools/source')
-rw-r--r-- | tools/source/generic/color.cxx | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tools/source/generic/color.cxx b/tools/source/generic/color.cxx index 741cb159a4bf..453feae9c2e1 100644 --- a/tools/source/generic/color.cxx +++ b/tools/source/generic/color.cxx @@ -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 |