xref: /aoo41x/main/cui/source/dialogs/colorpicker.cxx (revision ae2dc0fa)
1b2b569f2SArmin Le Grand /**************************************************************
2b2b569f2SArmin Le Grand  *
3b2b569f2SArmin Le Grand  * Licensed to the Apache Software Foundation (ASF) under one
4b2b569f2SArmin Le Grand  * or more contributor license agreements.  See the NOTICE file
5b2b569f2SArmin Le Grand  * distributed with this work for additional information
6b2b569f2SArmin Le Grand  * regarding copyright ownership.  The ASF licenses this file
7b2b569f2SArmin Le Grand  * to you under the Apache License, Version 2.0 (the
8b2b569f2SArmin Le Grand  * "License"); you may not use this file except in compliance
9b2b569f2SArmin Le Grand  * with the License.  You may obtain a copy of the License at
10b2b569f2SArmin Le Grand  *
11b2b569f2SArmin Le Grand  *   http://www.apache.org/licenses/LICENSE-2.0
12b2b569f2SArmin Le Grand  *
13b2b569f2SArmin Le Grand  * Unless required by applicable law or agreed to in writing,
14b2b569f2SArmin Le Grand  * software distributed under the License is distributed on an
15b2b569f2SArmin Le Grand  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16b2b569f2SArmin Le Grand  * KIND, either express or implied.  See the License for the
17b2b569f2SArmin Le Grand  * specific language governing permissions and limitations
18b2b569f2SArmin Le Grand  * under the License.
19b2b569f2SArmin Le Grand  *
20b2b569f2SArmin Le Grand  *************************************************************/
21e0dd4dc1SAriel Constenla-Haile 
22b2b569f2SArmin Le Grand // MARKER(update_precomp.py): autogen include statement, do not remove
23b2b569f2SArmin Le Grand #include "precompiled_cui.hxx"
24e0dd4dc1SAriel Constenla-Haile 
25e0dd4dc1SAriel Constenla-Haile #include <com/sun/star/uno/XComponentContext.hpp>
26e0dd4dc1SAriel Constenla-Haile #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
27e0dd4dc1SAriel Constenla-Haile #include <com/sun/star/beans/XPropertyAccess.hpp>
28e0dd4dc1SAriel Constenla-Haile #include <com/sun/star/lang/XInitialization.hpp>
29e0dd4dc1SAriel Constenla-Haile #include <com/sun/star/lang/XServiceInfo.hpp>
30e0dd4dc1SAriel Constenla-Haile #include <com/sun/star/datatransfer/XTransferable.hpp>
31e0dd4dc1SAriel Constenla-Haile #include <com/sun/star/datatransfer/clipboard/XClipboard.hpp>
32e0dd4dc1SAriel Constenla-Haile #include <com/sun/star/awt/XWindow.hpp>
33e0dd4dc1SAriel Constenla-Haile #include <cppuhelper/compbase4.hxx>
34e0dd4dc1SAriel Constenla-Haile #include <comphelper/broadcasthelper.hxx>
35e0dd4dc1SAriel Constenla-Haile #include <vcl/dialog.hxx>
36e0dd4dc1SAriel Constenla-Haile #include <vcl/button.hxx>
37e0dd4dc1SAriel Constenla-Haile #include <vcl/fixed.hxx>
38e0dd4dc1SAriel Constenla-Haile #include <vcl/edit.hxx>
39e0dd4dc1SAriel Constenla-Haile #include <vcl/field.hxx>
40e0dd4dc1SAriel Constenla-Haile #include <vcl/bmpacc.hxx>
41e0dd4dc1SAriel Constenla-Haile #include <vcl/decoview.hxx>
42e0dd4dc1SAriel Constenla-Haile #include <vcl/sound.hxx>
43e0dd4dc1SAriel Constenla-Haile #include <vcl/svapp.hxx>
44e0dd4dc1SAriel Constenla-Haile #include <toolkit/helper/vclunohelper.hxx>
45e0dd4dc1SAriel Constenla-Haile #include <sot/exchange.hxx>
46e0dd4dc1SAriel Constenla-Haile #include <sot/formats.hxx>
47e0dd4dc1SAriel Constenla-Haile #include <sax/tools/converter.hxx>
48e0dd4dc1SAriel Constenla-Haile #include "dialmgr.hxx"
49e0dd4dc1SAriel Constenla-Haile #include "colorpicker.hrc"
50e0dd4dc1SAriel Constenla-Haile #include <cmath>
51e0dd4dc1SAriel Constenla-Haile 
52e0dd4dc1SAriel Constenla-Haile using rtl::OUString;
53e0dd4dc1SAriel Constenla-Haile using namespace ::com::sun::star::uno;
54e0dd4dc1SAriel Constenla-Haile using namespace ::com::sun::star::lang;
55e0dd4dc1SAriel Constenla-Haile using namespace ::com::sun::star::ui::dialogs;
56e0dd4dc1SAriel Constenla-Haile using namespace ::com::sun::star::beans;
57e0dd4dc1SAriel Constenla-Haile 
58e0dd4dc1SAriel Constenla-Haile namespace cui
59e0dd4dc1SAriel Constenla-Haile {
60e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORMODE_RGB =  0x10;
61e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORMODE_HSV =  0x20;
62e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORMODE_CMYK = 0x40;
63e0dd4dc1SAriel Constenla-Haile 
64e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORCOMP_RED   = 0x10;
65e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORCOMP_GREEN = 0x11;
66e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORCOMP_BLUE  = 0x12;
67e0dd4dc1SAriel Constenla-Haile 
68e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORCOMP_HUE  = 0x20;
69e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORCOMP_SAT  = 0x21;
70e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORCOMP_BRI  = 0x22;
71e0dd4dc1SAriel Constenla-Haile 
72e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORCOMP_CYAN    = 0x40;
73e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORCOMP_YELLOW  = 0x41;
74e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORCOMP_MAGENTA = 0x42;
75e0dd4dc1SAriel Constenla-Haile const sal_uInt16 COLORCOMP_KEY     = 0x43;
76e0dd4dc1SAriel Constenla-Haile 
77e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
78e0dd4dc1SAriel Constenla-Haile // color space conversion
79e0dd4dc1SAriel Constenla-Haile // RGB  = 0 .. 1
80e0dd4dc1SAriel Constenla-Haile // H    = 0 .. 360
81e0dd4dc1SAriel Constenla-Haile // SV   = 0 .. 1
82e0dd4dc1SAriel Constenla-Haile // CMYK = 0 .. 1
83e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
84e0dd4dc1SAriel Constenla-Haile 
RGBtoHSV(double dR,double dG,double dB,double & dH,double & dS,double & dV)85e0dd4dc1SAriel Constenla-Haile static void RGBtoHSV( double dR, double dG, double dB, double& dH, double& dS, double& dV )
86e0dd4dc1SAriel Constenla-Haile {
87e0dd4dc1SAriel Constenla-Haile     // Brightness = max(R, G, B);
88e0dd4dc1SAriel Constenla-Haile     dV = std::max( dR, std::max( dG, dB ) );
89e0dd4dc1SAriel Constenla-Haile 
90e0dd4dc1SAriel Constenla-Haile     double cDelta = dV - std::min( dR, std::min( dG, dB ) );
91e0dd4dc1SAriel Constenla-Haile 
92e0dd4dc1SAriel Constenla-Haile     // Saturation = max - min / max
93e0dd4dc1SAriel Constenla-Haile     if( dV > 0 )
94e0dd4dc1SAriel Constenla-Haile         dS = cDelta / dV;
95e0dd4dc1SAriel Constenla-Haile     else
96e0dd4dc1SAriel Constenla-Haile         dS = 0.0;
97e0dd4dc1SAriel Constenla-Haile 
98e0dd4dc1SAriel Constenla-Haile     dH = 0.0;
99e0dd4dc1SAriel Constenla-Haile 
100e0dd4dc1SAriel Constenla-Haile     if( !basegfx::fTools::equalZero( dS ) )
101e0dd4dc1SAriel Constenla-Haile     {
102e0dd4dc1SAriel Constenla-Haile         if( basegfx::fTools::equal( dR, dV ) )
103e0dd4dc1SAriel Constenla-Haile         {
104e0dd4dc1SAriel Constenla-Haile             dH = ( dG - dB ) / cDelta;
105e0dd4dc1SAriel Constenla-Haile         }
106e0dd4dc1SAriel Constenla-Haile         else if( basegfx::fTools::equal( dG, dV ) )
107e0dd4dc1SAriel Constenla-Haile         {
108e0dd4dc1SAriel Constenla-Haile             dH = 2.0 + ( dB - dR ) / cDelta;
109e0dd4dc1SAriel Constenla-Haile         }
110e0dd4dc1SAriel Constenla-Haile         else if ( basegfx::fTools::equal( dB, dV ) )
111e0dd4dc1SAriel Constenla-Haile         {
112e0dd4dc1SAriel Constenla-Haile             dH = 4.0 + ( dR - dG ) / cDelta;
113e0dd4dc1SAriel Constenla-Haile         }
114e0dd4dc1SAriel Constenla-Haile         dH *= 60.0;
115e0dd4dc1SAriel Constenla-Haile 
116e0dd4dc1SAriel Constenla-Haile         if( dH < 0.0 )
117e0dd4dc1SAriel Constenla-Haile             dH += 360.0;
118e0dd4dc1SAriel Constenla-Haile     }
119e0dd4dc1SAriel Constenla-Haile }
120e0dd4dc1SAriel Constenla-Haile 
HSVtoRGB(double dH,double dS,double dV,double & dR,double & dG,double & dB)121e0dd4dc1SAriel Constenla-Haile static void HSVtoRGB(double dH, double dS, double dV, double& dR, double& dG, double& dB )
122e0dd4dc1SAriel Constenla-Haile {
123e0dd4dc1SAriel Constenla-Haile     if( basegfx::fTools::equalZero( dS ) )
124e0dd4dc1SAriel Constenla-Haile     {
125e0dd4dc1SAriel Constenla-Haile         dR = dV;
126e0dd4dc1SAriel Constenla-Haile         dG = dV;
127e0dd4dc1SAriel Constenla-Haile         dB = dV;
128e0dd4dc1SAriel Constenla-Haile     }
129e0dd4dc1SAriel Constenla-Haile     else
130e0dd4dc1SAriel Constenla-Haile     {
131e0dd4dc1SAriel Constenla-Haile         if( basegfx::fTools::equal( dH, 360.0 ) )
132e0dd4dc1SAriel Constenla-Haile             dH = 0.0;
133e0dd4dc1SAriel Constenla-Haile         else
134e0dd4dc1SAriel Constenla-Haile             dH /= 60.0;
135e0dd4dc1SAriel Constenla-Haile 
136e0dd4dc1SAriel Constenla-Haile         sal_uInt16 n = (sal_uInt16) dH;
137e0dd4dc1SAriel Constenla-Haile         double f = dH - n;
138e0dd4dc1SAriel Constenla-Haile 
139e0dd4dc1SAriel Constenla-Haile         double a = dV * ( 1.0 - dS );
140e0dd4dc1SAriel Constenla-Haile         double b = dV * ( 1.0 - ( dS * f ) );
141e0dd4dc1SAriel Constenla-Haile         double c = dV * ( 1.0 - ( dS * ( 1.0 - f ) ) );
142e0dd4dc1SAriel Constenla-Haile 
143e0dd4dc1SAriel Constenla-Haile         switch( n )
144e0dd4dc1SAriel Constenla-Haile         {
145e0dd4dc1SAriel Constenla-Haile             case 0: dR = dV; dG = c;  dB = a;  break;
146e0dd4dc1SAriel Constenla-Haile             case 1: dR = b;  dG = dV; dB = a;  break;
147e0dd4dc1SAriel Constenla-Haile             case 2: dR = a;  dG = dV; dB = c;  break;
148e0dd4dc1SAriel Constenla-Haile             case 3: dR = a;  dG = b;  dB = dV; break;
149e0dd4dc1SAriel Constenla-Haile             case 4: dR = c;  dG = a;  dB = dV; break;
150e0dd4dc1SAriel Constenla-Haile             case 5: dR = dV; dG = a;  dB = b;  break;
151e0dd4dc1SAriel Constenla-Haile         }
152e0dd4dc1SAriel Constenla-Haile     }
153e0dd4dc1SAriel Constenla-Haile }
154e0dd4dc1SAriel Constenla-Haile 
155e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
156e0dd4dc1SAriel Constenla-Haile 
157e0dd4dc1SAriel Constenla-Haile // CMYK values from 0 to 1
CMYKtoRGB(double fCyan,double fMagenta,double fYellow,double fKey,double & dR,double & dG,double & dB)158e0dd4dc1SAriel Constenla-Haile static void CMYKtoRGB( double fCyan, double fMagenta, double fYellow, double fKey, double& dR, double& dG, double& dB )
159e0dd4dc1SAriel Constenla-Haile {
160e0dd4dc1SAriel Constenla-Haile     fCyan = (fCyan * ( 1.0 - fKey )) + fKey;
161e0dd4dc1SAriel Constenla-Haile     fMagenta = (fMagenta * ( 1.0 - fKey )) + fKey;
162e0dd4dc1SAriel Constenla-Haile     fYellow = (fYellow * ( 1.0 - fKey )) + fKey;
163e0dd4dc1SAriel Constenla-Haile 
164e0dd4dc1SAriel Constenla-Haile     dR = std::max( std::min( ( 1.0 - fCyan ), 1.0), 0.0 );
165e0dd4dc1SAriel Constenla-Haile     dG = std::max( std::min( ( 1.0 - fMagenta ), 1.0), 0.0 );
166e0dd4dc1SAriel Constenla-Haile     dB = std::max( std::min( ( 1.0 - fYellow ), 1.0), 0.0 );
167e0dd4dc1SAriel Constenla-Haile }
168e0dd4dc1SAriel Constenla-Haile 
169e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
170e0dd4dc1SAriel Constenla-Haile 
171e0dd4dc1SAriel Constenla-Haile // CMY results from 0 to 1
RGBtoCMYK(double dR,double dG,double dB,double & fCyan,double & fMagenta,double & fYellow,double & fKey)172e0dd4dc1SAriel Constenla-Haile static void RGBtoCMYK( double dR, double dG, double dB, double& fCyan, double& fMagenta, double& fYellow, double& fKey )
173e0dd4dc1SAriel Constenla-Haile {
174e0dd4dc1SAriel Constenla-Haile     fCyan = 1 - dR;
175e0dd4dc1SAriel Constenla-Haile     fMagenta = 1 - dG;
176e0dd4dc1SAriel Constenla-Haile     fYellow = 1 - dB;
177e0dd4dc1SAriel Constenla-Haile 
178e0dd4dc1SAriel Constenla-Haile     //CMYK and CMY values from 0 to 1
179e0dd4dc1SAriel Constenla-Haile     fKey = 1.0;
180e0dd4dc1SAriel Constenla-Haile     if( fCyan < fKey ) fKey = fCyan;
181e0dd4dc1SAriel Constenla-Haile     if( fMagenta < fKey ) fKey = fMagenta;
182e0dd4dc1SAriel Constenla-Haile     if( fYellow < fKey ) fKey = fYellow;
183e0dd4dc1SAriel Constenla-Haile 
184e0dd4dc1SAriel Constenla-Haile     if( basegfx::fTools::equal( fKey, 1.0 ) )
185e0dd4dc1SAriel Constenla-Haile     {
186e0dd4dc1SAriel Constenla-Haile         //Black
187e0dd4dc1SAriel Constenla-Haile        fCyan = 0.0;
188e0dd4dc1SAriel Constenla-Haile        fMagenta = 0.0;
189e0dd4dc1SAriel Constenla-Haile        fYellow = 0.0;
190e0dd4dc1SAriel Constenla-Haile     }
191e0dd4dc1SAriel Constenla-Haile     else
192e0dd4dc1SAriel Constenla-Haile     {
193e0dd4dc1SAriel Constenla-Haile        fCyan = ( fCyan - fKey ) / ( 1.0 - fKey );
194e0dd4dc1SAriel Constenla-Haile        fMagenta = ( fMagenta - fKey ) / ( 1.0 - fKey );
195e0dd4dc1SAriel Constenla-Haile        fYellow = ( fYellow - fKey ) / ( 1.0 - fKey );
196e0dd4dc1SAriel Constenla-Haile     }
197e0dd4dc1SAriel Constenla-Haile }
198e0dd4dc1SAriel Constenla-Haile 
199e0dd4dc1SAriel Constenla-Haile // ====================================================================
200e0dd4dc1SAriel Constenla-Haile 
201e0dd4dc1SAriel Constenla-Haile class HexColorControl : public Edit
202e0dd4dc1SAriel Constenla-Haile {
203e0dd4dc1SAriel Constenla-Haile public:
204e0dd4dc1SAriel Constenla-Haile     HexColorControl( Window* pParent, const ResId& rResId );
205e0dd4dc1SAriel Constenla-Haile 
206e0dd4dc1SAriel Constenla-Haile     virtual long PreNotify( NotifyEvent& rNEvt );
207e0dd4dc1SAriel Constenla-Haile     virtual void Paste();
208e0dd4dc1SAriel Constenla-Haile 
209e0dd4dc1SAriel Constenla-Haile     void SetColor( sal_Int32 nColor );
210e0dd4dc1SAriel Constenla-Haile     sal_Int32 GetColor();
211e0dd4dc1SAriel Constenla-Haile 
212e0dd4dc1SAriel Constenla-Haile private:
213e0dd4dc1SAriel Constenla-Haile     bool ImplProcessKeyInput( const KeyEvent& rKEv );
214e0dd4dc1SAriel Constenla-Haile };
215e0dd4dc1SAriel Constenla-Haile 
HexColorControl(Window * pParent,const ResId & rResId)216e0dd4dc1SAriel Constenla-Haile HexColorControl::HexColorControl( Window* pParent, const ResId& rResId )
217e0dd4dc1SAriel Constenla-Haile : Edit( pParent, rResId )
218e0dd4dc1SAriel Constenla-Haile {
219e0dd4dc1SAriel Constenla-Haile     SetMaxTextLen( 6 );
220e0dd4dc1SAriel Constenla-Haile }
221e0dd4dc1SAriel Constenla-Haile 
222e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
223e0dd4dc1SAriel Constenla-Haile 
SetColor(sal_Int32 nColor)224e0dd4dc1SAriel Constenla-Haile void HexColorControl::SetColor( sal_Int32 nColor )
225e0dd4dc1SAriel Constenla-Haile {
226e0dd4dc1SAriel Constenla-Haile     ::rtl::OUStringBuffer aBuffer;
227e0dd4dc1SAriel Constenla-Haile     sax::Converter::convertColor( aBuffer, nColor );
228e0dd4dc1SAriel Constenla-Haile     SetText( aBuffer.makeStringAndClear().copy(1) );
229e0dd4dc1SAriel Constenla-Haile }
230e0dd4dc1SAriel Constenla-Haile 
231e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
232e0dd4dc1SAriel Constenla-Haile 
GetColor()233e0dd4dc1SAriel Constenla-Haile sal_Int32 HexColorControl::GetColor()
234e0dd4dc1SAriel Constenla-Haile {
235e0dd4dc1SAriel Constenla-Haile     sal_Int32 nColor = -1;
236e0dd4dc1SAriel Constenla-Haile 
237e0dd4dc1SAriel Constenla-Haile     OUString aStr( RTL_CONSTASCII_USTRINGPARAM( "#" ) );
238e0dd4dc1SAriel Constenla-Haile     aStr += GetText();
239e0dd4dc1SAriel Constenla-Haile     sal_Int32 nLen = aStr.getLength();
240e0dd4dc1SAriel Constenla-Haile     if( nLen < 7 )
241e0dd4dc1SAriel Constenla-Haile     {
242e0dd4dc1SAriel Constenla-Haile         static const sal_Char* pNullStr = "000000";
243e0dd4dc1SAriel Constenla-Haile         aStr += OUString::createFromAscii( &pNullStr[nLen-1] );
244e0dd4dc1SAriel Constenla-Haile     }
245e0dd4dc1SAriel Constenla-Haile 
246e0dd4dc1SAriel Constenla-Haile     sax::Converter::convertColor( nColor, aStr );
247e0dd4dc1SAriel Constenla-Haile 
248e0dd4dc1SAriel Constenla-Haile     if( nColor == -1 )
249e0dd4dc1SAriel Constenla-Haile         SetControlBackground( Color( COL_RED ) );
250e0dd4dc1SAriel Constenla-Haile     else
251e0dd4dc1SAriel Constenla-Haile         SetControlBackground();
252e0dd4dc1SAriel Constenla-Haile 
253e0dd4dc1SAriel Constenla-Haile     return nColor;
254e0dd4dc1SAriel Constenla-Haile }
255e0dd4dc1SAriel Constenla-Haile 
256e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
257e0dd4dc1SAriel Constenla-Haile 
PreNotify(NotifyEvent & rNEvt)258e0dd4dc1SAriel Constenla-Haile long HexColorControl::PreNotify( NotifyEvent& rNEvt )
259e0dd4dc1SAriel Constenla-Haile {
260e0dd4dc1SAriel Constenla-Haile     if ( (rNEvt.GetType() == EVENT_KEYINPUT) && !rNEvt.GetKeyEvent()->GetKeyCode().IsMod2() )
261e0dd4dc1SAriel Constenla-Haile     {
262e0dd4dc1SAriel Constenla-Haile         if ( ImplProcessKeyInput( *rNEvt.GetKeyEvent() ) )
263e0dd4dc1SAriel Constenla-Haile             return 1;
264e0dd4dc1SAriel Constenla-Haile     }
265e0dd4dc1SAriel Constenla-Haile 
266e0dd4dc1SAriel Constenla-Haile     return Edit::PreNotify( rNEvt );
267e0dd4dc1SAriel Constenla-Haile }
268e0dd4dc1SAriel Constenla-Haile 
269e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
270e0dd4dc1SAriel Constenla-Haile 
Paste()271e0dd4dc1SAriel Constenla-Haile void HexColorControl::Paste()
272e0dd4dc1SAriel Constenla-Haile {
273e0dd4dc1SAriel Constenla-Haile     ::com::sun::star::uno::Reference<com::sun::star::datatransfer::clipboard::XClipboard> aClipboard(GetClipboard());
274e0dd4dc1SAriel Constenla-Haile     if ( aClipboard.is() )
275e0dd4dc1SAriel Constenla-Haile     {
276e0dd4dc1SAriel Constenla-Haile         ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > xDataObj;
277e0dd4dc1SAriel Constenla-Haile 
278e0dd4dc1SAriel Constenla-Haile         const sal_uInt32 nRef = Application::ReleaseSolarMutex();
279e0dd4dc1SAriel Constenla-Haile 
280e0dd4dc1SAriel Constenla-Haile         try
281e0dd4dc1SAriel Constenla-Haile         {
282e0dd4dc1SAriel Constenla-Haile             xDataObj = aClipboard->getContents();
283e0dd4dc1SAriel Constenla-Haile         }
284e0dd4dc1SAriel Constenla-Haile         catch( const ::com::sun::star::uno::Exception& )
285e0dd4dc1SAriel Constenla-Haile         {
286e0dd4dc1SAriel Constenla-Haile         }
287e0dd4dc1SAriel Constenla-Haile 
288e0dd4dc1SAriel Constenla-Haile         Application::AcquireSolarMutex( nRef );
289e0dd4dc1SAriel Constenla-Haile 
290e0dd4dc1SAriel Constenla-Haile         if ( xDataObj.is() )
291e0dd4dc1SAriel Constenla-Haile         {
292e0dd4dc1SAriel Constenla-Haile             ::com::sun::star::datatransfer::DataFlavor aFlavor;
293e0dd4dc1SAriel Constenla-Haile             SotExchange::GetFormatDataFlavor( SOT_FORMAT_STRING, aFlavor );
294e0dd4dc1SAriel Constenla-Haile             try
295e0dd4dc1SAriel Constenla-Haile             {
296e0dd4dc1SAriel Constenla-Haile                 ::com::sun::star::uno::Any aData = xDataObj->getTransferData( aFlavor );
297e0dd4dc1SAriel Constenla-Haile                 ::rtl::OUString aText;
298e0dd4dc1SAriel Constenla-Haile                 aData >>= aText;
299e0dd4dc1SAriel Constenla-Haile 
300e0dd4dc1SAriel Constenla-Haile                 if( aText.getLength() && aText.matchAsciiL( "#", 1, 0 ) )
301e0dd4dc1SAriel Constenla-Haile                     aText = aText.copy(1);
302e0dd4dc1SAriel Constenla-Haile 
303e0dd4dc1SAriel Constenla-Haile                 if( aText.getLength() > 6 )
304e0dd4dc1SAriel Constenla-Haile                     aText = aText.copy( 0, 6 );
305e0dd4dc1SAriel Constenla-Haile 
306e0dd4dc1SAriel Constenla-Haile                 SetText( aText );
307e0dd4dc1SAriel Constenla-Haile             }
308e0dd4dc1SAriel Constenla-Haile             catch( const ::com::sun::star::uno::Exception& )
309e0dd4dc1SAriel Constenla-Haile             {
310e0dd4dc1SAriel Constenla-Haile             }
311e0dd4dc1SAriel Constenla-Haile         }
312e0dd4dc1SAriel Constenla-Haile     }
313e0dd4dc1SAriel Constenla-Haile }
314e0dd4dc1SAriel Constenla-Haile 
315e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
316e0dd4dc1SAriel Constenla-Haile 
ImplProcessKeyInput(const KeyEvent & rKEv)317e0dd4dc1SAriel Constenla-Haile bool HexColorControl::ImplProcessKeyInput( const KeyEvent& rKEv )
318e0dd4dc1SAriel Constenla-Haile {
319e0dd4dc1SAriel Constenla-Haile     const KeyCode& rKeyCode = rKEv.GetKeyCode();
320e0dd4dc1SAriel Constenla-Haile 
321e0dd4dc1SAriel Constenla-Haile     if( rKeyCode.GetGroup() == KEYGROUP_ALPHA && !rKeyCode.IsMod1() && !rKeyCode.IsMod2() )
322e0dd4dc1SAriel Constenla-Haile     {
323e0dd4dc1SAriel Constenla-Haile         if( (rKeyCode.GetCode() < KEY_A) || (rKeyCode.GetCode() > KEY_F) )
324e0dd4dc1SAriel Constenla-Haile         {
325e0dd4dc1SAriel Constenla-Haile             Sound::Beep();
326e0dd4dc1SAriel Constenla-Haile             return true;
327e0dd4dc1SAriel Constenla-Haile         }
328e0dd4dc1SAriel Constenla-Haile     }
329e0dd4dc1SAriel Constenla-Haile     else if( rKeyCode.GetGroup() == KEYGROUP_NUM )
330e0dd4dc1SAriel Constenla-Haile     {
331e0dd4dc1SAriel Constenla-Haile         if( rKeyCode.IsShift() )
332e0dd4dc1SAriel Constenla-Haile         {
333e0dd4dc1SAriel Constenla-Haile             Sound::Beep();
334e0dd4dc1SAriel Constenla-Haile             return true;
335e0dd4dc1SAriel Constenla-Haile         }
336e0dd4dc1SAriel Constenla-Haile     }
337e0dd4dc1SAriel Constenla-Haile     return false;
338e0dd4dc1SAriel Constenla-Haile }
339e0dd4dc1SAriel Constenla-Haile 
340e0dd4dc1SAriel Constenla-Haile // ====================================================================
341e0dd4dc1SAriel Constenla-Haile 
342e0dd4dc1SAriel Constenla-Haile class ColorPreviewControl : public Control
343e0dd4dc1SAriel Constenla-Haile {
344e0dd4dc1SAriel Constenla-Haile public:
345e0dd4dc1SAriel Constenla-Haile     ColorPreviewControl( Window* pParent, const ResId& rResId );
346e0dd4dc1SAriel Constenla-Haile 
347e0dd4dc1SAriel Constenla-Haile     virtual void        Paint( const Rectangle& rRect );
348e0dd4dc1SAriel Constenla-Haile 
349e0dd4dc1SAriel Constenla-Haile     void SetColor( const Color& rColor );
350e0dd4dc1SAriel Constenla-Haile private:
351e0dd4dc1SAriel Constenla-Haile     Color maColor;
352e0dd4dc1SAriel Constenla-Haile };
353e0dd4dc1SAriel Constenla-Haile 
354e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
355e0dd4dc1SAriel Constenla-Haile 
ColorPreviewControl(Window * pParent,const ResId & rResId)356e0dd4dc1SAriel Constenla-Haile ColorPreviewControl::ColorPreviewControl( Window* pParent, const ResId& rResId )
357e0dd4dc1SAriel Constenla-Haile : Control( pParent, rResId )
358e0dd4dc1SAriel Constenla-Haile {
359e0dd4dc1SAriel Constenla-Haile     SetFillColor( maColor );
360e0dd4dc1SAriel Constenla-Haile     SetLineColor( maColor );
361e0dd4dc1SAriel Constenla-Haile }
362e0dd4dc1SAriel Constenla-Haile 
363e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
364e0dd4dc1SAriel Constenla-Haile 
SetColor(const Color & rCol)365e0dd4dc1SAriel Constenla-Haile void ColorPreviewControl::SetColor( const Color& rCol )
366e0dd4dc1SAriel Constenla-Haile {
367e0dd4dc1SAriel Constenla-Haile     if( rCol != maColor )
368e0dd4dc1SAriel Constenla-Haile     {
369e0dd4dc1SAriel Constenla-Haile         maColor = rCol;
370e0dd4dc1SAriel Constenla-Haile         SetFillColor( maColor );
371e0dd4dc1SAriel Constenla-Haile         SetLineColor( maColor );
372e0dd4dc1SAriel Constenla-Haile         Invalidate();
373e0dd4dc1SAriel Constenla-Haile     }
374e0dd4dc1SAriel Constenla-Haile }
375e0dd4dc1SAriel Constenla-Haile 
376e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
377e0dd4dc1SAriel Constenla-Haile 
Paint(const Rectangle & rRect)378e0dd4dc1SAriel Constenla-Haile void ColorPreviewControl::Paint( const Rectangle& rRect )
379e0dd4dc1SAriel Constenla-Haile {
380e0dd4dc1SAriel Constenla-Haile     DrawRect( rRect );
381e0dd4dc1SAriel Constenla-Haile }
382e0dd4dc1SAriel Constenla-Haile 
383e0dd4dc1SAriel Constenla-Haile // ====================================================================
384e0dd4dc1SAriel Constenla-Haile 
385e0dd4dc1SAriel Constenla-Haile enum ColorMode { HUE, SATURATION, BRIGHTNESS, RED, GREEN, BLUE };
386e0dd4dc1SAriel Constenla-Haile const ColorMode DefaultMode = HUE;
387e0dd4dc1SAriel Constenla-Haile 
388e0dd4dc1SAriel Constenla-Haile class ColorFieldControl : public Control
389e0dd4dc1SAriel Constenla-Haile {
390e0dd4dc1SAriel Constenla-Haile public:
391e0dd4dc1SAriel Constenla-Haile     ColorFieldControl( Window* pParent, const ResId& rResId );
392e0dd4dc1SAriel Constenla-Haile     ~ColorFieldControl();
393e0dd4dc1SAriel Constenla-Haile 
394e0dd4dc1SAriel Constenla-Haile     virtual void        MouseMove( const MouseEvent& rMEvt );
395e0dd4dc1SAriel Constenla-Haile     virtual void        MouseButtonDown( const MouseEvent& rMEvt );
396e0dd4dc1SAriel Constenla-Haile     virtual void        MouseButtonUp( const MouseEvent& rMEvt );
397e0dd4dc1SAriel Constenla-Haile     virtual void        KeyInput( const KeyEvent& rKEvt );
398e0dd4dc1SAriel Constenla-Haile     virtual void        Paint( const Rectangle& rRect );
399e0dd4dc1SAriel Constenla-Haile     virtual void        Resize();
400e0dd4dc1SAriel Constenla-Haile 
401e0dd4dc1SAriel Constenla-Haile     void                UpdateBitmap();
402e0dd4dc1SAriel Constenla-Haile     void                ShowPosition( const Point& rPos, bool bUpdate );
403e0dd4dc1SAriel Constenla-Haile     void                UpdatePosition();
404e0dd4dc1SAriel Constenla-Haile     void                Modify();
405e0dd4dc1SAriel Constenla-Haile 
406e0dd4dc1SAriel Constenla-Haile     void                SetValues( Color aColor, ColorMode eMode, double x, double y );
407e0dd4dc1SAriel Constenla-Haile     double              GetX();
408e0dd4dc1SAriel Constenla-Haile     double              GetY();
409e0dd4dc1SAriel Constenla-Haile 
410e0dd4dc1SAriel Constenla-Haile     void                KeyMove( int dx, int dy );
411e0dd4dc1SAriel Constenla-Haile 
SetModifyHdl(Link & rLink)412e0dd4dc1SAriel Constenla-Haile     void                SetModifyHdl( Link& rLink ) { maModifyHdl = rLink; }
413e0dd4dc1SAriel Constenla-Haile 
414e0dd4dc1SAriel Constenla-Haile private:
415e0dd4dc1SAriel Constenla-Haile     Link maModifyHdl;
416e0dd4dc1SAriel Constenla-Haile     ColorMode meMode;
417e0dd4dc1SAriel Constenla-Haile     Color maColor;
418e0dd4dc1SAriel Constenla-Haile     double mdX;
419e0dd4dc1SAriel Constenla-Haile     double mdY;
420e0dd4dc1SAriel Constenla-Haile     Point maPosition;
421e0dd4dc1SAriel Constenla-Haile     Bitmap* mpBitmap;
422e0dd4dc1SAriel Constenla-Haile     std::vector< sal_uInt8 > maRGB_Horiz;
423e0dd4dc1SAriel Constenla-Haile     std::vector< sal_uInt16 > maGrad_Horiz;
424e0dd4dc1SAriel Constenla-Haile     std::vector< sal_uInt16 > maPercent_Horiz;
425e0dd4dc1SAriel Constenla-Haile     std::vector< sal_uInt8 > maRGB_Vert;
426e0dd4dc1SAriel Constenla-Haile     std::vector< sal_uInt16 > maPercent_Vert;
427e0dd4dc1SAriel Constenla-Haile     bool mbInit;
428e0dd4dc1SAriel Constenla-Haile };
429e0dd4dc1SAriel Constenla-Haile 
430e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
431e0dd4dc1SAriel Constenla-Haile 
ColorFieldControl(Window * pParent,const ResId & rResId)432e0dd4dc1SAriel Constenla-Haile ColorFieldControl::ColorFieldControl( Window* pParent, const ResId& rResId )
433e0dd4dc1SAriel Constenla-Haile : Control( pParent, rResId )
434e0dd4dc1SAriel Constenla-Haile , meMode( DefaultMode )
435e0dd4dc1SAriel Constenla-Haile , mdX( -1.0 )
436e0dd4dc1SAriel Constenla-Haile , mdY( -1.0 )
437e0dd4dc1SAriel Constenla-Haile , mpBitmap( 0 )
438e0dd4dc1SAriel Constenla-Haile , mbInit( false )
439e0dd4dc1SAriel Constenla-Haile {
440e0dd4dc1SAriel Constenla-Haile     SetControlBackground();
441e0dd4dc1SAriel Constenla-Haile }
442e0dd4dc1SAriel Constenla-Haile 
443e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
444e0dd4dc1SAriel Constenla-Haile 
~ColorFieldControl()445e0dd4dc1SAriel Constenla-Haile ColorFieldControl::~ColorFieldControl()
446e0dd4dc1SAriel Constenla-Haile {
447e0dd4dc1SAriel Constenla-Haile     delete mpBitmap;
448e0dd4dc1SAriel Constenla-Haile }
449e0dd4dc1SAriel Constenla-Haile 
450e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
451e0dd4dc1SAriel Constenla-Haile 
UpdateBitmap()452e0dd4dc1SAriel Constenla-Haile void ColorFieldControl::UpdateBitmap()
453e0dd4dc1SAriel Constenla-Haile {
454e0dd4dc1SAriel Constenla-Haile     const Size aSize( GetOutputSizePixel() );
455e0dd4dc1SAriel Constenla-Haile 
456e0dd4dc1SAriel Constenla-Haile     if( mpBitmap && mpBitmap->GetSizePixel() != aSize )
457e0dd4dc1SAriel Constenla-Haile         delete mpBitmap, mpBitmap = NULL;
458e0dd4dc1SAriel Constenla-Haile 
459e0dd4dc1SAriel Constenla-Haile     const sal_Int32 nWidth = aSize.Width();
460e0dd4dc1SAriel Constenla-Haile     const sal_Int32 nHeight = aSize.Height();
461e0dd4dc1SAriel Constenla-Haile 
462e0dd4dc1SAriel Constenla-Haile     if( !mpBitmap )
463e0dd4dc1SAriel Constenla-Haile     {
464e0dd4dc1SAriel Constenla-Haile         mpBitmap = new Bitmap( aSize, 24 );
465e0dd4dc1SAriel Constenla-Haile 
466e0dd4dc1SAriel Constenla-Haile         maRGB_Horiz.resize( nWidth );
467e0dd4dc1SAriel Constenla-Haile         maGrad_Horiz.resize( nWidth );
468e0dd4dc1SAriel Constenla-Haile         maPercent_Horiz.resize( nWidth );
469e0dd4dc1SAriel Constenla-Haile 
470e0dd4dc1SAriel Constenla-Haile         sal_uInt8* pRGB = &(*maRGB_Horiz.begin());
471e0dd4dc1SAriel Constenla-Haile         sal_uInt16* pGrad = &(*maGrad_Horiz.begin());
472e0dd4dc1SAriel Constenla-Haile         sal_uInt16* pPercent = &(*maPercent_Horiz.begin());
473e0dd4dc1SAriel Constenla-Haile 
474e0dd4dc1SAriel Constenla-Haile         for( sal_Int32 x = 0; x < nWidth; x++ )
475e0dd4dc1SAriel Constenla-Haile         {
476e0dd4dc1SAriel Constenla-Haile             *pRGB++ = static_cast< sal_uInt8 >( (x * 256) / nWidth );
477e0dd4dc1SAriel Constenla-Haile             *pGrad++ = static_cast< sal_uInt16 >( (x * 359) / nWidth );
478e0dd4dc1SAriel Constenla-Haile             *pPercent++ = static_cast< sal_uInt16 >( (x * 100) / nWidth );
479e0dd4dc1SAriel Constenla-Haile         }
480e0dd4dc1SAriel Constenla-Haile 
481e0dd4dc1SAriel Constenla-Haile         maRGB_Vert.resize( nHeight );
482e0dd4dc1SAriel Constenla-Haile         maPercent_Vert.resize( nHeight );
483e0dd4dc1SAriel Constenla-Haile 
484e0dd4dc1SAriel Constenla-Haile         pRGB = &(*maRGB_Vert.begin());
485e0dd4dc1SAriel Constenla-Haile         pPercent = &(*maPercent_Vert.begin());
486e0dd4dc1SAriel Constenla-Haile 
487e0dd4dc1SAriel Constenla-Haile         sal_Int32 y = nHeight;
488e0dd4dc1SAriel Constenla-Haile         while( y-- )
489e0dd4dc1SAriel Constenla-Haile         {
490e0dd4dc1SAriel Constenla-Haile             *pRGB++ = static_cast< sal_uInt8 >( (y * 256) / nHeight );
491e0dd4dc1SAriel Constenla-Haile             *pPercent++ = static_cast< sal_uInt16 >( (y * 100) / nHeight );
492e0dd4dc1SAriel Constenla-Haile         }
493e0dd4dc1SAriel Constenla-Haile     }
494e0dd4dc1SAriel Constenla-Haile 
495e0dd4dc1SAriel Constenla-Haile     sal_uInt8* pRGB_Horiz = &(*maRGB_Horiz.begin());
496e0dd4dc1SAriel Constenla-Haile     sal_uInt16* pGrad_Horiz = &(*maGrad_Horiz.begin());
497e0dd4dc1SAriel Constenla-Haile     sal_uInt16* pPercent_Horiz = &(*maPercent_Horiz.begin());
498e0dd4dc1SAriel Constenla-Haile     sal_uInt8* pRGB_Vert = &(*maRGB_Vert.begin());
499e0dd4dc1SAriel Constenla-Haile     sal_uInt16* pPercent_Vert = &(*maPercent_Vert.begin());
500e0dd4dc1SAriel Constenla-Haile 
501e0dd4dc1SAriel Constenla-Haile     BitmapWriteAccess* pWriteAccess = mpBitmap->AcquireWriteAccess();
502e0dd4dc1SAriel Constenla-Haile     if( pWriteAccess )
503e0dd4dc1SAriel Constenla-Haile     {
504e0dd4dc1SAriel Constenla-Haile         BitmapColor aBitmapColor( maColor );
505e0dd4dc1SAriel Constenla-Haile 
506e0dd4dc1SAriel Constenla-Haile         sal_uInt16 nHue, nSat, nBri;
507e0dd4dc1SAriel Constenla-Haile         maColor.RGBtoHSB( nHue, nSat, nBri );
508e0dd4dc1SAriel Constenla-Haile 
509e0dd4dc1SAriel Constenla-Haile         // this has been unlooped for performance reason, please do not merge back!
510e0dd4dc1SAriel Constenla-Haile 
511e0dd4dc1SAriel Constenla-Haile         sal_uInt16 y = nHeight,x;
512e0dd4dc1SAriel Constenla-Haile 
513e0dd4dc1SAriel Constenla-Haile         switch( meMode )
514e0dd4dc1SAriel Constenla-Haile         {
515e0dd4dc1SAriel Constenla-Haile         case HUE:
516e0dd4dc1SAriel Constenla-Haile             while( y-- )
517e0dd4dc1SAriel Constenla-Haile             {
518e0dd4dc1SAriel Constenla-Haile                 nBri = pPercent_Vert[y];
519e0dd4dc1SAriel Constenla-Haile                 x = nWidth;
520e0dd4dc1SAriel Constenla-Haile                 while( x-- )
521e0dd4dc1SAriel Constenla-Haile                 {
522e0dd4dc1SAriel Constenla-Haile                     nSat = pPercent_Horiz[x];
523e0dd4dc1SAriel Constenla-Haile                     pWriteAccess->SetPixel( y, x, BitmapColor( Color( Color::HSBtoRGB( nHue, nSat, nBri ) ) ) );
524e0dd4dc1SAriel Constenla-Haile                 }
525e0dd4dc1SAriel Constenla-Haile             }
526e0dd4dc1SAriel Constenla-Haile             break;
527e0dd4dc1SAriel Constenla-Haile         case SATURATION:
528e0dd4dc1SAriel Constenla-Haile             while( y-- )
529e0dd4dc1SAriel Constenla-Haile             {
530e0dd4dc1SAriel Constenla-Haile                 nBri = pPercent_Vert[y];
531e0dd4dc1SAriel Constenla-Haile                 x = nWidth;
532e0dd4dc1SAriel Constenla-Haile                 while( x-- )
533e0dd4dc1SAriel Constenla-Haile                 {
534e0dd4dc1SAriel Constenla-Haile                     nHue = pGrad_Horiz[x];
535e0dd4dc1SAriel Constenla-Haile                     pWriteAccess->SetPixel( y, x, BitmapColor( Color( Color::HSBtoRGB( nHue, nSat, nBri ) ) ) );
536e0dd4dc1SAriel Constenla-Haile                 }
537e0dd4dc1SAriel Constenla-Haile             }
538e0dd4dc1SAriel Constenla-Haile             break;
539e0dd4dc1SAriel Constenla-Haile         case BRIGHTNESS:
540e0dd4dc1SAriel Constenla-Haile             while( y-- )
541e0dd4dc1SAriel Constenla-Haile             {
542e0dd4dc1SAriel Constenla-Haile                 nSat = pPercent_Vert[y];
543e0dd4dc1SAriel Constenla-Haile                 x = nWidth;
544e0dd4dc1SAriel Constenla-Haile                 while( x-- )
545e0dd4dc1SAriel Constenla-Haile                 {
546e0dd4dc1SAriel Constenla-Haile                     nHue = pGrad_Horiz[x];
547e0dd4dc1SAriel Constenla-Haile                     pWriteAccess->SetPixel( y, x, BitmapColor( Color( Color::HSBtoRGB( nHue, nSat, nBri ) ) ) );
548e0dd4dc1SAriel Constenla-Haile                 }
549e0dd4dc1SAriel Constenla-Haile             }
550e0dd4dc1SAriel Constenla-Haile             break;
551e0dd4dc1SAriel Constenla-Haile         case RED:
552e0dd4dc1SAriel Constenla-Haile             while( y-- )
553e0dd4dc1SAriel Constenla-Haile             {
554e0dd4dc1SAriel Constenla-Haile                 aBitmapColor.SetGreen( pRGB_Vert[y] );
555e0dd4dc1SAriel Constenla-Haile                 x = nWidth;
556e0dd4dc1SAriel Constenla-Haile                 while( x-- )
557e0dd4dc1SAriel Constenla-Haile                 {
558e0dd4dc1SAriel Constenla-Haile                     aBitmapColor.SetBlue( pRGB_Horiz[x] );
559e0dd4dc1SAriel Constenla-Haile                     pWriteAccess->SetPixel( y, x, aBitmapColor );
560e0dd4dc1SAriel Constenla-Haile                 }
561e0dd4dc1SAriel Constenla-Haile             }
562e0dd4dc1SAriel Constenla-Haile             break;
563e0dd4dc1SAriel Constenla-Haile         case GREEN:
564e0dd4dc1SAriel Constenla-Haile             while( y-- )
565e0dd4dc1SAriel Constenla-Haile             {
566e0dd4dc1SAriel Constenla-Haile                 aBitmapColor.SetRed( pRGB_Vert[y] );
567e0dd4dc1SAriel Constenla-Haile                 x = nWidth;
568e0dd4dc1SAriel Constenla-Haile                 while( x-- )
569e0dd4dc1SAriel Constenla-Haile                 {
570e0dd4dc1SAriel Constenla-Haile                     aBitmapColor.SetBlue( pRGB_Horiz[x] );
571e0dd4dc1SAriel Constenla-Haile                     pWriteAccess->SetPixel( y, x, aBitmapColor );
572e0dd4dc1SAriel Constenla-Haile                 }
573e0dd4dc1SAriel Constenla-Haile             }
574e0dd4dc1SAriel Constenla-Haile             break;
575e0dd4dc1SAriel Constenla-Haile         case BLUE:
576e0dd4dc1SAriel Constenla-Haile             while( y-- )
577e0dd4dc1SAriel Constenla-Haile             {
578e0dd4dc1SAriel Constenla-Haile                 aBitmapColor.SetGreen( pRGB_Vert[y] );
579e0dd4dc1SAriel Constenla-Haile                 x = nWidth;
580e0dd4dc1SAriel Constenla-Haile                 while( x-- )
581e0dd4dc1SAriel Constenla-Haile                 {
582e0dd4dc1SAriel Constenla-Haile                     aBitmapColor.SetRed( pRGB_Horiz[x] );
583e0dd4dc1SAriel Constenla-Haile                     pWriteAccess->SetPixel( y, x, aBitmapColor );
584e0dd4dc1SAriel Constenla-Haile                 }
585e0dd4dc1SAriel Constenla-Haile             }
586e0dd4dc1SAriel Constenla-Haile             break;
587e0dd4dc1SAriel Constenla-Haile         }
588e0dd4dc1SAriel Constenla-Haile 
589e0dd4dc1SAriel Constenla-Haile         mpBitmap->ReleaseAccess( pWriteAccess );
590e0dd4dc1SAriel Constenla-Haile     }
591e0dd4dc1SAriel Constenla-Haile }
592e0dd4dc1SAriel Constenla-Haile 
593e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
594e0dd4dc1SAriel Constenla-Haile 
ShowPosition(const Point & rPos,bool bUpdate)595e0dd4dc1SAriel Constenla-Haile void ColorFieldControl::ShowPosition( const Point& rPos, bool bUpdate )
596e0dd4dc1SAriel Constenla-Haile {
597e0dd4dc1SAriel Constenla-Haile     if( !mpBitmap )
598e0dd4dc1SAriel Constenla-Haile     {
599e0dd4dc1SAriel Constenla-Haile         UpdateBitmap();
600e0dd4dc1SAriel Constenla-Haile         Invalidate();
601e0dd4dc1SAriel Constenla-Haile     }
602e0dd4dc1SAriel Constenla-Haile 
603e0dd4dc1SAriel Constenla-Haile     const Size aSize( mpBitmap->GetSizePixel() );
604e0dd4dc1SAriel Constenla-Haile 
605e0dd4dc1SAriel Constenla-Haile     long nX = rPos.X();
606e0dd4dc1SAriel Constenla-Haile     long nY = rPos.Y();
607e0dd4dc1SAriel Constenla-Haile     if( nX < 0L )
608e0dd4dc1SAriel Constenla-Haile         nX = 0L;
609e0dd4dc1SAriel Constenla-Haile     else if( nX >= aSize.Width() )
610e0dd4dc1SAriel Constenla-Haile         nX = aSize.Width() - 1L;
611e0dd4dc1SAriel Constenla-Haile 
612e0dd4dc1SAriel Constenla-Haile     if( nY < 0L )
613e0dd4dc1SAriel Constenla-Haile         nY= 0L;
614e0dd4dc1SAriel Constenla-Haile     else if( nY >= aSize.Height() )
615e0dd4dc1SAriel Constenla-Haile         nY = aSize.Height() - 1L;
616e0dd4dc1SAriel Constenla-Haile 
617e0dd4dc1SAriel Constenla-Haile     Point aPos = maPosition;
618e0dd4dc1SAriel Constenla-Haile     maPosition.X() = nX - 5;
619e0dd4dc1SAriel Constenla-Haile     maPosition.Y() = nY - 5;
620e0dd4dc1SAriel Constenla-Haile     Invalidate( Rectangle( aPos, Size( 11, 11) ) );
621e0dd4dc1SAriel Constenla-Haile     Invalidate( Rectangle( maPosition, Size( 11, 11) ) );
622e0dd4dc1SAriel Constenla-Haile 
623e0dd4dc1SAriel Constenla-Haile     if( bUpdate )
624e0dd4dc1SAriel Constenla-Haile     {
625e0dd4dc1SAriel Constenla-Haile         mdX = (double)nX / (double)(aSize.Width()-1);
626e0dd4dc1SAriel Constenla-Haile         mdY = (double)(aSize.Height()-1-nY) / (double)(aSize.Height()-1);
627e0dd4dc1SAriel Constenla-Haile 
628e0dd4dc1SAriel Constenla-Haile         BitmapReadAccess* pReadAccess = mpBitmap->AcquireReadAccess();
629e0dd4dc1SAriel Constenla-Haile         if( pReadAccess != NULL )
630e0dd4dc1SAriel Constenla-Haile         {
631e0dd4dc1SAriel Constenla-Haile             // mpBitmap always has a bit count of 24 => use of GetPixel(...) is safe
632e0dd4dc1SAriel Constenla-Haile             maColor = pReadAccess->GetPixel( nY, nX );
633e0dd4dc1SAriel Constenla-Haile             mpBitmap->ReleaseAccess( pReadAccess );
634e0dd4dc1SAriel Constenla-Haile             pReadAccess = NULL;
635e0dd4dc1SAriel Constenla-Haile         }
636e0dd4dc1SAriel Constenla-Haile     }
637e0dd4dc1SAriel Constenla-Haile }
638e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
639e0dd4dc1SAriel Constenla-Haile 
MouseMove(const MouseEvent & rMEvt)640e0dd4dc1SAriel Constenla-Haile void ColorFieldControl::MouseMove( const MouseEvent& rMEvt )
641e0dd4dc1SAriel Constenla-Haile {
642e0dd4dc1SAriel Constenla-Haile     if( rMEvt.IsLeft() )
643e0dd4dc1SAriel Constenla-Haile     {
644e0dd4dc1SAriel Constenla-Haile         ShowPosition( rMEvt.GetPosPixel(), true );
645e0dd4dc1SAriel Constenla-Haile         Modify();
646e0dd4dc1SAriel Constenla-Haile     }
647e0dd4dc1SAriel Constenla-Haile }
648e0dd4dc1SAriel Constenla-Haile 
649e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
MouseButtonDown(const MouseEvent & rMEvt)650e0dd4dc1SAriel Constenla-Haile void ColorFieldControl::MouseButtonDown( const MouseEvent& rMEvt )
651e0dd4dc1SAriel Constenla-Haile {
652e0dd4dc1SAriel Constenla-Haile     if( rMEvt.IsLeft() && !rMEvt.IsShift() )
653e0dd4dc1SAriel Constenla-Haile     {
654e0dd4dc1SAriel Constenla-Haile         CaptureMouse();
655e0dd4dc1SAriel Constenla-Haile         ShowPosition( rMEvt.GetPosPixel(), true );
656e0dd4dc1SAriel Constenla-Haile         Modify();
657e0dd4dc1SAriel Constenla-Haile     }
658e0dd4dc1SAriel Constenla-Haile }
659e0dd4dc1SAriel Constenla-Haile 
660e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
MouseButtonUp(const MouseEvent &)661e0dd4dc1SAriel Constenla-Haile void ColorFieldControl::MouseButtonUp( const MouseEvent& )
662e0dd4dc1SAriel Constenla-Haile {
663e0dd4dc1SAriel Constenla-Haile     if( IsMouseCaptured() )
664e0dd4dc1SAriel Constenla-Haile         ReleaseMouse();
665e0dd4dc1SAriel Constenla-Haile }
666e0dd4dc1SAriel Constenla-Haile 
667e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
668e0dd4dc1SAriel Constenla-Haile 
KeyMove(int dx,int dy)669e0dd4dc1SAriel Constenla-Haile void ColorFieldControl::KeyMove( int dx, int dy )
670e0dd4dc1SAriel Constenla-Haile {
671e0dd4dc1SAriel Constenla-Haile     Size aSize( GetOutputSizePixel() );
672e0dd4dc1SAriel Constenla-Haile     Point aPos( mdX * aSize.Width(), (1.0 - mdY) * aSize.Height() );
673e0dd4dc1SAriel Constenla-Haile     aPos.X() += dx;
674e0dd4dc1SAriel Constenla-Haile     aPos.Y() += dy;
675e0dd4dc1SAriel Constenla-Haile     if( aPos.X() < 0 )
676e0dd4dc1SAriel Constenla-Haile         aPos.X() += aSize.Width();
677e0dd4dc1SAriel Constenla-Haile     else if( aPos.X() >= aSize.Width() )
678e0dd4dc1SAriel Constenla-Haile         aPos.X() -= aSize.Width();
679e0dd4dc1SAriel Constenla-Haile 
680e0dd4dc1SAriel Constenla-Haile     if( aPos.Y() < 0 )
681e0dd4dc1SAriel Constenla-Haile         aPos.Y() += aSize.Height();
682e0dd4dc1SAriel Constenla-Haile     else if( aPos.Y() >= aSize.Height() )
683e0dd4dc1SAriel Constenla-Haile         aPos.Y() -= aSize.Height();
684e0dd4dc1SAriel Constenla-Haile 
685e0dd4dc1SAriel Constenla-Haile     ShowPosition( aPos, true );
686e0dd4dc1SAriel Constenla-Haile     Modify();
687e0dd4dc1SAriel Constenla-Haile }
688e0dd4dc1SAriel Constenla-Haile 
689e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
690e0dd4dc1SAriel Constenla-Haile 
KeyInput(const KeyEvent & rKEvt)691e0dd4dc1SAriel Constenla-Haile void ColorFieldControl::KeyInput( const KeyEvent& rKEvt )
692e0dd4dc1SAriel Constenla-Haile {
693e0dd4dc1SAriel Constenla-Haile     bool   bShift = rKEvt.GetKeyCode().IsShift();
694e0dd4dc1SAriel Constenla-Haile     bool   bCtrl = rKEvt.GetKeyCode().IsMod1();
695e0dd4dc1SAriel Constenla-Haile     bool   bAlt = rKEvt.GetKeyCode().IsMod2();
696e0dd4dc1SAriel Constenla-Haile 
697e0dd4dc1SAriel Constenla-Haile     if ( !bAlt && !bShift )
698e0dd4dc1SAriel Constenla-Haile     {
699e0dd4dc1SAriel Constenla-Haile         switch( rKEvt.GetKeyCode().GetCode() )
700e0dd4dc1SAriel Constenla-Haile         {
701e0dd4dc1SAriel Constenla-Haile         case KEY_DOWN:      KeyMove(  0, bCtrl ?  5  :  1 ); return;
702e0dd4dc1SAriel Constenla-Haile         case KEY_UP:        KeyMove(  0, bCtrl ? -5  : -1 ); return;
703e0dd4dc1SAriel Constenla-Haile         case KEY_LEFT:      KeyMove( bCtrl ? -5  : -1,  0 ); return;
704e0dd4dc1SAriel Constenla-Haile         case KEY_RIGHT:     KeyMove( bCtrl ?  5  :  1,  0 ); return;
705e0dd4dc1SAriel Constenla-Haile         }
706e0dd4dc1SAriel Constenla-Haile     }
707e0dd4dc1SAriel Constenla-Haile     Control::KeyInput( rKEvt );
708e0dd4dc1SAriel Constenla-Haile }
709e0dd4dc1SAriel Constenla-Haile 
710e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
711e0dd4dc1SAriel Constenla-Haile 
Paint(const Rectangle & rRect)712e0dd4dc1SAriel Constenla-Haile void ColorFieldControl::Paint( const Rectangle& rRect )
713e0dd4dc1SAriel Constenla-Haile {
714e0dd4dc1SAriel Constenla-Haile     if( !mpBitmap )
715e0dd4dc1SAriel Constenla-Haile         UpdateBitmap();
716e0dd4dc1SAriel Constenla-Haile 
717e0dd4dc1SAriel Constenla-Haile     Bitmap aOutputBitmap( *mpBitmap );
718e0dd4dc1SAriel Constenla-Haile 
719e0dd4dc1SAriel Constenla-Haile     if( GetBitCount() <= 8 )
720e0dd4dc1SAriel Constenla-Haile         aOutputBitmap.Dither();
721e0dd4dc1SAriel Constenla-Haile 
722e0dd4dc1SAriel Constenla-Haile     DrawBitmap( rRect.TopLeft(), rRect.GetSize(), rRect.TopLeft(), rRect.GetSize(), aOutputBitmap );
723e0dd4dc1SAriel Constenla-Haile 
724e0dd4dc1SAriel Constenla-Haile     // draw circle around current color
725e0dd4dc1SAriel Constenla-Haile     if( maColor.IsDark() )
726e0dd4dc1SAriel Constenla-Haile         SetLineColor( COL_WHITE );
727e0dd4dc1SAriel Constenla-Haile     else
728e0dd4dc1SAriel Constenla-Haile         SetLineColor( COL_BLACK );
729e0dd4dc1SAriel Constenla-Haile 
730e0dd4dc1SAriel Constenla-Haile     SetFillColor();
731e0dd4dc1SAriel Constenla-Haile 
732e0dd4dc1SAriel Constenla-Haile     DrawEllipse( Rectangle( maPosition, Size( 11, 11) ) );
733e0dd4dc1SAriel Constenla-Haile }
734e0dd4dc1SAriel Constenla-Haile 
735e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
736e0dd4dc1SAriel Constenla-Haile 
Resize()737e0dd4dc1SAriel Constenla-Haile void ColorFieldControl::Resize()
738e0dd4dc1SAriel Constenla-Haile {
739e0dd4dc1SAriel Constenla-Haile     UpdateBitmap();
740e0dd4dc1SAriel Constenla-Haile     Control::Resize();
741e0dd4dc1SAriel Constenla-Haile }
742e0dd4dc1SAriel Constenla-Haile 
743e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
744e0dd4dc1SAriel Constenla-Haile 
Modify()745e0dd4dc1SAriel Constenla-Haile void ColorFieldControl::Modify()
746e0dd4dc1SAriel Constenla-Haile {
747e0dd4dc1SAriel Constenla-Haile     maModifyHdl.Call( this );
748e0dd4dc1SAriel Constenla-Haile }
749e0dd4dc1SAriel Constenla-Haile 
750e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
751e0dd4dc1SAriel Constenla-Haile 
SetValues(Color aColor,ColorMode eMode,double x,double y)752e0dd4dc1SAriel Constenla-Haile void ColorFieldControl::SetValues( Color aColor, ColorMode eMode, double x, double y )
753e0dd4dc1SAriel Constenla-Haile {
754e0dd4dc1SAriel Constenla-Haile     bool bUpdateBitmap = (maColor!= aColor) || (meMode != eMode);
755e0dd4dc1SAriel Constenla-Haile     if( bUpdateBitmap || (mdX != x) || (mdY != y) )
756e0dd4dc1SAriel Constenla-Haile     {
757e0dd4dc1SAriel Constenla-Haile         maColor = aColor;
758e0dd4dc1SAriel Constenla-Haile         meMode = eMode;
759e0dd4dc1SAriel Constenla-Haile         mdX = x;
760e0dd4dc1SAriel Constenla-Haile         mdY = y;
761e0dd4dc1SAriel Constenla-Haile 
762e0dd4dc1SAriel Constenla-Haile         if( bUpdateBitmap )
763e0dd4dc1SAriel Constenla-Haile             UpdateBitmap();
764e0dd4dc1SAriel Constenla-Haile         UpdatePosition();
765e0dd4dc1SAriel Constenla-Haile         if( bUpdateBitmap )
766e0dd4dc1SAriel Constenla-Haile             Invalidate();
767e0dd4dc1SAriel Constenla-Haile     }
768e0dd4dc1SAriel Constenla-Haile }
769e0dd4dc1SAriel Constenla-Haile 
770e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
771e0dd4dc1SAriel Constenla-Haile 
GetX()772e0dd4dc1SAriel Constenla-Haile double ColorFieldControl::GetX()
773e0dd4dc1SAriel Constenla-Haile {
774e0dd4dc1SAriel Constenla-Haile     return mdX;
775e0dd4dc1SAriel Constenla-Haile }
776e0dd4dc1SAriel Constenla-Haile 
777e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
778e0dd4dc1SAriel Constenla-Haile 
GetY()779e0dd4dc1SAriel Constenla-Haile double ColorFieldControl::GetY()
780e0dd4dc1SAriel Constenla-Haile {
781e0dd4dc1SAriel Constenla-Haile     return mdY;
782e0dd4dc1SAriel Constenla-Haile }
783e0dd4dc1SAriel Constenla-Haile 
784e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
785e0dd4dc1SAriel Constenla-Haile 
UpdatePosition()786e0dd4dc1SAriel Constenla-Haile void ColorFieldControl::UpdatePosition()
787e0dd4dc1SAriel Constenla-Haile {
788e0dd4dc1SAriel Constenla-Haile     Size aSize( GetOutputSizePixel() );
789e0dd4dc1SAriel Constenla-Haile     ShowPosition( Point( mdX * aSize.Width(), (1.0 - mdY) * aSize.Height() ), false );
790e0dd4dc1SAriel Constenla-Haile }
791e0dd4dc1SAriel Constenla-Haile 
792e0dd4dc1SAriel Constenla-Haile // ====================================================================
793e0dd4dc1SAriel Constenla-Haile 
794e0dd4dc1SAriel Constenla-Haile class ColorSliderControl : public Control
795e0dd4dc1SAriel Constenla-Haile {
796e0dd4dc1SAriel Constenla-Haile public:
797e0dd4dc1SAriel Constenla-Haile     ColorSliderControl( Window* pParent, const ResId& rResId );
798e0dd4dc1SAriel Constenla-Haile     ~ColorSliderControl();
799e0dd4dc1SAriel Constenla-Haile 
800e0dd4dc1SAriel Constenla-Haile     virtual void        MouseMove( const MouseEvent& rMEvt );
801e0dd4dc1SAriel Constenla-Haile     virtual void        MouseButtonDown( const MouseEvent& rMEvt );
802e0dd4dc1SAriel Constenla-Haile     virtual void        MouseButtonUp( const MouseEvent& rMEvt );
803e0dd4dc1SAriel Constenla-Haile     virtual void        KeyInput( const KeyEvent& rKEvt );
804e0dd4dc1SAriel Constenla-Haile     virtual void        Paint( const Rectangle& rRect );
805e0dd4dc1SAriel Constenla-Haile     virtual void        Resize();
806e0dd4dc1SAriel Constenla-Haile 
807e0dd4dc1SAriel Constenla-Haile     void                UpdateBitmap();
808e0dd4dc1SAriel Constenla-Haile     void                ChangePosition( long nY );
809e0dd4dc1SAriel Constenla-Haile     void                Modify();
810e0dd4dc1SAriel Constenla-Haile 
811e0dd4dc1SAriel Constenla-Haile     void SetValue( const Color& rColor, ColorMode eMode, double dValue );
GetValue() const812e0dd4dc1SAriel Constenla-Haile     double GetValue() const { return mdValue; }
813e0dd4dc1SAriel Constenla-Haile 
814e0dd4dc1SAriel Constenla-Haile     void                KeyMove( int dy );
815e0dd4dc1SAriel Constenla-Haile 
SetModifyHdl(Link & rLink)816e0dd4dc1SAriel Constenla-Haile     void SetModifyHdl( Link& rLink ) { maModifyHdl = rLink; }
817e0dd4dc1SAriel Constenla-Haile 
GetLevel() const818e0dd4dc1SAriel Constenla-Haile     sal_Int16 GetLevel() const { return mnLevel; }
819e0dd4dc1SAriel Constenla-Haile 
820e0dd4dc1SAriel Constenla-Haile private:
821e0dd4dc1SAriel Constenla-Haile     Link maModifyHdl;
822e0dd4dc1SAriel Constenla-Haile     Color maColor;
823e0dd4dc1SAriel Constenla-Haile     ColorMode meMode;
824e0dd4dc1SAriel Constenla-Haile     Bitmap* mpBitmap;
825e0dd4dc1SAriel Constenla-Haile     sal_Int16 mnLevel;
826e0dd4dc1SAriel Constenla-Haile     double mdValue;
827e0dd4dc1SAriel Constenla-Haile };
828e0dd4dc1SAriel Constenla-Haile 
829e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
830e0dd4dc1SAriel Constenla-Haile 
ColorSliderControl(Window * pParent,const ResId & rResId)831e0dd4dc1SAriel Constenla-Haile ColorSliderControl::ColorSliderControl( Window* pParent, const ResId& rResId )
832e0dd4dc1SAriel Constenla-Haile : Control( pParent, rResId )
833e0dd4dc1SAriel Constenla-Haile , meMode( DefaultMode )
834e0dd4dc1SAriel Constenla-Haile , mpBitmap( 0 )
835e0dd4dc1SAriel Constenla-Haile , mnLevel( 0 )
836e0dd4dc1SAriel Constenla-Haile , mdValue( -1.0 )
837e0dd4dc1SAriel Constenla-Haile {
838e0dd4dc1SAriel Constenla-Haile     SetControlBackground();
839e0dd4dc1SAriel Constenla-Haile }
840e0dd4dc1SAriel Constenla-Haile 
841e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
842e0dd4dc1SAriel Constenla-Haile 
~ColorSliderControl()843e0dd4dc1SAriel Constenla-Haile ColorSliderControl::~ColorSliderControl()
844e0dd4dc1SAriel Constenla-Haile {
845e0dd4dc1SAriel Constenla-Haile     delete mpBitmap;
846e0dd4dc1SAriel Constenla-Haile }
847e0dd4dc1SAriel Constenla-Haile 
848e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
849e0dd4dc1SAriel Constenla-Haile 
UpdateBitmap()850e0dd4dc1SAriel Constenla-Haile void ColorSliderControl::UpdateBitmap()
851e0dd4dc1SAriel Constenla-Haile {
852e0dd4dc1SAriel Constenla-Haile     Size aSize( 1, GetOutputSizePixel().Height() );
853e0dd4dc1SAriel Constenla-Haile 
854e0dd4dc1SAriel Constenla-Haile     if( mpBitmap && mpBitmap->GetSizePixel() != aSize )
855e0dd4dc1SAriel Constenla-Haile         delete mpBitmap, mpBitmap = NULL;
856e0dd4dc1SAriel Constenla-Haile 
857e0dd4dc1SAriel Constenla-Haile     if( !mpBitmap )
858e0dd4dc1SAriel Constenla-Haile         mpBitmap = new Bitmap( aSize, 24 );
859e0dd4dc1SAriel Constenla-Haile 
860e0dd4dc1SAriel Constenla-Haile     BitmapWriteAccess* pWriteAccess = mpBitmap->AcquireWriteAccess();
861e0dd4dc1SAriel Constenla-Haile 
862e0dd4dc1SAriel Constenla-Haile     if( pWriteAccess )
863e0dd4dc1SAriel Constenla-Haile     {
864e0dd4dc1SAriel Constenla-Haile         const long nY = aSize.Height()-1;
865e0dd4dc1SAriel Constenla-Haile 
866e0dd4dc1SAriel Constenla-Haile         BitmapColor aBitmapColor( maColor );
867e0dd4dc1SAriel Constenla-Haile 
868e0dd4dc1SAriel Constenla-Haile         sal_uInt16 nHue, nSat, nBri;
869e0dd4dc1SAriel Constenla-Haile         maColor.RGBtoHSB( nHue, nSat, nBri );
870e0dd4dc1SAriel Constenla-Haile 
871e0dd4dc1SAriel Constenla-Haile         // this has been unlooped for performance reason, please do not merge back!
872e0dd4dc1SAriel Constenla-Haile 
873e0dd4dc1SAriel Constenla-Haile         switch( meMode )
874e0dd4dc1SAriel Constenla-Haile         {
875e0dd4dc1SAriel Constenla-Haile         case HUE:
876e0dd4dc1SAriel Constenla-Haile             nSat = 100;
877e0dd4dc1SAriel Constenla-Haile             nBri = 100;
878e0dd4dc1SAriel Constenla-Haile             for( long y = 0; y <= nY; y++ )
879e0dd4dc1SAriel Constenla-Haile             {
880e0dd4dc1SAriel Constenla-Haile                 nHue = static_cast< sal_uInt16 >( (359 * y) / nY );
881e0dd4dc1SAriel Constenla-Haile                 aBitmapColor = BitmapColor( Color( Color::HSBtoRGB( nHue, nSat, nBri ) ) );
882e0dd4dc1SAriel Constenla-Haile                 pWriteAccess->SetPixel( nY-y, 0, aBitmapColor );
883e0dd4dc1SAriel Constenla-Haile             }
884e0dd4dc1SAriel Constenla-Haile             break;
885e0dd4dc1SAriel Constenla-Haile 
886e0dd4dc1SAriel Constenla-Haile         case SATURATION:
887e0dd4dc1SAriel Constenla-Haile             nBri = std::max( (sal_uInt16)32, nBri );
888e0dd4dc1SAriel Constenla-Haile             for( long y = 0; y <= nY; y++ )
889e0dd4dc1SAriel Constenla-Haile             {
890e0dd4dc1SAriel Constenla-Haile                 nSat = static_cast< sal_uInt16 >( (100 * y) / nY );
891e0dd4dc1SAriel Constenla-Haile                 pWriteAccess->SetPixel( nY-y, 0, BitmapColor( Color( Color::HSBtoRGB( nHue, nSat, nBri ) ) ) );
892e0dd4dc1SAriel Constenla-Haile             }
893e0dd4dc1SAriel Constenla-Haile             break;
894e0dd4dc1SAriel Constenla-Haile 
895e0dd4dc1SAriel Constenla-Haile         case BRIGHTNESS:
896e0dd4dc1SAriel Constenla-Haile             for( long y = 0; y <= nY; y++ )
897e0dd4dc1SAriel Constenla-Haile             {
898e0dd4dc1SAriel Constenla-Haile                 nBri = static_cast< sal_uInt16 >( (100 * y) / nY );
899e0dd4dc1SAriel Constenla-Haile                 pWriteAccess->SetPixel( nY-y, 0, BitmapColor( Color( Color::HSBtoRGB( nHue, nSat, nBri ) ) ) );
900e0dd4dc1SAriel Constenla-Haile             }
901e0dd4dc1SAriel Constenla-Haile             break;
902e0dd4dc1SAriel Constenla-Haile 
903e0dd4dc1SAriel Constenla-Haile         case RED:
904e0dd4dc1SAriel Constenla-Haile             for( long y = 0; y <= nY; y++ )
905e0dd4dc1SAriel Constenla-Haile             {
906e0dd4dc1SAriel Constenla-Haile                 aBitmapColor.SetRed( sal_uInt8( ((long)255 * y) / nY ) );
907e0dd4dc1SAriel Constenla-Haile                 pWriteAccess->SetPixel( nY-y, 0, aBitmapColor );
908e0dd4dc1SAriel Constenla-Haile             }
909e0dd4dc1SAriel Constenla-Haile             break;
910e0dd4dc1SAriel Constenla-Haile 
911e0dd4dc1SAriel Constenla-Haile         case GREEN:
912e0dd4dc1SAriel Constenla-Haile             for( long y = 0; y <= nY; y++ )
913e0dd4dc1SAriel Constenla-Haile             {
914e0dd4dc1SAriel Constenla-Haile                 aBitmapColor.SetGreen( sal_uInt8( ((long)255 * y) / nY ) );
915e0dd4dc1SAriel Constenla-Haile                 pWriteAccess->SetPixel( nY-y, 0, aBitmapColor );
916e0dd4dc1SAriel Constenla-Haile             }
917e0dd4dc1SAriel Constenla-Haile             break;
918e0dd4dc1SAriel Constenla-Haile 
919e0dd4dc1SAriel Constenla-Haile         case BLUE:
920e0dd4dc1SAriel Constenla-Haile             for( long y = 0; y <= nY; y++ )
921e0dd4dc1SAriel Constenla-Haile             {
922e0dd4dc1SAriel Constenla-Haile                 aBitmapColor.SetBlue( sal_uInt8( ((long)255 * y) / nY ) );
923e0dd4dc1SAriel Constenla-Haile                 pWriteAccess->SetPixel( nY-y, 0, aBitmapColor );
924e0dd4dc1SAriel Constenla-Haile             }
925e0dd4dc1SAriel Constenla-Haile             break;
926e0dd4dc1SAriel Constenla-Haile         }
927e0dd4dc1SAriel Constenla-Haile 
928e0dd4dc1SAriel Constenla-Haile         mpBitmap->ReleaseAccess( pWriteAccess );
929e0dd4dc1SAriel Constenla-Haile     }
930e0dd4dc1SAriel Constenla-Haile }
931e0dd4dc1SAriel Constenla-Haile 
932e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
933e0dd4dc1SAriel Constenla-Haile 
ChangePosition(long nY)934e0dd4dc1SAriel Constenla-Haile void ColorSliderControl::ChangePosition( long nY )
935e0dd4dc1SAriel Constenla-Haile {
936e0dd4dc1SAriel Constenla-Haile     const long nHeight = GetOutputSizePixel().Height() - 1;
937e0dd4dc1SAriel Constenla-Haile 
938e0dd4dc1SAriel Constenla-Haile     if( nY < 0L )
939e0dd4dc1SAriel Constenla-Haile         nY = 0;
940e0dd4dc1SAriel Constenla-Haile     else if( nY > nHeight )
941e0dd4dc1SAriel Constenla-Haile         nY = nHeight;
942e0dd4dc1SAriel Constenla-Haile 
943e0dd4dc1SAriel Constenla-Haile     mnLevel = nY;
944e0dd4dc1SAriel Constenla-Haile     mdValue = ((double)(nHeight - nY)) / (double)nHeight;
945e0dd4dc1SAriel Constenla-Haile }
946e0dd4dc1SAriel Constenla-Haile 
947e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
948e0dd4dc1SAriel Constenla-Haile 
MouseMove(const MouseEvent & rMEvt)949e0dd4dc1SAriel Constenla-Haile void ColorSliderControl::MouseMove( const MouseEvent& rMEvt )
950e0dd4dc1SAriel Constenla-Haile {
951e0dd4dc1SAriel Constenla-Haile     if( rMEvt.IsLeft() )
952e0dd4dc1SAriel Constenla-Haile     {
953e0dd4dc1SAriel Constenla-Haile         ChangePosition( rMEvt.GetPosPixel().Y() );
954e0dd4dc1SAriel Constenla-Haile         Modify();
955e0dd4dc1SAriel Constenla-Haile     }
956e0dd4dc1SAriel Constenla-Haile }
957e0dd4dc1SAriel Constenla-Haile 
958e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
MouseButtonDown(const MouseEvent & rMEvt)959e0dd4dc1SAriel Constenla-Haile void ColorSliderControl::MouseButtonDown( const MouseEvent& rMEvt )
960e0dd4dc1SAriel Constenla-Haile {
961e0dd4dc1SAriel Constenla-Haile     if( rMEvt.IsLeft() && !rMEvt.IsShift() )
962e0dd4dc1SAriel Constenla-Haile     {
963e0dd4dc1SAriel Constenla-Haile         CaptureMouse();
964e0dd4dc1SAriel Constenla-Haile         ChangePosition( rMEvt.GetPosPixel().Y() );
965e0dd4dc1SAriel Constenla-Haile         Modify();
966e0dd4dc1SAriel Constenla-Haile     }
967e0dd4dc1SAriel Constenla-Haile }
968e0dd4dc1SAriel Constenla-Haile 
969e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
MouseButtonUp(const MouseEvent &)970e0dd4dc1SAriel Constenla-Haile void ColorSliderControl::MouseButtonUp( const MouseEvent& )
971e0dd4dc1SAriel Constenla-Haile {
972e0dd4dc1SAriel Constenla-Haile     if( IsMouseCaptured() )
973e0dd4dc1SAriel Constenla-Haile         ReleaseMouse();
974e0dd4dc1SAriel Constenla-Haile }
975e0dd4dc1SAriel Constenla-Haile 
976e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
977e0dd4dc1SAriel Constenla-Haile 
KeyMove(int dy)978e0dd4dc1SAriel Constenla-Haile void ColorSliderControl::KeyMove( int dy )
979e0dd4dc1SAriel Constenla-Haile {
980e0dd4dc1SAriel Constenla-Haile     ChangePosition( mnLevel + dy );
981e0dd4dc1SAriel Constenla-Haile     Modify();
982e0dd4dc1SAriel Constenla-Haile }
983e0dd4dc1SAriel Constenla-Haile 
984e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
985e0dd4dc1SAriel Constenla-Haile 
KeyInput(const KeyEvent & rKEvt)986e0dd4dc1SAriel Constenla-Haile void ColorSliderControl::KeyInput( const KeyEvent& rKEvt )
987e0dd4dc1SAriel Constenla-Haile {
988e0dd4dc1SAriel Constenla-Haile     if ( !rKEvt.GetKeyCode().IsMod2() && !rKEvt.GetKeyCode().IsShift() )
989e0dd4dc1SAriel Constenla-Haile     {
990e0dd4dc1SAriel Constenla-Haile         switch( rKEvt.GetKeyCode().GetCode() )
991e0dd4dc1SAriel Constenla-Haile         {
992e0dd4dc1SAriel Constenla-Haile         case KEY_DOWN:      KeyMove(  rKEvt.GetKeyCode().IsMod1() ?  5 :  1 ); return;
993e0dd4dc1SAriel Constenla-Haile         case KEY_UP:        KeyMove(  rKEvt.GetKeyCode().IsMod1() ? -5 : -1 ); return;
994e0dd4dc1SAriel Constenla-Haile         }
995e0dd4dc1SAriel Constenla-Haile     }
996e0dd4dc1SAriel Constenla-Haile 
997e0dd4dc1SAriel Constenla-Haile     Control::KeyInput( rKEvt );
998e0dd4dc1SAriel Constenla-Haile }
999e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
1000e0dd4dc1SAriel Constenla-Haile 
Paint(const Rectangle &)1001e0dd4dc1SAriel Constenla-Haile void ColorSliderControl::Paint( const Rectangle& /*rRect*/ )
1002e0dd4dc1SAriel Constenla-Haile {
1003e0dd4dc1SAriel Constenla-Haile     if( !mpBitmap )
1004e0dd4dc1SAriel Constenla-Haile         UpdateBitmap();
1005e0dd4dc1SAriel Constenla-Haile 
1006e0dd4dc1SAriel Constenla-Haile     const Size aSize( GetOutputSizePixel() );
1007e0dd4dc1SAriel Constenla-Haile 
1008e0dd4dc1SAriel Constenla-Haile     Bitmap aOutputBitmap( *mpBitmap );
1009e0dd4dc1SAriel Constenla-Haile 
1010e0dd4dc1SAriel Constenla-Haile     if( GetBitCount() <= 8 )
1011e0dd4dc1SAriel Constenla-Haile         aOutputBitmap.Dither();
1012e0dd4dc1SAriel Constenla-Haile 
1013e0dd4dc1SAriel Constenla-Haile     Point aPos;
1014e0dd4dc1SAriel Constenla-Haile     int x = aSize.Width();
1015e0dd4dc1SAriel Constenla-Haile     while( x-- )
1016e0dd4dc1SAriel Constenla-Haile     {
1017e0dd4dc1SAriel Constenla-Haile         DrawBitmap( aPos, aOutputBitmap );
1018e0dd4dc1SAriel Constenla-Haile         aPos.X() += 1;
1019e0dd4dc1SAriel Constenla-Haile     }
1020e0dd4dc1SAriel Constenla-Haile }
1021e0dd4dc1SAriel Constenla-Haile 
1022e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
1023e0dd4dc1SAriel Constenla-Haile 
Resize()1024e0dd4dc1SAriel Constenla-Haile void ColorSliderControl::Resize()
1025e0dd4dc1SAriel Constenla-Haile {
1026e0dd4dc1SAriel Constenla-Haile     UpdateBitmap();
1027e0dd4dc1SAriel Constenla-Haile     Control::Resize();
1028e0dd4dc1SAriel Constenla-Haile }
1029e0dd4dc1SAriel Constenla-Haile 
1030e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
1031e0dd4dc1SAriel Constenla-Haile 
Modify()1032e0dd4dc1SAriel Constenla-Haile void ColorSliderControl::Modify()
1033e0dd4dc1SAriel Constenla-Haile {
1034e0dd4dc1SAriel Constenla-Haile     maModifyHdl.Call( this );
1035e0dd4dc1SAriel Constenla-Haile }
1036e0dd4dc1SAriel Constenla-Haile 
1037e0dd4dc1SAriel Constenla-Haile // -----------------------------------------------------------------------
1038e0dd4dc1SAriel Constenla-Haile 
SetValue(const Color & rColor,ColorMode eMode,double dValue)1039e0dd4dc1SAriel Constenla-Haile void ColorSliderControl::SetValue( const Color& rColor, ColorMode eMode, double dValue )
1040e0dd4dc1SAriel Constenla-Haile {
1041e0dd4dc1SAriel Constenla-Haile     bool bUpdateBitmap = (rColor != maColor) || (eMode != meMode);
1042e0dd4dc1SAriel Constenla-Haile     if( bUpdateBitmap || (mdValue != dValue))
1043e0dd4dc1SAriel Constenla-Haile     {
1044e0dd4dc1SAriel Constenla-Haile         maColor = rColor;
1045e0dd4dc1SAriel Constenla-Haile         mdValue = dValue;
1046e0dd4dc1SAriel Constenla-Haile         mnLevel = (1.0-dValue) * GetOutputSizePixel().Height();
1047e0dd4dc1SAriel Constenla-Haile         meMode = eMode;
1048e0dd4dc1SAriel Constenla-Haile         if( bUpdateBitmap )
1049e0dd4dc1SAriel Constenla-Haile             UpdateBitmap();
1050e0dd4dc1SAriel Constenla-Haile         Invalidate();
1051e0dd4dc1SAriel Constenla-Haile     }
1052e0dd4dc1SAriel Constenla-Haile }
1053e0dd4dc1SAriel Constenla-Haile 
1054e0dd4dc1SAriel Constenla-Haile // ====================================================================
1055e0dd4dc1SAriel Constenla-Haile 
1056e0dd4dc1SAriel Constenla-Haile const sal_uInt16 UPDATE_RGB = 0x01;
1057e0dd4dc1SAriel Constenla-Haile const sal_uInt16 UPDATE_CMYK = 0x02;
1058e0dd4dc1SAriel Constenla-Haile const sal_uInt16 UPDATE_HSB = 0x04;
1059e0dd4dc1SAriel Constenla-Haile const sal_uInt16 UPDATE_COLORCHOOSER = 0x08;
1060e0dd4dc1SAriel Constenla-Haile const sal_uInt16 UPDATE_COLORSLIDER = 0x10;
1061e0dd4dc1SAriel Constenla-Haile const sal_uInt16 UPDATE_HEX = 0x20;
1062e0dd4dc1SAriel Constenla-Haile const sal_uInt16 UPDATE_ALL = 0xff;
1063e0dd4dc1SAriel Constenla-Haile 
1064e0dd4dc1SAriel Constenla-Haile class ColorPickerDialog : public ModalDialog
1065e0dd4dc1SAriel Constenla-Haile {
1066e0dd4dc1SAriel Constenla-Haile public:
1067e0dd4dc1SAriel Constenla-Haile     ColorPickerDialog( Window* pParent, sal_Int32 nColor, sal_Int16 nMode );
1068e0dd4dc1SAriel Constenla-Haile 
1069e0dd4dc1SAriel Constenla-Haile     void update_color( sal_uInt16 n = UPDATE_ALL );
1070e0dd4dc1SAriel Constenla-Haile 
1071e0dd4dc1SAriel Constenla-Haile     DECL_LINK( ColorModifyHdl, void * );
1072e0dd4dc1SAriel Constenla-Haile     DECL_LINK( ModeModifyHdl, void * );
1073e0dd4dc1SAriel Constenla-Haile 
1074e0dd4dc1SAriel Constenla-Haile     sal_Int32 GetColor() const;
1075e0dd4dc1SAriel Constenla-Haile 
1076e0dd4dc1SAriel Constenla-Haile     void setColorComponent( sal_uInt16 nComp, double dValue );
1077e0dd4dc1SAriel Constenla-Haile 
1078e0dd4dc1SAriel Constenla-Haile private:
1079e0dd4dc1SAriel Constenla-Haile     Color maPreviousColor;
1080e0dd4dc1SAriel Constenla-Haile     sal_Int16 mnDialogMode;
1081e0dd4dc1SAriel Constenla-Haile     ColorMode meMode;
1082e0dd4dc1SAriel Constenla-Haile 
1083e0dd4dc1SAriel Constenla-Haile     double mdRed, mdGreen, mdBlue;
1084e0dd4dc1SAriel Constenla-Haile     double mdHue, mdSat, mdBri;
1085e0dd4dc1SAriel Constenla-Haile     double mdCyan, mdMagenta, mdYellow, mdKey;
1086e0dd4dc1SAriel Constenla-Haile 
1087e0dd4dc1SAriel Constenla-Haile private:
1088e0dd4dc1SAriel Constenla-Haile     ColorFieldControl  maColorField;
1089e0dd4dc1SAriel Constenla-Haile     ColorSliderControl maColorSlider;
1090e0dd4dc1SAriel Constenla-Haile     ColorPreviewControl maColorPreview;
1091e0dd4dc1SAriel Constenla-Haile     ColorPreviewControl maColorPrevious;
1092e0dd4dc1SAriel Constenla-Haile 
1093e0dd4dc1SAriel Constenla-Haile     FixedImage maFISliderLeft;
1094e0dd4dc1SAriel Constenla-Haile     FixedImage maFISliderRight;
1095e0dd4dc1SAriel Constenla-Haile     Image maSliderImage;
1096e0dd4dc1SAriel Constenla-Haile 
1097e0dd4dc1SAriel Constenla-Haile #if 0
1098e0dd4dc1SAriel Constenla-Haile     ImageButton maBtnPicker;
1099e0dd4dc1SAriel Constenla-Haile #endif
1100e0dd4dc1SAriel Constenla-Haile 
1101e0dd4dc1SAriel Constenla-Haile     FixedLine maFLRGB;
1102e0dd4dc1SAriel Constenla-Haile 
1103e0dd4dc1SAriel Constenla-Haile     RadioButton maRBRed;
1104e0dd4dc1SAriel Constenla-Haile     RadioButton maRBGreen;
1105e0dd4dc1SAriel Constenla-Haile     RadioButton maRBBlue;
1106e0dd4dc1SAriel Constenla-Haile     RadioButton maRBHue;
1107e0dd4dc1SAriel Constenla-Haile     RadioButton maRBSaturation;
1108e0dd4dc1SAriel Constenla-Haile     RadioButton maRBBrightness;
1109e0dd4dc1SAriel Constenla-Haile 
1110e0dd4dc1SAriel Constenla-Haile     FixedText maFTRed;
1111e0dd4dc1SAriel Constenla-Haile     MetricField maMFRed;
1112e0dd4dc1SAriel Constenla-Haile     FixedText maFTGreen;
1113e0dd4dc1SAriel Constenla-Haile     MetricField maMFGreen;
1114e0dd4dc1SAriel Constenla-Haile     FixedText maFTBlue;
1115e0dd4dc1SAriel Constenla-Haile     MetricField maMFBlue;
1116e0dd4dc1SAriel Constenla-Haile     FixedText maFTHex;
1117e0dd4dc1SAriel Constenla-Haile     HexColorControl maEDHex;
1118e0dd4dc1SAriel Constenla-Haile 
1119e0dd4dc1SAriel Constenla-Haile     FixedLine maFLHSB;
1120e0dd4dc1SAriel Constenla-Haile     FixedText maFTHue;
1121e0dd4dc1SAriel Constenla-Haile     MetricField maMFHue;
1122e0dd4dc1SAriel Constenla-Haile     FixedText maFTSaturation;
1123e0dd4dc1SAriel Constenla-Haile     MetricField maMFSaturation;
1124e0dd4dc1SAriel Constenla-Haile     FixedText maFTBrightness;
1125e0dd4dc1SAriel Constenla-Haile     MetricField maMFBrightness;
1126e0dd4dc1SAriel Constenla-Haile 
1127e0dd4dc1SAriel Constenla-Haile     FixedLine maFLCMYK;
1128e0dd4dc1SAriel Constenla-Haile     FixedText maFTCyan;
1129e0dd4dc1SAriel Constenla-Haile     MetricField maMFCyan;
1130e0dd4dc1SAriel Constenla-Haile     FixedText maFTMagenta;
1131e0dd4dc1SAriel Constenla-Haile     MetricField maMFMagenta;
1132e0dd4dc1SAriel Constenla-Haile     FixedText maFTYellow;
1133e0dd4dc1SAriel Constenla-Haile     MetricField maMFYellow;
1134e0dd4dc1SAriel Constenla-Haile     FixedText maFTKey;
1135e0dd4dc1SAriel Constenla-Haile     MetricField maMFKey;
1136e0dd4dc1SAriel Constenla-Haile 
1137e0dd4dc1SAriel Constenla-Haile     FixedLine maFLBottmLine;
1138e0dd4dc1SAriel Constenla-Haile     HelpButton maBTNHelp;
1139e0dd4dc1SAriel Constenla-Haile     OKButton maBTNOk;
1140e0dd4dc1SAriel Constenla-Haile     CancelButton maBTNCancel;
1141e0dd4dc1SAriel Constenla-Haile };
1142e0dd4dc1SAriel Constenla-Haile 
1143e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1144e0dd4dc1SAriel Constenla-Haile 
ColorPickerDialog(Window * pParent,sal_Int32 nColor,sal_Int16 nMode)1145e0dd4dc1SAriel Constenla-Haile ColorPickerDialog::ColorPickerDialog( Window* pParent, sal_Int32 nColor, sal_Int16 nMode )
1146e0dd4dc1SAriel Constenla-Haile : ModalDialog( pParent, CUI_RES( RID_CUI_DIALOG_COLORPICKER ) )
1147e0dd4dc1SAriel Constenla-Haile , maPreviousColor( nColor )
1148e0dd4dc1SAriel Constenla-Haile , mnDialogMode( nMode )
1149e0dd4dc1SAriel Constenla-Haile , meMode( DefaultMode )
1150e0dd4dc1SAriel Constenla-Haile , maColorField( this, CUI_RES( CT_COLORFIELD ) )
1151e0dd4dc1SAriel Constenla-Haile , maColorSlider( this, CUI_RES( CT_COLORSLIDER ) )
1152e0dd4dc1SAriel Constenla-Haile , maColorPreview( this, CUI_RES( CT_PREVIEW ) )
1153e0dd4dc1SAriel Constenla-Haile , maColorPrevious( this, CUI_RES( CT_PREVIOUS ) )
1154e0dd4dc1SAriel Constenla-Haile , maFISliderLeft(  this, CUI_RES( CT_LEFT_SLIDER ) )
1155e0dd4dc1SAriel Constenla-Haile , maFISliderRight( this, CUI_RES( CT_RIGHT_SLIDER ) )
1156e0dd4dc1SAriel Constenla-Haile , maSliderImage( CUI_RES( CT_SLIDERIMG ) )
1157e0dd4dc1SAriel Constenla-Haile #if 0
1158e0dd4dc1SAriel Constenla-Haile , maBtnPicker( this, CUI_RES( PB_PICKER ) )
1159e0dd4dc1SAriel Constenla-Haile #endif
1160e0dd4dc1SAriel Constenla-Haile , maFLRGB( this, CUI_RES( FL_RGB ) )
1161e0dd4dc1SAriel Constenla-Haile , maRBRed( this, CUI_RES( CT_RED ) )
1162e0dd4dc1SAriel Constenla-Haile , maRBGreen( this, CUI_RES( CT_GREEN ) )
1163e0dd4dc1SAriel Constenla-Haile , maRBBlue( this, CUI_RES( CT_BLUE ) )
1164e0dd4dc1SAriel Constenla-Haile , maRBHue( this, CUI_RES( CT_HUE ) )
1165e0dd4dc1SAriel Constenla-Haile , maRBSaturation( this, CUI_RES( CT_SATURATION ) )
1166e0dd4dc1SAriel Constenla-Haile , maRBBrightness( this, CUI_RES( CT_BRIGHTNESS ) )
1167e0dd4dc1SAriel Constenla-Haile , maFTRed( this, CUI_RES( CT_RED ) )
1168e0dd4dc1SAriel Constenla-Haile , maMFRed( this, CUI_RES( CT_RED ) )
1169e0dd4dc1SAriel Constenla-Haile , maFTGreen( this, CUI_RES( CT_GREEN ) )
1170e0dd4dc1SAriel Constenla-Haile , maMFGreen( this, CUI_RES( CT_GREEN ) )
1171e0dd4dc1SAriel Constenla-Haile , maFTBlue( this, CUI_RES( CT_BLUE ) )
1172e0dd4dc1SAriel Constenla-Haile , maMFBlue( this, CUI_RES( CT_BLUE ) )
1173e0dd4dc1SAriel Constenla-Haile , maFTHex( this, CUI_RES( CT_HEX ) )
1174e0dd4dc1SAriel Constenla-Haile , maEDHex( this, CUI_RES( CT_HEX ) )
1175e0dd4dc1SAriel Constenla-Haile , maFLHSB( this, CUI_RES( FL_HSB ) )
1176e0dd4dc1SAriel Constenla-Haile , maFTHue( this, CUI_RES( CT_HUE ) )
1177e0dd4dc1SAriel Constenla-Haile , maMFHue( this, CUI_RES( CT_HUE ) )
1178e0dd4dc1SAriel Constenla-Haile , maFTSaturation( this, CUI_RES( CT_SATURATION ) )
1179e0dd4dc1SAriel Constenla-Haile , maMFSaturation( this, CUI_RES( CT_SATURATION ) )
1180e0dd4dc1SAriel Constenla-Haile , maFTBrightness( this, CUI_RES( CT_BRIGHTNESS ) )
1181e0dd4dc1SAriel Constenla-Haile , maMFBrightness( this, CUI_RES( CT_BRIGHTNESS ) )
1182e0dd4dc1SAriel Constenla-Haile , maFLCMYK( this, CUI_RES( FL_CMYK ) )
1183e0dd4dc1SAriel Constenla-Haile , maFTCyan( this, CUI_RES( CT_CYAN ) )
1184e0dd4dc1SAriel Constenla-Haile , maMFCyan( this, CUI_RES( CT_CYAN ) )
1185e0dd4dc1SAriel Constenla-Haile , maFTMagenta( this, CUI_RES( CT_MAGENTA ) )
1186e0dd4dc1SAriel Constenla-Haile , maMFMagenta( this, CUI_RES( CT_MAGENTA ) )
1187e0dd4dc1SAriel Constenla-Haile , maFTYellow( this, CUI_RES( CT_YELLOW ) )
1188e0dd4dc1SAriel Constenla-Haile , maMFYellow( this, CUI_RES( CT_YELLOW ) )
1189e0dd4dc1SAriel Constenla-Haile , maFTKey( this, CUI_RES( CT_KEY ) )
1190e0dd4dc1SAriel Constenla-Haile , maMFKey( this, CUI_RES( CT_KEY ) )
1191e0dd4dc1SAriel Constenla-Haile 
1192e0dd4dc1SAriel Constenla-Haile , maFLBottmLine( this, CUI_RES( FT_BOTTOMLINE ) )
1193e0dd4dc1SAriel Constenla-Haile , maBTNHelp( this, CUI_RES( BTN_HELP ) )
1194e0dd4dc1SAriel Constenla-Haile , maBTNOk( this, CUI_RES( BTN_OK ) )
1195e0dd4dc1SAriel Constenla-Haile , maBTNCancel( this, CUI_RES( BTN_CANCEL ) )
1196e0dd4dc1SAriel Constenla-Haile {
1197e0dd4dc1SAriel Constenla-Haile     FreeResource();
1198e0dd4dc1SAriel Constenla-Haile 
1199*ae2dc0faSTsutomu Uchino     String sUnitText( (sal_Unicode) 0xb0 );
1200e0dd4dc1SAriel Constenla-Haile 
1201e0dd4dc1SAriel Constenla-Haile     maMFHue.SetCustomUnitText( sUnitText );
1202e0dd4dc1SAriel Constenla-Haile 
1203e0dd4dc1SAriel Constenla-Haile     Link aLink( LINK( this, ColorPickerDialog, ColorModifyHdl ) );
1204e0dd4dc1SAriel Constenla-Haile     maColorField.SetModifyHdl( aLink );
1205e0dd4dc1SAriel Constenla-Haile     maColorSlider.SetModifyHdl( aLink );
1206e0dd4dc1SAriel Constenla-Haile 
1207e0dd4dc1SAriel Constenla-Haile     maMFRed.SetModifyHdl( aLink );
1208e0dd4dc1SAriel Constenla-Haile     maMFGreen.SetModifyHdl( aLink );
1209e0dd4dc1SAriel Constenla-Haile     maMFBlue.SetModifyHdl( aLink );
1210e0dd4dc1SAriel Constenla-Haile 
1211e0dd4dc1SAriel Constenla-Haile     maMFCyan.SetModifyHdl( aLink );
1212e0dd4dc1SAriel Constenla-Haile     maMFMagenta.SetModifyHdl( aLink );
1213e0dd4dc1SAriel Constenla-Haile     maMFYellow.SetModifyHdl( aLink );
1214e0dd4dc1SAriel Constenla-Haile     maMFKey.SetModifyHdl( aLink );
1215e0dd4dc1SAriel Constenla-Haile 
1216e0dd4dc1SAriel Constenla-Haile     maMFHue.SetModifyHdl( aLink );
1217e0dd4dc1SAriel Constenla-Haile     maMFSaturation.SetModifyHdl( aLink );
1218e0dd4dc1SAriel Constenla-Haile     maMFBrightness.SetModifyHdl( aLink );
1219e0dd4dc1SAriel Constenla-Haile 
1220e0dd4dc1SAriel Constenla-Haile     maEDHex.SetModifyHdl( aLink );
1221e0dd4dc1SAriel Constenla-Haile 
1222e0dd4dc1SAriel Constenla-Haile     aLink = LINK( this, ColorPickerDialog, ModeModifyHdl );
1223e0dd4dc1SAriel Constenla-Haile     maRBRed.SetToggleHdl( aLink );
1224e0dd4dc1SAriel Constenla-Haile     maRBGreen.SetToggleHdl( aLink );
1225e0dd4dc1SAriel Constenla-Haile     maRBBlue.SetToggleHdl( aLink );
1226e0dd4dc1SAriel Constenla-Haile     maRBHue.SetToggleHdl( aLink );
1227e0dd4dc1SAriel Constenla-Haile     maRBSaturation.SetToggleHdl( aLink );
1228e0dd4dc1SAriel Constenla-Haile     maRBBrightness.SetToggleHdl( aLink );
1229e0dd4dc1SAriel Constenla-Haile 
1230e0dd4dc1SAriel Constenla-Haile     Image aSliderImage( maSliderImage );
1231e0dd4dc1SAriel Constenla-Haile 
1232e0dd4dc1SAriel Constenla-Haile     maFISliderLeft.SetImage( aSliderImage );
1233e0dd4dc1SAriel Constenla-Haile 
1234e0dd4dc1SAriel Constenla-Haile     BitmapEx aTmpBmp( maSliderImage.GetBitmapEx() );
1235e0dd4dc1SAriel Constenla-Haile     aTmpBmp.Mirror( BMP_MIRROR_HORZ );
1236e0dd4dc1SAriel Constenla-Haile     maFISliderRight.SetImage( Image( aTmpBmp  ) );
1237e0dd4dc1SAriel Constenla-Haile 
1238e0dd4dc1SAriel Constenla-Haile     Size aSize( maSliderImage.GetSizePixel() );
1239e0dd4dc1SAriel Constenla-Haile     maFISliderLeft.SetSizePixel( aSize );
1240e0dd4dc1SAriel Constenla-Haile     maFISliderRight.SetSizePixel( aSize );
1241e0dd4dc1SAriel Constenla-Haile 
1242e0dd4dc1SAriel Constenla-Haile     Point aPos( maColorSlider.GetPosPixel() );
1243e0dd4dc1SAriel Constenla-Haile 
1244e0dd4dc1SAriel Constenla-Haile     aPos.X() -= aSize.Width();
1245e0dd4dc1SAriel Constenla-Haile     aPos.Y() -= aSize.Height() / 2;
1246e0dd4dc1SAriel Constenla-Haile     maFISliderLeft.SetPosPixel( aPos );
1247e0dd4dc1SAriel Constenla-Haile 
1248e0dd4dc1SAriel Constenla-Haile     aPos.X() += aSize.Width() + maColorSlider.GetSizePixel().Width();
1249e0dd4dc1SAriel Constenla-Haile     maFISliderRight.SetPosPixel( aPos );
1250e0dd4dc1SAriel Constenla-Haile 
1251e0dd4dc1SAriel Constenla-Haile     Color aColor( nColor );
1252e0dd4dc1SAriel Constenla-Haile 
1253e0dd4dc1SAriel Constenla-Haile     // modify
1254e0dd4dc1SAriel Constenla-Haile     if( mnDialogMode == 2 )
1255e0dd4dc1SAriel Constenla-Haile     {
1256e0dd4dc1SAriel Constenla-Haile         maColorPreview.SetSizePixel( maColorPrevious.GetSizePixel() );
1257e0dd4dc1SAriel Constenla-Haile         maColorPrevious.SetColor( aColor );
1258e0dd4dc1SAriel Constenla-Haile         maColorPrevious.Show( true );
1259e0dd4dc1SAriel Constenla-Haile     }
1260e0dd4dc1SAriel Constenla-Haile 
1261e0dd4dc1SAriel Constenla-Haile     mdRed = ((double)aColor.GetRed()) / 255.0;
1262e0dd4dc1SAriel Constenla-Haile     mdGreen = ((double)aColor.GetGreen()) / 255.0;
1263e0dd4dc1SAriel Constenla-Haile     mdBlue = ((double)aColor.GetBlue()) / 255.0;
1264e0dd4dc1SAriel Constenla-Haile 
1265e0dd4dc1SAriel Constenla-Haile     RGBtoHSV( mdRed, mdGreen, mdBlue, mdHue, mdSat, mdBri );
1266e0dd4dc1SAriel Constenla-Haile     RGBtoCMYK( mdRed, mdGreen, mdBlue, mdCyan, mdMagenta, mdYellow, mdKey );
1267e0dd4dc1SAriel Constenla-Haile 
1268e0dd4dc1SAriel Constenla-Haile     update_color();
1269e0dd4dc1SAriel Constenla-Haile }
1270e0dd4dc1SAriel Constenla-Haile 
1271e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1272e0dd4dc1SAriel Constenla-Haile 
toInt(double dValue,double bRange)1273e0dd4dc1SAriel Constenla-Haile static int toInt( double dValue, double bRange )
1274e0dd4dc1SAriel Constenla-Haile {
1275e0dd4dc1SAriel Constenla-Haile     return static_cast< int >( std::floor((dValue * bRange) + 0.5 ) );
1276e0dd4dc1SAriel Constenla-Haile }
1277e0dd4dc1SAriel Constenla-Haile 
GetColor() const1278e0dd4dc1SAriel Constenla-Haile sal_Int32 ColorPickerDialog::GetColor() const
1279e0dd4dc1SAriel Constenla-Haile {
1280e0dd4dc1SAriel Constenla-Haile     return Color( toInt(mdRed,255.0), toInt(mdGreen,255.0), toInt(mdBlue,255.0) ).GetColor();
1281e0dd4dc1SAriel Constenla-Haile }
1282e0dd4dc1SAriel Constenla-Haile 
update_color(sal_uInt16 n)1283e0dd4dc1SAriel Constenla-Haile void ColorPickerDialog::update_color( sal_uInt16 n )
1284e0dd4dc1SAriel Constenla-Haile {
1285e0dd4dc1SAriel Constenla-Haile     sal_uInt8 nRed = toInt(mdRed,255.0);
1286e0dd4dc1SAriel Constenla-Haile     sal_uInt8 nGreen = toInt(mdGreen,255.0);
1287e0dd4dc1SAriel Constenla-Haile     sal_uInt8 nBlue = toInt(mdBlue,255.0);
1288e0dd4dc1SAriel Constenla-Haile 
1289e0dd4dc1SAriel Constenla-Haile     Color aColor( nRed, nGreen, nBlue );
1290e0dd4dc1SAriel Constenla-Haile 
1291e0dd4dc1SAriel Constenla-Haile     if( n & UPDATE_RGB ) // update RGB
1292e0dd4dc1SAriel Constenla-Haile     {
1293e0dd4dc1SAriel Constenla-Haile         maMFRed.SetValue( nRed );
1294e0dd4dc1SAriel Constenla-Haile         maMFGreen.SetValue( nGreen );
1295e0dd4dc1SAriel Constenla-Haile         maMFBlue.SetValue( nBlue );
1296e0dd4dc1SAriel Constenla-Haile     }
1297e0dd4dc1SAriel Constenla-Haile 
1298e0dd4dc1SAriel Constenla-Haile     if( n & UPDATE_CMYK ) // update CMYK
1299e0dd4dc1SAriel Constenla-Haile     {
1300e0dd4dc1SAriel Constenla-Haile         maMFCyan.SetValue( toInt( mdCyan, 100.0 ) );
1301e0dd4dc1SAriel Constenla-Haile         maMFMagenta.SetValue( toInt( mdMagenta, 100.0 ) );
1302e0dd4dc1SAriel Constenla-Haile         maMFYellow.SetValue( toInt( mdYellow, 100.0 ) );
1303e0dd4dc1SAriel Constenla-Haile         maMFKey.SetValue( toInt( mdKey, 100.0 ) );
1304e0dd4dc1SAriel Constenla-Haile     }
1305e0dd4dc1SAriel Constenla-Haile 
1306e0dd4dc1SAriel Constenla-Haile     if( n & UPDATE_HSB ) // update HSB
1307e0dd4dc1SAriel Constenla-Haile     {
1308e0dd4dc1SAriel Constenla-Haile         maMFHue.SetValue( toInt( mdHue, 1.0 ) );
1309e0dd4dc1SAriel Constenla-Haile         maMFSaturation.SetValue( toInt( mdSat, 100.0 ) );
1310e0dd4dc1SAriel Constenla-Haile         maMFBrightness.SetValue( toInt( mdBri, 100.0 ) );
1311e0dd4dc1SAriel Constenla-Haile     }
1312e0dd4dc1SAriel Constenla-Haile 
1313e0dd4dc1SAriel Constenla-Haile     if( n & UPDATE_COLORCHOOSER ) // update Color Chooser 1
1314e0dd4dc1SAriel Constenla-Haile     {
1315e0dd4dc1SAriel Constenla-Haile         switch( meMode )
1316e0dd4dc1SAriel Constenla-Haile         {
1317e0dd4dc1SAriel Constenla-Haile         case HUE:           maColorField.SetValues( aColor, meMode, mdSat, mdBri ); break;
1318e0dd4dc1SAriel Constenla-Haile         case SATURATION:    maColorField.SetValues( aColor, meMode, mdHue / 360.0, mdBri ); break;
1319e0dd4dc1SAriel Constenla-Haile         case BRIGHTNESS:    maColorField.SetValues( aColor, meMode, mdHue / 360.0, mdSat ); break;
1320e0dd4dc1SAriel Constenla-Haile         case RED:           maColorField.SetValues( aColor, meMode, mdBlue, mdGreen ); break;
1321e0dd4dc1SAriel Constenla-Haile         case GREEN:         maColorField.SetValues( aColor, meMode, mdBlue, mdRed ); break;
1322e0dd4dc1SAriel Constenla-Haile         case BLUE:          maColorField.SetValues( aColor, meMode, mdRed, mdGreen ); break;
1323e0dd4dc1SAriel Constenla-Haile         }
1324e0dd4dc1SAriel Constenla-Haile     }
1325e0dd4dc1SAriel Constenla-Haile 
1326e0dd4dc1SAriel Constenla-Haile     if( n & UPDATE_COLORSLIDER ) // update Color Chooser 2
1327e0dd4dc1SAriel Constenla-Haile     {
1328e0dd4dc1SAriel Constenla-Haile         switch( meMode )
1329e0dd4dc1SAriel Constenla-Haile         {
1330e0dd4dc1SAriel Constenla-Haile         case HUE:           maColorSlider.SetValue( aColor, meMode, mdHue / 360.0 ); break;
1331e0dd4dc1SAriel Constenla-Haile         case SATURATION:    maColorSlider.SetValue( aColor, meMode, mdSat ); break;
1332e0dd4dc1SAriel Constenla-Haile         case BRIGHTNESS:    maColorSlider.SetValue( aColor, meMode, mdBri ); break;
1333e0dd4dc1SAriel Constenla-Haile         case RED:           maColorSlider.SetValue( aColor, meMode, mdRed ); break;
1334e0dd4dc1SAriel Constenla-Haile         case GREEN:         maColorSlider.SetValue( aColor, meMode, mdGreen ); break;
1335e0dd4dc1SAriel Constenla-Haile         case BLUE:          maColorSlider.SetValue( aColor, meMode, mdBlue ); break;
1336e0dd4dc1SAriel Constenla-Haile         }
1337e0dd4dc1SAriel Constenla-Haile     }
1338e0dd4dc1SAriel Constenla-Haile 
1339e0dd4dc1SAriel Constenla-Haile     if( n & UPDATE_HEX ) // update hex
1340e0dd4dc1SAriel Constenla-Haile     {
1341e0dd4dc1SAriel Constenla-Haile         maEDHex.SetColor( aColor.GetColor()  );
1342e0dd4dc1SAriel Constenla-Haile     }
1343e0dd4dc1SAriel Constenla-Haile 
1344e0dd4dc1SAriel Constenla-Haile     {
1345e0dd4dc1SAriel Constenla-Haile         Point aPos( 0, maColorSlider.GetLevel() + maColorSlider.GetPosPixel().Y() - 1 );
1346e0dd4dc1SAriel Constenla-Haile 
1347e0dd4dc1SAriel Constenla-Haile         aPos.X() = maFISliderLeft.GetPosPixel().X();
1348e0dd4dc1SAriel Constenla-Haile         if( aPos != maFISliderLeft.GetPosPixel() )
1349e0dd4dc1SAriel Constenla-Haile         {
1350e0dd4dc1SAriel Constenla-Haile             maFISliderLeft.SetPosPixel( aPos );
1351e0dd4dc1SAriel Constenla-Haile 
1352e0dd4dc1SAriel Constenla-Haile             aPos.X() = maFISliderRight.GetPosPixel().X();
1353e0dd4dc1SAriel Constenla-Haile             maFISliderRight.SetPosPixel( aPos );
1354e0dd4dc1SAriel Constenla-Haile         }
1355e0dd4dc1SAriel Constenla-Haile     }
1356e0dd4dc1SAriel Constenla-Haile 
1357e0dd4dc1SAriel Constenla-Haile     maColorPreview.SetColor( aColor );
1358e0dd4dc1SAriel Constenla-Haile }
1359e0dd4dc1SAriel Constenla-Haile 
1360e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1361e0dd4dc1SAriel Constenla-Haile 
IMPL_LINK(ColorPickerDialog,ColorModifyHdl,void *,p)1362e0dd4dc1SAriel Constenla-Haile IMPL_LINK( ColorPickerDialog, ColorModifyHdl, void *, p )
1363e0dd4dc1SAriel Constenla-Haile {
1364e0dd4dc1SAriel Constenla-Haile     sal_uInt16 n = 0;
1365e0dd4dc1SAriel Constenla-Haile 
1366e0dd4dc1SAriel Constenla-Haile     if( p == &maColorField )
1367e0dd4dc1SAriel Constenla-Haile     {
1368e0dd4dc1SAriel Constenla-Haile         double x = maColorField.GetX();
1369e0dd4dc1SAriel Constenla-Haile         double y = maColorField.GetY();
1370e0dd4dc1SAriel Constenla-Haile 
1371e0dd4dc1SAriel Constenla-Haile         switch( meMode )
1372e0dd4dc1SAriel Constenla-Haile         {
1373e0dd4dc1SAriel Constenla-Haile         case HUE:           mdSat = x; setColorComponent( COLORCOMP_BRI, y ); break;
1374e0dd4dc1SAriel Constenla-Haile         case SATURATION:    mdHue = x * 360.0; setColorComponent( COLORCOMP_BRI, y ); break;
1375e0dd4dc1SAriel Constenla-Haile         case BRIGHTNESS:    mdHue = x * 360.0; setColorComponent( COLORCOMP_SAT, y ); break;
1376e0dd4dc1SAriel Constenla-Haile         case RED:           mdBlue = x; setColorComponent( COLORCOMP_GREEN, y ); break;
1377e0dd4dc1SAriel Constenla-Haile         case GREEN:         mdBlue = x; setColorComponent( COLORCOMP_RED, y ); break;
1378e0dd4dc1SAriel Constenla-Haile         case BLUE:          mdRed = x; setColorComponent( COLORCOMP_GREEN, y ); break;
1379e0dd4dc1SAriel Constenla-Haile         }
1380e0dd4dc1SAriel Constenla-Haile 
1381e0dd4dc1SAriel Constenla-Haile         n = UPDATE_ALL&~(UPDATE_COLORCHOOSER);
1382e0dd4dc1SAriel Constenla-Haile     }
1383e0dd4dc1SAriel Constenla-Haile     else if( p == &maColorSlider )
1384e0dd4dc1SAriel Constenla-Haile     {
1385e0dd4dc1SAriel Constenla-Haile         double dValue = maColorSlider.GetValue();
1386e0dd4dc1SAriel Constenla-Haile         switch( meMode )
1387e0dd4dc1SAriel Constenla-Haile         {
1388e0dd4dc1SAriel Constenla-Haile         case HUE:           setColorComponent( COLORCOMP_HUE, dValue * 360.0 ); break;
1389e0dd4dc1SAriel Constenla-Haile         case SATURATION:    setColorComponent( COLORCOMP_SAT, dValue ); break;
1390e0dd4dc1SAriel Constenla-Haile         case BRIGHTNESS:    setColorComponent( COLORCOMP_BRI, dValue ); break;
1391e0dd4dc1SAriel Constenla-Haile         case RED:           setColorComponent( COLORCOMP_RED, dValue ); break;
1392e0dd4dc1SAriel Constenla-Haile         case GREEN:         setColorComponent( COLORCOMP_GREEN, dValue ); break;
1393e0dd4dc1SAriel Constenla-Haile         case BLUE:          setColorComponent( COLORCOMP_BLUE, dValue ); break;
1394e0dd4dc1SAriel Constenla-Haile         }
1395e0dd4dc1SAriel Constenla-Haile 
1396e0dd4dc1SAriel Constenla-Haile         n = UPDATE_ALL&~(UPDATE_COLORSLIDER);
1397e0dd4dc1SAriel Constenla-Haile     }
1398e0dd4dc1SAriel Constenla-Haile     else if( p == &maMFRed )
1399e0dd4dc1SAriel Constenla-Haile     {
1400e0dd4dc1SAriel Constenla-Haile         setColorComponent( COLORCOMP_RED, ((double)maMFRed.GetValue()) / 255.0 );
1401e0dd4dc1SAriel Constenla-Haile         n = UPDATE_ALL&~(UPDATE_RGB);
1402e0dd4dc1SAriel Constenla-Haile     }
1403e0dd4dc1SAriel Constenla-Haile     else if( p == &maMFGreen )
1404e0dd4dc1SAriel Constenla-Haile     {
1405e0dd4dc1SAriel Constenla-Haile         setColorComponent( COLORCOMP_GREEN, ((double)maMFGreen.GetValue()) / 255.0 );
1406e0dd4dc1SAriel Constenla-Haile         n = UPDATE_ALL&~(UPDATE_RGB);
1407e0dd4dc1SAriel Constenla-Haile     }
1408e0dd4dc1SAriel Constenla-Haile     else if( p == &maMFBlue )
1409e0dd4dc1SAriel Constenla-Haile     {
1410e0dd4dc1SAriel Constenla-Haile         setColorComponent( COLORCOMP_BLUE, ((double)maMFBlue.GetValue()) / 255.0 );
1411e0dd4dc1SAriel Constenla-Haile         n = UPDATE_ALL&~(UPDATE_RGB);
1412e0dd4dc1SAriel Constenla-Haile     }
1413e0dd4dc1SAriel Constenla-Haile     else if( p == &maMFHue )
1414e0dd4dc1SAriel Constenla-Haile     {
1415e0dd4dc1SAriel Constenla-Haile         setColorComponent( COLORCOMP_HUE, (double)maMFHue.GetValue() );
1416e0dd4dc1SAriel Constenla-Haile         n = UPDATE_ALL&~(UPDATE_HSB);
1417e0dd4dc1SAriel Constenla-Haile     }
1418e0dd4dc1SAriel Constenla-Haile     else if( p == &maMFSaturation )
1419e0dd4dc1SAriel Constenla-Haile     {
1420e0dd4dc1SAriel Constenla-Haile         setColorComponent( COLORCOMP_SAT, ((double)maMFSaturation.GetValue()) / 100.0 );
1421e0dd4dc1SAriel Constenla-Haile         n = UPDATE_ALL&~(UPDATE_HSB);
1422e0dd4dc1SAriel Constenla-Haile     }
1423e0dd4dc1SAriel Constenla-Haile     else if( p == &maMFBrightness )
1424e0dd4dc1SAriel Constenla-Haile     {
1425e0dd4dc1SAriel Constenla-Haile         setColorComponent( COLORCOMP_BRI, ((double)maMFBrightness.GetValue()) / 100.0 );
1426e0dd4dc1SAriel Constenla-Haile         n = UPDATE_ALL&~(UPDATE_HSB);
1427e0dd4dc1SAriel Constenla-Haile     }
1428e0dd4dc1SAriel Constenla-Haile     else if( p == &maMFCyan )
1429e0dd4dc1SAriel Constenla-Haile     {
1430e0dd4dc1SAriel Constenla-Haile         setColorComponent( COLORCOMP_CYAN, ((double)maMFCyan.GetValue()) / 100.0 );
1431e0dd4dc1SAriel Constenla-Haile         n = UPDATE_ALL&~(UPDATE_CMYK);
1432e0dd4dc1SAriel Constenla-Haile     }
1433e0dd4dc1SAriel Constenla-Haile     else if( p == &maMFMagenta )
1434e0dd4dc1SAriel Constenla-Haile     {
1435e0dd4dc1SAriel Constenla-Haile         setColorComponent( COLORCOMP_MAGENTA, ((double)maMFMagenta.GetValue()) / 100.0 );
1436e0dd4dc1SAriel Constenla-Haile         n = UPDATE_ALL&~(UPDATE_CMYK);
1437e0dd4dc1SAriel Constenla-Haile     }
1438e0dd4dc1SAriel Constenla-Haile     else if( p == &maMFYellow )
1439e0dd4dc1SAriel Constenla-Haile     {
1440e0dd4dc1SAriel Constenla-Haile         setColorComponent( COLORCOMP_YELLOW, ((double)maMFYellow.GetValue()) / 100.0 );
1441e0dd4dc1SAriel Constenla-Haile         n = UPDATE_ALL&~(UPDATE_CMYK);
1442e0dd4dc1SAriel Constenla-Haile     }
1443e0dd4dc1SAriel Constenla-Haile     else if( p == &maMFKey )
1444e0dd4dc1SAriel Constenla-Haile     {
1445e0dd4dc1SAriel Constenla-Haile         setColorComponent( COLORCOMP_KEY, ((double)maMFKey.GetValue()) / 100.0 );
1446e0dd4dc1SAriel Constenla-Haile         n = UPDATE_ALL&~(UPDATE_CMYK);
1447e0dd4dc1SAriel Constenla-Haile     }
1448e0dd4dc1SAriel Constenla-Haile     else if( p == &maEDHex )
1449e0dd4dc1SAriel Constenla-Haile     {
1450e0dd4dc1SAriel Constenla-Haile         sal_Int32 nColor = maEDHex.GetColor();
1451e0dd4dc1SAriel Constenla-Haile 
1452e0dd4dc1SAriel Constenla-Haile         if( nColor != -1 )
1453e0dd4dc1SAriel Constenla-Haile         {
1454e0dd4dc1SAriel Constenla-Haile             Color aColor( nColor );
1455e0dd4dc1SAriel Constenla-Haile 
1456e0dd4dc1SAriel Constenla-Haile             if( aColor != GetColor() )
1457e0dd4dc1SAriel Constenla-Haile             {
1458e0dd4dc1SAriel Constenla-Haile                 // #121251# green and blue were wrongly taken
1459e0dd4dc1SAriel Constenla-Haile                 mdRed = ((double)aColor.GetRed()) / 255.0;
1460e0dd4dc1SAriel Constenla-Haile                 mdGreen = ((double)aColor.GetGreen()) / 255.0;
1461e0dd4dc1SAriel Constenla-Haile                 mdBlue = ((double)aColor.GetBlue()) / 255.0;
1462e0dd4dc1SAriel Constenla-Haile 
1463e0dd4dc1SAriel Constenla-Haile                 RGBtoHSV( mdRed, mdGreen, mdBlue, mdHue, mdSat, mdBri );
1464e0dd4dc1SAriel Constenla-Haile                 RGBtoCMYK( mdRed, mdGreen, mdBlue, mdCyan, mdMagenta, mdYellow, mdKey );
1465e0dd4dc1SAriel Constenla-Haile                 n = UPDATE_ALL&~(UPDATE_HEX);
1466e0dd4dc1SAriel Constenla-Haile             }
1467e0dd4dc1SAriel Constenla-Haile         }
1468e0dd4dc1SAriel Constenla-Haile     }
1469e0dd4dc1SAriel Constenla-Haile 
1470e0dd4dc1SAriel Constenla-Haile     if( n )
1471e0dd4dc1SAriel Constenla-Haile         update_color( n );
1472e0dd4dc1SAriel Constenla-Haile 
1473e0dd4dc1SAriel Constenla-Haile     return 0;
1474e0dd4dc1SAriel Constenla-Haile }
1475e0dd4dc1SAriel Constenla-Haile 
1476e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1477e0dd4dc1SAriel Constenla-Haile 
IMPL_LINK(ColorPickerDialog,ModeModifyHdl,void *,EMPTYARG)1478e0dd4dc1SAriel Constenla-Haile IMPL_LINK( ColorPickerDialog, ModeModifyHdl, void *, EMPTYARG )
1479e0dd4dc1SAriel Constenla-Haile {
1480e0dd4dc1SAriel Constenla-Haile     ColorMode eMode = HUE;
1481e0dd4dc1SAriel Constenla-Haile 
1482e0dd4dc1SAriel Constenla-Haile     if( maRBRed.IsChecked() )
1483e0dd4dc1SAriel Constenla-Haile     {
1484e0dd4dc1SAriel Constenla-Haile         eMode = RED;
1485e0dd4dc1SAriel Constenla-Haile     }
1486e0dd4dc1SAriel Constenla-Haile     else if( maRBGreen.IsChecked() )
1487e0dd4dc1SAriel Constenla-Haile     {
1488e0dd4dc1SAriel Constenla-Haile         eMode = GREEN;
1489e0dd4dc1SAriel Constenla-Haile     }
1490e0dd4dc1SAriel Constenla-Haile     else if( maRBBlue.IsChecked() )
1491e0dd4dc1SAriel Constenla-Haile     {
1492e0dd4dc1SAriel Constenla-Haile         eMode = BLUE;
1493e0dd4dc1SAriel Constenla-Haile     }
1494e0dd4dc1SAriel Constenla-Haile     else if( maRBSaturation.IsChecked() )
1495e0dd4dc1SAriel Constenla-Haile     {
1496e0dd4dc1SAriel Constenla-Haile         eMode = SATURATION;
1497e0dd4dc1SAriel Constenla-Haile     }
1498e0dd4dc1SAriel Constenla-Haile     else if( maRBBrightness.IsChecked() )
1499e0dd4dc1SAriel Constenla-Haile     {
1500e0dd4dc1SAriel Constenla-Haile         eMode = BRIGHTNESS;
1501e0dd4dc1SAriel Constenla-Haile     }
1502e0dd4dc1SAriel Constenla-Haile 
1503e0dd4dc1SAriel Constenla-Haile     if( meMode != eMode )
1504e0dd4dc1SAriel Constenla-Haile     {
1505e0dd4dc1SAriel Constenla-Haile         meMode = eMode;
1506e0dd4dc1SAriel Constenla-Haile         update_color( UPDATE_COLORCHOOSER | UPDATE_COLORSLIDER );
1507e0dd4dc1SAriel Constenla-Haile     }
1508e0dd4dc1SAriel Constenla-Haile 
1509e0dd4dc1SAriel Constenla-Haile     return 0;
1510e0dd4dc1SAriel Constenla-Haile }
1511e0dd4dc1SAriel Constenla-Haile 
1512e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1513e0dd4dc1SAriel Constenla-Haile 
setColorComponent(sal_uInt16 nComp,double dValue)1514e0dd4dc1SAriel Constenla-Haile void ColorPickerDialog::setColorComponent( sal_uInt16 nComp, double dValue )
1515e0dd4dc1SAriel Constenla-Haile {
1516e0dd4dc1SAriel Constenla-Haile     switch( nComp )
1517e0dd4dc1SAriel Constenla-Haile     {
1518e0dd4dc1SAriel Constenla-Haile     case COLORCOMP_RED:     mdRed = dValue; break;
1519e0dd4dc1SAriel Constenla-Haile     case COLORCOMP_GREEN:   mdGreen = dValue; break;
1520e0dd4dc1SAriel Constenla-Haile     case COLORCOMP_BLUE:    mdBlue = dValue; break;
1521e0dd4dc1SAriel Constenla-Haile     case COLORCOMP_HUE:     mdHue = dValue; break;
1522e0dd4dc1SAriel Constenla-Haile     case COLORCOMP_SAT:     mdSat = dValue; break;
1523e0dd4dc1SAriel Constenla-Haile     case COLORCOMP_BRI:     mdBri = dValue; break;
1524e0dd4dc1SAriel Constenla-Haile     case COLORCOMP_CYAN:    mdCyan = dValue; break;
1525e0dd4dc1SAriel Constenla-Haile     case COLORCOMP_YELLOW:  mdYellow = dValue; break;
1526e0dd4dc1SAriel Constenla-Haile     case COLORCOMP_MAGENTA: mdMagenta = dValue; break;
1527e0dd4dc1SAriel Constenla-Haile     case COLORCOMP_KEY:     mdKey = dValue; break;
1528e0dd4dc1SAriel Constenla-Haile     }
1529e0dd4dc1SAriel Constenla-Haile 
1530e0dd4dc1SAriel Constenla-Haile     if( nComp & COLORMODE_RGB )
1531e0dd4dc1SAriel Constenla-Haile     {
1532e0dd4dc1SAriel Constenla-Haile         RGBtoHSV( mdRed, mdGreen, mdBlue, mdHue, mdSat, mdBri );
1533e0dd4dc1SAriel Constenla-Haile         RGBtoCMYK( mdRed, mdGreen, mdBlue, mdCyan, mdMagenta, mdYellow, mdKey );
1534e0dd4dc1SAriel Constenla-Haile     }
1535e0dd4dc1SAriel Constenla-Haile     else if( nComp & COLORMODE_HSV )
1536e0dd4dc1SAriel Constenla-Haile     {
1537e0dd4dc1SAriel Constenla-Haile         HSVtoRGB( mdHue, mdSat, mdBri, mdRed, mdGreen, mdBlue );
1538e0dd4dc1SAriel Constenla-Haile         RGBtoCMYK( mdRed, mdGreen, mdBlue, mdCyan, mdMagenta, mdYellow, mdKey );
1539e0dd4dc1SAriel Constenla-Haile     }
1540e0dd4dc1SAriel Constenla-Haile     else
1541e0dd4dc1SAriel Constenla-Haile     {
1542e0dd4dc1SAriel Constenla-Haile         CMYKtoRGB( mdCyan, mdMagenta, mdYellow, mdKey, mdRed, mdGreen, mdBlue );
1543e0dd4dc1SAriel Constenla-Haile         RGBtoHSV( mdRed, mdGreen, mdBlue, mdHue, mdSat, mdBri );
1544e0dd4dc1SAriel Constenla-Haile     }
1545e0dd4dc1SAriel Constenla-Haile }
1546e0dd4dc1SAriel Constenla-Haile 
1547e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1548e0dd4dc1SAriel Constenla-Haile 
1549e0dd4dc1SAriel Constenla-Haile typedef ::cppu::WeakComponentImplHelper4< XServiceInfo, XExecutableDialog, XInitialization, XPropertyAccess > ColorPickerBase;
1550e0dd4dc1SAriel Constenla-Haile 
1551e0dd4dc1SAriel Constenla-Haile class ColorPicker : protected ::comphelper::OBaseMutex,    // Struct for right initalization of mutex member! Must be first of baseclasses.
1552e0dd4dc1SAriel Constenla-Haile                     public ColorPickerBase
1553e0dd4dc1SAriel Constenla-Haile {
1554e0dd4dc1SAriel Constenla-Haile public:
1555e0dd4dc1SAriel Constenla-Haile     ColorPicker( Reference< XComponentContext > const & xContext );
1556e0dd4dc1SAriel Constenla-Haile 
1557e0dd4dc1SAriel Constenla-Haile     // XInitialization
1558e0dd4dc1SAriel Constenla-Haile     virtual void SAL_CALL initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException);
1559e0dd4dc1SAriel Constenla-Haile 
1560e0dd4dc1SAriel Constenla-Haile     // XInitialization
1561e0dd4dc1SAriel Constenla-Haile     virtual OUString SAL_CALL getImplementationName(  ) throw (RuntimeException);
1562e0dd4dc1SAriel Constenla-Haile     virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw (RuntimeException);
1563e0dd4dc1SAriel Constenla-Haile     virtual Sequence< OUString > SAL_CALL getSupportedServiceNames(  ) throw (RuntimeException);
1564e0dd4dc1SAriel Constenla-Haile 
1565e0dd4dc1SAriel Constenla-Haile     // XPropertyAccess
1566e0dd4dc1SAriel Constenla-Haile     virtual Sequence< PropertyValue > SAL_CALL getPropertyValues(  ) throw (RuntimeException);
1567e0dd4dc1SAriel Constenla-Haile     virtual void SAL_CALL setPropertyValues( const Sequence< PropertyValue >& aProps ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException);
1568e0dd4dc1SAriel Constenla-Haile 
1569e0dd4dc1SAriel Constenla-Haile     // XExecutableDialog
1570e0dd4dc1SAriel Constenla-Haile     virtual void SAL_CALL setTitle( const OUString& aTitle ) throw (RuntimeException);
1571e0dd4dc1SAriel Constenla-Haile     virtual sal_Int16 SAL_CALL execute(  ) throw (RuntimeException);
1572e0dd4dc1SAriel Constenla-Haile 
1573e0dd4dc1SAriel Constenla-Haile private:
1574e0dd4dc1SAriel Constenla-Haile     Reference< XComponentContext > mxContext;
1575e0dd4dc1SAriel Constenla-Haile     OUString msTitle;
1576e0dd4dc1SAriel Constenla-Haile     const OUString msColorKey;
1577e0dd4dc1SAriel Constenla-Haile     const OUString msModeKey;
1578e0dd4dc1SAriel Constenla-Haile     sal_Int32 mnColor;
1579e0dd4dc1SAriel Constenla-Haile     sal_Int16 mnMode;
1580e0dd4dc1SAriel Constenla-Haile     Reference< ::com::sun::star::awt::XWindow > mxParent;
1581e0dd4dc1SAriel Constenla-Haile };
1582e0dd4dc1SAriel Constenla-Haile 
1583e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1584e0dd4dc1SAriel Constenla-Haile 
ColorPicker_getImplementationName()1585e0dd4dc1SAriel Constenla-Haile OUString SAL_CALL ColorPicker_getImplementationName()
1586e0dd4dc1SAriel Constenla-Haile {
1587e0dd4dc1SAriel Constenla-Haile     return OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.cui.ColorPicker" ) );
1588e0dd4dc1SAriel Constenla-Haile }
1589e0dd4dc1SAriel Constenla-Haile 
1590e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1591e0dd4dc1SAriel Constenla-Haile 
ColorPicker_createInstance(Reference<XComponentContext> const & xContext)1592e0dd4dc1SAriel Constenla-Haile Reference< XInterface > SAL_CALL ColorPicker_createInstance( Reference< XComponentContext > const & xContext ) SAL_THROW( (Exception) )
1593e0dd4dc1SAriel Constenla-Haile {
1594e0dd4dc1SAriel Constenla-Haile     return static_cast<XWeak*>( new ColorPicker( xContext ) );
1595e0dd4dc1SAriel Constenla-Haile }
1596e0dd4dc1SAriel Constenla-Haile 
1597e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1598e0dd4dc1SAriel Constenla-Haile 
ColorPicker_getSupportedServiceNames()1599e0dd4dc1SAriel Constenla-Haile Sequence< OUString > SAL_CALL ColorPicker_getSupportedServiceNames() throw( RuntimeException )
1600e0dd4dc1SAriel Constenla-Haile {
1601e0dd4dc1SAriel Constenla-Haile     Sequence< OUString > seq(1);
1602e0dd4dc1SAriel Constenla-Haile     seq[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.ColorPicker" ) );
1603e0dd4dc1SAriel Constenla-Haile     return seq;
1604e0dd4dc1SAriel Constenla-Haile }
1605e0dd4dc1SAriel Constenla-Haile 
1606e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1607e0dd4dc1SAriel Constenla-Haile 
ColorPicker(Reference<XComponentContext> const & xContext)1608e0dd4dc1SAriel Constenla-Haile ColorPicker::ColorPicker( Reference< XComponentContext > const & xContext )
1609e0dd4dc1SAriel Constenla-Haile : ColorPickerBase( m_aMutex )
1610e0dd4dc1SAriel Constenla-Haile , mxContext( xContext )
1611e0dd4dc1SAriel Constenla-Haile , msColorKey( RTL_CONSTASCII_USTRINGPARAM( "Color" ) )
1612e0dd4dc1SAriel Constenla-Haile , msModeKey( RTL_CONSTASCII_USTRINGPARAM( "Mode" ) )
1613e0dd4dc1SAriel Constenla-Haile , mnColor( 0 )
1614e0dd4dc1SAriel Constenla-Haile , mnMode( 0 )
1615e0dd4dc1SAriel Constenla-Haile {
1616e0dd4dc1SAriel Constenla-Haile }
1617e0dd4dc1SAriel Constenla-Haile 
1618e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1619e0dd4dc1SAriel Constenla-Haile 
1620e0dd4dc1SAriel Constenla-Haile // XInitialization
initialize(const Sequence<Any> & aArguments)1621e0dd4dc1SAriel Constenla-Haile void SAL_CALL ColorPicker::initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException)
1622e0dd4dc1SAriel Constenla-Haile {
1623e0dd4dc1SAriel Constenla-Haile     if( aArguments.getLength() == 1 )
1624e0dd4dc1SAriel Constenla-Haile     {
1625e0dd4dc1SAriel Constenla-Haile         aArguments[0] >>= mxParent;
1626e0dd4dc1SAriel Constenla-Haile     }
1627e0dd4dc1SAriel Constenla-Haile }
1628e0dd4dc1SAriel Constenla-Haile 
1629e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1630e0dd4dc1SAriel Constenla-Haile 
1631e0dd4dc1SAriel Constenla-Haile // XInitialization
getImplementationName()1632e0dd4dc1SAriel Constenla-Haile OUString SAL_CALL ColorPicker::getImplementationName(  ) throw (RuntimeException)
1633e0dd4dc1SAriel Constenla-Haile {
1634e0dd4dc1SAriel Constenla-Haile     return ColorPicker_getImplementationName();
1635e0dd4dc1SAriel Constenla-Haile }
1636e0dd4dc1SAriel Constenla-Haile 
1637e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1638e0dd4dc1SAriel Constenla-Haile 
supportsService(const OUString & sServiceName)1639e0dd4dc1SAriel Constenla-Haile sal_Bool SAL_CALL ColorPicker::supportsService( const OUString& sServiceName ) throw (RuntimeException)
1640e0dd4dc1SAriel Constenla-Haile {
1641e0dd4dc1SAriel Constenla-Haile     return sServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.ui.dialogs.ColorPicker" ) );
1642e0dd4dc1SAriel Constenla-Haile }
1643e0dd4dc1SAriel Constenla-Haile 
1644e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1645e0dd4dc1SAriel Constenla-Haile 
getSupportedServiceNames()1646e0dd4dc1SAriel Constenla-Haile Sequence< OUString > SAL_CALL ColorPicker::getSupportedServiceNames(  ) throw (RuntimeException)
1647e0dd4dc1SAriel Constenla-Haile {
1648e0dd4dc1SAriel Constenla-Haile     return ColorPicker_getSupportedServiceNames();
1649e0dd4dc1SAriel Constenla-Haile }
1650e0dd4dc1SAriel Constenla-Haile 
1651e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1652e0dd4dc1SAriel Constenla-Haile 
1653e0dd4dc1SAriel Constenla-Haile // XPropertyAccess
getPropertyValues()1654e0dd4dc1SAriel Constenla-Haile Sequence< PropertyValue > SAL_CALL ColorPicker::getPropertyValues(  ) throw (RuntimeException)
1655e0dd4dc1SAriel Constenla-Haile {
1656e0dd4dc1SAriel Constenla-Haile     Sequence< PropertyValue > props(1);
1657e0dd4dc1SAriel Constenla-Haile     props[0].Name = msColorKey;
1658e0dd4dc1SAriel Constenla-Haile     props[0].Value <<= mnColor;
1659e0dd4dc1SAriel Constenla-Haile     return props;
1660e0dd4dc1SAriel Constenla-Haile }
1661e0dd4dc1SAriel Constenla-Haile 
1662e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1663e0dd4dc1SAriel Constenla-Haile 
setPropertyValues(const Sequence<PropertyValue> & aProps)1664e0dd4dc1SAriel Constenla-Haile void SAL_CALL ColorPicker::setPropertyValues( const Sequence< PropertyValue >& aProps ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException)
1665e0dd4dc1SAriel Constenla-Haile {
1666e0dd4dc1SAriel Constenla-Haile     for( sal_Int32 n = 0; n < aProps.getLength(); n++ )
1667e0dd4dc1SAriel Constenla-Haile     {
1668e0dd4dc1SAriel Constenla-Haile         if( aProps[n].Name.equals( msColorKey ) )
1669e0dd4dc1SAriel Constenla-Haile         {
1670e0dd4dc1SAriel Constenla-Haile             aProps[n].Value >>= mnColor;
1671e0dd4dc1SAriel Constenla-Haile         }
1672e0dd4dc1SAriel Constenla-Haile         else if( aProps[n].Name.equals( msModeKey ) )
1673e0dd4dc1SAriel Constenla-Haile         {
1674e0dd4dc1SAriel Constenla-Haile             aProps[n].Value >>= mnMode;
1675e0dd4dc1SAriel Constenla-Haile         }
1676e0dd4dc1SAriel Constenla-Haile     }
1677e0dd4dc1SAriel Constenla-Haile }
1678e0dd4dc1SAriel Constenla-Haile 
1679e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1680e0dd4dc1SAriel Constenla-Haile 
1681e0dd4dc1SAriel Constenla-Haile // XExecutableDialog
setTitle(const OUString & sTitle)1682e0dd4dc1SAriel Constenla-Haile void SAL_CALL ColorPicker::setTitle( const OUString& sTitle ) throw (RuntimeException)
1683e0dd4dc1SAriel Constenla-Haile {
1684e0dd4dc1SAriel Constenla-Haile     msTitle = sTitle;
1685e0dd4dc1SAriel Constenla-Haile }
1686e0dd4dc1SAriel Constenla-Haile 
1687e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1688e0dd4dc1SAriel Constenla-Haile 
execute()1689e0dd4dc1SAriel Constenla-Haile sal_Int16 SAL_CALL ColorPicker::execute(  ) throw (RuntimeException)
1690e0dd4dc1SAriel Constenla-Haile {
1691e0dd4dc1SAriel Constenla-Haile     ColorPickerDialog aDlg( VCLUnoHelper::GetWindow( mxParent ), mnColor, mnMode );
1692e0dd4dc1SAriel Constenla-Haile     sal_Int16 ret = aDlg.Execute();
1693e0dd4dc1SAriel Constenla-Haile     if( ret )
1694e0dd4dc1SAriel Constenla-Haile         mnColor = aDlg.GetColor();
1695e0dd4dc1SAriel Constenla-Haile 
1696e0dd4dc1SAriel Constenla-Haile     return ret;
1697e0dd4dc1SAriel Constenla-Haile }
1698e0dd4dc1SAriel Constenla-Haile 
1699e0dd4dc1SAriel Constenla-Haile // --------------------------------------------------------------------
1700e0dd4dc1SAriel Constenla-Haile 
1701e0dd4dc1SAriel Constenla-Haile }
1702e0dd4dc1SAriel Constenla-Haile 
1703e0dd4dc1SAriel Constenla-Haile // eof
1704