diff options
author | Jan Holesovsky <kendy@suse.cz> | 2011-05-06 17:48:51 +0200 |
---|---|---|
committer | Jan Holesovsky <kendy@suse.cz> | 2011-05-06 17:52:19 +0200 |
commit | ba14049431253ac9f2967040a097bcfe779b92c8 (patch) | |
tree | 8718b8e5445a7c774c8da2c18b8db9f8d8293fac | |
parent | 7defb64f07661b357c380f7fbcea0b2305492ebd (diff) |
Use the color conversion functions from basegfx.
-rw-r--r-- | cui/source/dialogs/colorpicker.cxx | 92 |
1 files changed, 15 insertions, 77 deletions
diff --git a/cui/source/dialogs/colorpicker.cxx b/cui/source/dialogs/colorpicker.cxx index 31a1348ac..98c1b3692 100644 --- a/cui/source/dialogs/colorpicker.cxx +++ b/cui/source/dialogs/colorpicker.cxx @@ -59,18 +59,19 @@ #include <sax/tools/converter.hxx> +#include <basegfx/color/bcolortools.hxx> + #include "dialmgr.hxx" #include "colorpicker.hrc" #include <cmath> -#include <limits> using rtl::OUString; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; -//using namespace ::com::sun::star::frame; using namespace ::com::sun::star::ui::dialogs; using namespace ::com::sun::star::beans; +using namespace ::basegfx; namespace cui { @@ -92,87 +93,24 @@ const sal_uInt16 COLORCOMP_YELLOW = 0x41; const sal_uInt16 COLORCOMP_MAGENTA = 0x42; const sal_uInt16 COLORCOMP_KEY = 0x43; -// ----------------------------------------------------------------------- -// color space conversion -// RGB = 0 .. 1 -// H = 0 .. 360 -// SV = 0 .. 1 -// CMYK = 0 .. 1 -// ----------------------------------------------------------------------- - -static bool equals( double a, double b ) -{ - return (a == b) || (abs(a-b) < std::numeric_limits<double>::epsilon()); -} +// color space conversion helpers static void RGBtoHSV( double dR, double dG, double dB, double& dH, double& dS, double& dV ) { - // Brightness = max(R, G, B); - dV = std::max( dR, std::max( dG, dB ) ); - - double cDelta = dV - std::min( dR, std::min( dG, dB ) ); - - // Saturation = max - min / max - if( dV > 0 ) - dS = cDelta / dV; - else - dS = 0.0; - - dH = 0.0; - - if( !equals( dS, 0.0 ) ) - { - if( equals( dR, dV ) ) - { - dH = ( dG - dB ) / cDelta; - } - else if( equals( dG, dV ) ) - { - dH = 2.0 + ( dB - dR ) / cDelta; - } - else if ( equals( dB, dV ) ) - { - dH = 4.0 + ( dR - dG ) / cDelta; - } - dH *= 60.0; + BColor result = tools::rgb2hsv( BColor( dR, dG, dB ) ); - if( dH < 0.0 ) - dH += 360.0; - } + dH = result.getX(); + dS = result.getY(); + dV = result.getZ(); } static void HSVtoRGB(double dH, double dS, double dV, double& dR, double& dG, double& dB ) { - if( equals( dS, 0.0 ) ) - { - dR = dV; - dG = dV; - dB = dV; - } - else - { - if( equals( dH, 360.0 ) ) - dH = 0.0; - else - dH /= 60.0; - - sal_uInt16 n = (sal_uInt16) dH; - double f = dH - n; - - double a = dV * ( 1.0 - dS ); - double b = dV * ( 1.0 - ( dS * f ) ); - double c = dV * ( 1.0 - ( dS * ( 1.0 - f ) ) ); + BColor result = tools::hsv2rgb( BColor( dH, dS, dV ) ); - switch( n ) - { - case 0: dR = dV; dG = c; dB = a; break; - case 1: dR = b; dG = dV; dB = a; break; - case 2: dR = a; dG = dV; dB = c; break; - case 3: dR = a; dG = b; dB = dV; break; - case 4: dR = c; dG = a; dB = dV; break; - case 5: dR = dV; dG = a; dB = b; break; - } - } + dR = result.getRed(); + dG = result.getGreen(); + dB = result.getBlue(); } // ----------------------------------------------------------------------- @@ -204,7 +142,7 @@ static void RGBtoCMYK( double dR, double dG, double dB, double& fCyan, double& f if( fMagenta < fKey ) fKey = fMagenta; if( fYellow < fKey ) fKey = fYellow; - if( equals( fKey, 1.0 ) ) + if( fKey >= 1.0 ) { //Black fCyan = 0.0; @@ -1289,9 +1227,9 @@ ColorPickerDialog::ColorPickerDialog( Window* pParent, sal_Int32 nColor, sal_Int // -------------------------------------------------------------------- -static int toInt( double dValue, double bRange ) +static int toInt( double dValue, double dRange ) { - return static_cast< int >( std::floor((dValue * bRange) + 0.5 ) ); + return static_cast< int >( std::floor((dValue * dRange) + 0.5 ) ); } sal_Int32 ColorPickerDialog::GetColor() const |