Modified: incubator/ooo/trunk/main/svtools/Package_inc.mk URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svtools/Package_inc.mk?rev=1239729&r1=1239728&r2=1239729&view=diff ============================================================================== --- incubator/ooo/trunk/main/svtools/Package_inc.mk (original) +++ incubator/ooo/trunk/main/svtools/Package_inc.mk Thu Feb 2 17:19:13 2012 @@ -38,7 +38,6 @@ $(eval $(call gb_Package_add_file,svtool $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/brwhead.hxx,svtools/brwhead.hxx)) $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/calendar.hxx,svtools/calendar.hxx)) $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/cliplistener.hxx,svtools/cliplistener.hxx)) -$(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/colctrl.hxx,svtools/colctrl.hxx)) $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/collatorres.hxx,svtools/collatorres.hxx)) $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/colorcfg.hxx,svtools/colorcfg.hxx)) $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/colrdlg.hxx,svtools/colrdlg.hxx))
Modified: incubator/ooo/trunk/main/svtools/inc/svtools/colrdlg.hxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svtools/inc/svtools/colrdlg.hxx?rev=1239729&r1=1239728&r2=1239729&view=diff ============================================================================== --- incubator/ooo/trunk/main/svtools/inc/svtools/colrdlg.hxx (original) +++ incubator/ooo/trunk/main/svtools/inc/svtools/colrdlg.hxx Thu Feb 2 17:19:13 2012 @@ -19,85 +19,39 @@ * *************************************************************/ - - #ifndef _SV_COLRDLG_HXX #define _SV_COLRDLG_HXX #include "svtools/svtdllapi.h" -#include <vcl/dialog.hxx> -#ifndef _SV_BUTTON_HXX //autogen -#include <vcl/button.hxx> -#endif -#include <vcl/fixed.hxx> -#include <vcl/field.hxx> -#include <svtools/colctrl.hxx> +#include <tools/color.hxx> + +class Window; // --------------- // - ColorDialog - // --------------- -class SVT_DLLPUBLIC SvColorDialog : public ModalDialog +namespace svtools { -private: - ColorMixingControl maColMixCtrl; - PushButton maBtn1; - PushButton maBtn2; - //PushButton maBtn3; - //PushButton maBtn4; - //FixedText maFtRGB; - SvColorControl maCtlColor; - - // CMYK controls. - FixedText maFtCyan; - MetricField maNumCyan; - FixedText maFtMagenta; - MetricField maNumMagenta; - FixedText maFtYellow; - MetricField maNumYellow; - FixedText maFtKey; - MetricField maNumKey; - - // RGB controls. - FixedText maFtRed; - NumericField maNumRed; - FixedText maFtGreen; - NumericField maNumGreen; - FixedText maFtBlue; - NumericField maNumBlue; - - // HSL controls. - FixedText maFtHue; - NumericField maNumHue; - FixedText maFtSaturation; - NumericField maNumSaturation; - FixedText maFtLuminance; - NumericField maNumLuminance; - - ColorPreviewControl maCtlPreview; - ColorPreviewControl maCtlPreviewOld; - - OKButton maBtnOK; - CancelButton maBtnCancel; - HelpButton maBtnHelp; - - Color maColor; - - SVT_DLLPRIVATE void Initialize(); - - DECL_DLLPRIVATE_LINK( ColorModifyHdl, void * ); - DECL_DLLPRIVATE_LINK( ClickBtnHdl, void * ); - DECL_DLLPRIVATE_LINK( ClickMixCtrlHdl, void * ); - DECL_DLLPRIVATE_LINK( SelectMixCtrlHdl, void * ); + // SELECT is the default + enum ColorPickerMode { ColorPickerMode_SELECT = 0, ColorPickerMode_ADD = 1, ColorPickerMode_MODIFY = 2 }; +} +class SVT_DLLPUBLIC SvColorDialog +{ public: - SvColorDialog( Window* pParent ); - ~SvColorDialog(); + SvColorDialog( ::Window* pParent ); void SetColor( const Color& rColor ); const Color& GetColor() const; + void SetMode( sal_Int16 eMode ); virtual short Execute(); + +private: + Window* mpParent; + Color maColor; + sal_Int16 meMode; }; #endif // _SV_COLRDLG_HXX Modified: incubator/ooo/trunk/main/svtools/source/dialogs/colrdlg.cxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svtools/source/dialogs/colrdlg.cxx?rev=1239729&r1=1239728&r2=1239729&view=diff ============================================================================== --- incubator/ooo/trunk/main/svtools/source/dialogs/colrdlg.cxx (original) +++ incubator/ooo/trunk/main/svtools/source/dialogs/colrdlg.cxx Thu Feb 2 17:19:13 2012 @@ -26,299 +26,103 @@ #ifndef GCC #endif -#include <svtools/svtdata.hxx> -#include "colrdlg.hrc" -#include <svtools/colrdlg.hxx> - -// --------------- -// - ColorDialog - -// --------------- - -SvColorDialog::SvColorDialog( Window* pWindow ) : - ModalDialog ( pWindow, SvtResId( DLG_COLOR ) ), - maColMixCtrl ( this, SvtResId( VAL_SET_COLOR ), 8, 8 ), - maBtn1 ( this, SvtResId( BTN_1 ) ), - maBtn2 ( this, SvtResId( BTN_2 ) ), - //maBtn3 ( this, SvtResId( BTN_3 ) ), - //maBtn4 ( this, SvtResId( BTN_4 ) ), - //maFtRGB ( this, SvtResId( FT_RGB ) ), - maCtlColor ( this, SvtResId( CTL_COLOR ) ), - - maFtCyan ( this, SvtResId( FT_CYAN ) ), - maNumCyan ( this, SvtResId( NUM_CYAN ) ), - maFtMagenta ( this, SvtResId( FT_MAGENTA ) ), - maNumMagenta ( this, SvtResId( NUM_MAGENTA ) ), - maFtYellow ( this, SvtResId( FT_YELLOW ) ), - maNumYellow ( this, SvtResId( NUM_YELLOW ) ), - maFtKey ( this, SvtResId( FT_KEY ) ), - maNumKey ( this, SvtResId( NUM_KEY ) ), - - maFtRed ( this, SvtResId( FT_RED ) ), - maNumRed ( this, SvtResId( NUM_RED ) ), - maFtGreen ( this, SvtResId( FT_GREEN ) ), - maNumGreen ( this, SvtResId( NUM_GREEN ) ), - maFtBlue ( this, SvtResId( FT_BLUE ) ), - maNumBlue ( this, SvtResId( NUM_BLUE ) ), - - maFtHue ( this, SvtResId( FT_HUE ) ), - maNumHue ( this, SvtResId( NUM_HUE ) ), - maFtSaturation ( this, SvtResId( FT_SATURATION ) ), - maNumSaturation ( this, SvtResId( NUM_SATURATION ) ), - maFtLuminance ( this, SvtResId( FT_LUMINANCE ) ), - maNumLuminance ( this, SvtResId( NUM_LUMINANCE ) ), - - maCtlPreview ( this, SvtResId( CTL_PREVIEW ) ), - maCtlPreviewOld ( this, SvtResId( CTL_PREVIEW_OLD ) ), - - maBtnOK ( this, SvtResId( BTN_OK ) ), - maBtnCancel ( this, SvtResId( BTN_CANCEL ) ), - maBtnHelp ( this, SvtResId( BTN_HELP ) ) +#include <com/sun/star/awt/XWindow.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/beans/XPropertyAccess.hpp> +#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp> +#include <comphelper/processfactory.hxx> +#include <toolkit/helper/vclunohelper.hxx> +#include <svtools/colrdlg.hxx> + +using rtl::OUString; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::ui::dialogs; + +// --------------- +// - ColorDialog - +// --------------- + +SvColorDialog::SvColorDialog( Window* pWindow ) +: mpParent( pWindow ) +, meMode( svtools::ColorPickerMode_SELECT ) { - FreeResource(); - - maColMixCtrl.SetDoubleClickHdl( LINK( this, SvColorDialog, ClickMixCtrlHdl ) ); - maColMixCtrl.SetSelectHdl( LINK( this, SvColorDialog, SelectMixCtrlHdl ) ); - - Link aLink( LINK( this, SvColorDialog, ColorModifyHdl ) ); - maCtlColor.SetModifyHdl( aLink ); - - maNumRed.SetModifyHdl( aLink ); - maNumGreen.SetModifyHdl( aLink ); - maNumBlue.SetModifyHdl( aLink ); - - maNumCyan.SetModifyHdl( aLink ); - maNumMagenta.SetModifyHdl( aLink ); - maNumYellow.SetModifyHdl( aLink ); - maNumKey.SetModifyHdl( aLink ); - - maNumHue.SetModifyHdl( aLink ); - maNumSaturation.SetModifyHdl( aLink ); - maNumLuminance.SetModifyHdl( aLink ); - - aLink = ( LINK( this, SvColorDialog, ClickBtnHdl ) ); - maBtn1.SetClickHdl( aLink ); - maBtn2.SetClickHdl( aLink ); - //maBtn3.SetClickHdl( aLink ); - //maBtn4.SetClickHdl( aLink ); - - maColMixCtrl.SetExtraSpacing( 0 ); } - // ----------------------------------------------------------------------- -SvColorDialog::~SvColorDialog() -{ -} -// ----------------------------------------------------------------------- -void SvColorDialog::Initialize() -{ - maNumRed.SetValue( maColor.GetRed() ); - maNumGreen.SetValue( maColor.GetGreen() ); - maNumBlue.SetValue( maColor.GetBlue() ); - - ColorCMYK aColorCMYK( maColor ); - - long aCyan = (long) ( (double)aColorCMYK.GetCyan() * 100.0 / 255.0 + 0.5 ); - long aMagenta = (long) ( (double)aColorCMYK.GetMagenta() * 100.0 / 255.0 + 0.5 ); - long aYellow = (long) ( (double)aColorCMYK.GetYellow() * 100.0 / 255.0 + 0.5 ); - long aKey = (long) ( (double)aColorCMYK.GetKey() * 100.0 / 255.0 + 0.5 ); - maNumCyan.SetValue( aCyan ); - maNumMagenta.SetValue( aMagenta ); - maNumYellow.SetValue( aYellow ); - maNumKey.SetValue( aKey ); - - ColorHSB aColorHSB( maColor ); - maNumHue.SetValue( aColorHSB.GetHue() ); - maNumSaturation.SetValue( aColorHSB.GetSat() ); - maNumLuminance.SetValue( aColorHSB.GetBri() ); - - maCtlColor.SetColor( aColorHSB ); - - maColMixCtrl.SelectItem( 1 ); - - maCtlPreview.SetColor( maColor ); - maCtlPreviewOld.SetColor( maColor ); -} - -// ----------------------------------------------------------------------- void SvColorDialog::SetColor( const Color& rColor ) { maColor = rColor; } // ----------------------------------------------------------------------- -const Color& SvColorDialog::GetColor() const -{ - return( maColor ); -} - -// ----------------------------------------------------------------------- -IMPL_LINK( SvColorDialog, ColorModifyHdl, void *, p ) -{ - sal_uInt16 n = 0x00; // 1 == RGB, 2 == CMYK, 4 == HSB - - if( p == &maCtlColor ) - { - maColor = maCtlColor.GetColor(); - maNumRed.SetValue( maColor.GetRed() ); - maNumGreen.SetValue( maColor.GetGreen() ); - maNumBlue.SetValue( maColor.GetBlue() ); - - n = 7; - } - else if( p == &maNumRed ) - { - maColor.SetRed( (sal_uInt8)maNumRed.GetValue() ); - maCtlColor.SetColor( maColor ); - n = 6; - } - else if( p == &maNumGreen ) - { - maColor.SetGreen( (sal_uInt8)maNumGreen.GetValue() ); - maCtlColor.SetColor( maColor ); - n = 6; - } - else if( p == &maNumBlue ) - { - maColor.SetBlue( (sal_uInt8)maNumBlue.GetValue() ); - maCtlColor.SetColor( maColor ); - n = 6; - } - else if( p == &maNumHue || - p == &maNumSaturation || - p == &maNumLuminance ) - { - - ColorHSB aColorHSB( (sal_uInt16) maNumHue.GetValue(), - (sal_uInt16) maNumSaturation.GetValue(), - (sal_uInt16) maNumLuminance.GetValue() ); - maCtlColor.SetColor( aColorHSB ); - maColor = maCtlColor.GetColor(); - n = 3; - } - else if( p == &maNumCyan || - p == &maNumMagenta || - p == &maNumYellow || - p == &maNumKey ) - { - long aCyan = (long) ( (double)maNumCyan.GetValue() * 255.0 / 100.0 + 0.5 ); - long aMagenta = (long) ( (double)maNumMagenta.GetValue() * 255.0 / 100.0 + 0.5 ); - long aYellow = (long) ( (double)maNumYellow.GetValue() * 255.0 / 100.0 + 0.5 ); - long aKey = (long) ( (double)maNumKey.GetValue() * 255.0 / 100.0 + 0.5 ); - - ColorCMYK aColorCMYK( (sal_uInt16) aCyan, - (sal_uInt16) aMagenta, - (sal_uInt16) aYellow, - (sal_uInt16) aKey ); - maColor = aColorCMYK.GetRGB(); - maCtlColor.SetColor( maColor ); - n = 5; - } - - if( n & 1 ) // RGB setzen - { - maNumRed.SetValue( maColor.GetRed() ); - maNumGreen.SetValue( maColor.GetGreen() ); - maNumBlue.SetValue( maColor.GetBlue() ); - } - if( n & 2 ) // CMYK setzen - { - ColorCMYK aColorCMYK( maColor ); - long aCyan = (long) ( (double)aColorCMYK.GetCyan() * 100.0 / 255.0 + 0.5 ); - long aMagenta = (long) ( (double)aColorCMYK.GetMagenta() * 100.0 / 255.0 + 0.5 ); - long aYellow = (long) ( (double)aColorCMYK.GetYellow() * 100.0 / 255.0 + 0.5 ); - long aKey = (long) ( (double)aColorCMYK.GetKey() * 100.0 / 255.0 + 0.5 ); - maNumCyan.SetValue( aCyan ); - maNumMagenta.SetValue( aMagenta ); - maNumYellow.SetValue( aYellow ); - maNumKey.SetValue( aKey ); - } - if( n & 4 ) // HSB setzen - { - ColorHSB aColorHSB( maColor ); - maNumHue.SetValue( aColorHSB.GetHue() ); - maNumSaturation.SetValue( aColorHSB.GetSat() ); - maNumLuminance.SetValue( aColorHSB.GetBri() ); - } - maCtlPreview.SetColor( maColor ); - - return 0; -} - -// ----------------------------------------------------------------------- -IMPL_LINK( SvColorDialog, ClickBtnHdl, void *, p ) +const Color& SvColorDialog::GetColor() const { - /* - Color aColor = maCtlColor.GetColor(); - if( p == &maBtn1 ) - maColMixCtrl.SetColor( CMC_TOPLEFT, aColor ); - if( p == &maBtn2 ) - maColMixCtrl.SetColor( CMC_TOPRIGHT, aColor ); - if( p == &maBtn3 ) - maColMixCtrl.SetColor( CMC_BOTTOMLEFT, aColor ); - if( p == &maBtn4 ) - maColMixCtrl.SetColor( CMC_BOTTOMRIGHT, aColor ); - */ - - if( p == &maBtn1 ) - { - CMCPosition ePos = maColMixCtrl.GetCMCPosition(); - if( ePos != CMC_OTHER ) - maColMixCtrl.SetColor( ePos, maColor ); - } - else if( p == &maBtn2 ) - { - sal_uInt16 nPos = maColMixCtrl.GetSelectItemId(); - maColor = maColMixCtrl.GetItemColor( nPos ); - maCtlColor.SetColor( maColor ); - ColorModifyHdl( &maCtlColor ); - } - - return 0; + return maColor; } // ----------------------------------------------------------------------- -IMPL_LINK( SvColorDialog, ClickMixCtrlHdl, void *, EMPTYARG ) -{ - sal_uInt16 nPos = maColMixCtrl.GetSelectItemId(); - CMCPosition ePos = maColMixCtrl.GetCMCPosition(); - - if( ePos != CMC_OTHER ) - maColMixCtrl.SetColor( ePos, maColor ); - else + +void SvColorDialog::SetMode( sal_Int16 eMode ) +{ + meMode = eMode; +} + +// ----------------------------------------------------------------------- + +short SvColorDialog::Execute() +{ + short ret = 0; + try + { + const OUString sColor( RTL_CONSTASCII_USTRINGPARAM( "Color" ) ); + Reference< XMultiServiceFactory > xSMGR( ::comphelper::getProcessServiceFactory(), UNO_QUERY_THROW ); + + Reference< com::sun::star::awt::XWindow > xParent( VCLUnoHelper::GetInterface( mpParent ) ); + + Sequence< Any > args(1); + args[0] = Any( xParent ); + + Reference< XExecutableDialog > xDialog( xSMGR->createInstanceWithArguments(::rtl::OUString::createFromAscii("com.sun.star.cui.ColorPicker"), args), UNO_QUERY_THROW ); + Reference< XPropertyAccess > xPropertyAccess( xDialog, UNO_QUERY_THROW ); + + Sequence< PropertyValue > props( 2 ); + props[0].Name = sColor; + props[0].Value <<= (sal_Int32) maColor.GetColor(); + props[1].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "Mode" ) ); + props[1].Value <<= (sal_Int16) meMode; + + xPropertyAccess->setPropertyValues( props ); + + ret = xDialog->execute(); + + if( ret ) + { + props = xPropertyAccess->getPropertyValues(); + for( sal_Int32 n = 0; n < props.getLength(); n++ ) + { + if( props[n].Name.equals( sColor ) ) + { + sal_Int32 nColor = 0; + if( props[n].Value >>= nColor ) + { + maColor.SetColor( nColor ); + } + + } + } + } + } + catch(Exception&) { - maColor = maColMixCtrl.GetItemColor( nPos ); - maCtlColor.SetColor( maColor ); - ColorModifyHdl( &maCtlColor ); + OSL_ASSERT(false); } - - return 0; + + return ret; } // ----------------------------------------------------------------------- -IMPL_LINK( SvColorDialog, SelectMixCtrlHdl, void *, EMPTYARG ) -{ - //sal_uInt16 nPos = maColMixCtrl.GetSelectItemId(); - //maFtRGB.SetText( maColMixCtrl.GetItemText( nPos ) ); - - CMCPosition ePos = maColMixCtrl.GetCMCPosition(); - if( ePos == CMC_OTHER ) - maBtn1.Enable( sal_False ); - else - maBtn1.Enable(); - - return 0; -} - -// ----------------------------------------------------------------------- -short SvColorDialog::Execute() -{ - Initialize(); - - short nRet = ModalDialog::Execute(); - - return( nRet ); -} - +// eof Modified: incubator/ooo/trunk/main/tools/inc/tools/color.hxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/tools/inc/tools/color.hxx?rev=1239729&r1=1239728&r2=1239729&view=diff ============================================================================== --- incubator/ooo/trunk/main/tools/inc/tools/color.hxx (original) +++ incubator/ooo/trunk/main/tools/inc/tools/color.hxx Thu Feb 2 17:19:13 2012 @@ -174,10 +174,14 @@ public: static ColorData HSBtoRGB( sal_uInt16 nHue, sal_uInt16 nSat, sal_uInt16 nBri ); void RGBtoHSB( sal_uInt16& nHue, sal_uInt16& nSat, sal_uInt16& nBri ) const; - sal_Bool operator==( const Color& rColor ) const - { return (mnColor == rColor.mnColor); } - sal_Bool operator!=( const Color& rColor ) const - { return !(Color::operator==( rColor )); } + // the range for cymk is 0 to 1.0 + static ColorData CMYKtoRGB( double fCyan, double fMagenta, double fYellow, double fKey ); + void RGBtoCMYK( double& fCyan, double& fMagenta, double& fYellow, double& fKey ); + + sal_Bool operator==( const Color& rColor ) const + { return (mnColor == rColor.mnColor); } + sal_Bool operator!=( const Color& rColor ) const + { return !(Color::operator==( rColor )); } SvStream& Read( SvStream& rIStm, sal_Bool bNewFormat = sal_True ); SvStream& Write( SvStream& rOStm, sal_Bool bNewFormat = sal_True ); Modified: incubator/ooo/trunk/main/tools/source/generic/color.cxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/tools/source/generic/color.cxx?rev=1239729&r1=1239728&r2=1239729&view=diff ============================================================================== --- incubator/ooo/trunk/main/tools/source/generic/color.cxx (original) +++ incubator/ooo/trunk/main/tools/source/generic/color.cxx Thu Feb 2 17:19:13 2012 @@ -259,6 +259,53 @@ ColorData Color::HSBtoRGB( sal_uInt16 nH // ----------------------------------------------------------------------- +// CMYK values from 0 to 1 +ColorData Color::CMYKtoRGB( double fCyan, double fMagenta, double fYellow, double fKey ) +{ + fCyan = (fCyan * ( 1.0 - fKey )) + fKey; + fMagenta = (fMagenta * ( 1.0 - fKey )) + fKey; + fYellow = (fYellow * ( 1.0 - fKey )) + fKey; + + sal_uInt8 nRed = static_cast< sal_uInt8 >( std::max( std::min( ( 1.0 - fCyan ) * 255.0, 255.0), 0.0 ) ); + sal_uInt8 nGreen = static_cast< sal_uInt8 >( std::max( std::min( ( 1.0 - fMagenta ) * 255.0, 255.0), 0.0 ) ); + sal_uInt8 nBlue = static_cast< sal_uInt8 >( std::max( std::min( ( 1.0 - fYellow ) * 255.0, 255.0), 0.0 ) ); + + return RGB_COLORDATA( nRed, nGreen, nBlue ); +} + +// ----------------------------------------------------------------------- + +// RGB values from 0 to 255 +// CMY results from 0 to 1 +void Color::RGBtoCMYK( double& fCyan, double& fMagenta, double& fYellow, double& fKey ) +{ + fCyan = 1 - ( GetRed() / 255.0 ); + fMagenta = 1 - ( GetGreen() / 255.0 ); + fYellow = 1 - ( GetBlue() / 255.0 ); + + //CMYK and CMY values from 0 to 1 + fKey = 1.0; + if( fCyan < fKey ) fKey = fCyan; + if( fMagenta < fKey ) fKey = fMagenta; + if( fYellow < fKey ) fKey = fYellow; + + if ( fKey == 1.0 ) + { + //Black + fCyan = 0.0; + fMagenta = 0.0; + fYellow = 0.0; + } + else + { + fCyan = ( fCyan - fKey ) / ( 1.0 - fKey ); + fMagenta = ( fMagenta - fKey ) / ( 1.0 - fKey ); + fYellow = ( fYellow - fKey ) / ( 1.0 - fKey ); + } +} + +// ----------------------------------------------------------------------- + SvStream& Color::Read( SvStream& rIStm, sal_Bool bNewFormat ) { if ( bNewFormat )
