Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/Managed.Windows.Forms/System.Windows.Forms/ColorDialog.cs')
-rw-r--r--mcs/class/Managed.Windows.Forms/System.Windows.Forms/ColorDialog.cs2141
1 files changed, 2141 insertions, 0 deletions
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ColorDialog.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ColorDialog.cs
new file mode 100644
index 00000000000..e5070fd0629
--- /dev/null
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ColorDialog.cs
@@ -0,0 +1,2141 @@
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// Copyright (c) 2004-2005 Novell, Inc. (http://www.novell.com)
+//
+// Authors:
+// Alexander Olk xenomorph2@onlinehome.de
+//
+
+// COMPLETE
+
+using System.ComponentModel;
+using System.Drawing;
+using System.Globalization;
+using System.Resources;
+using System;
+
+namespace System.Windows.Forms
+{
+ [DefaultProperty( "Color" )]
+ public class ColorDialog : CommonDialog
+ {
+ #region Local Variables
+ private ColorDialogPanel colorDialogPanel = null;
+ private bool allowFullOpen = true;
+ private bool anyColor = false;
+ private Color color = Color.Black;
+ private int[] customColors = null;
+ private bool fullOpen = false;
+ private bool showHelp = false;
+ private bool solidColorOnly = false;
+ #endregion // Local Variables
+
+ #region Public Constructors
+ public ColorDialog( ) : base()
+ {
+ form.Text = "Color";
+
+ form.Size = new Size( 221, 332 ); // 300
+ }
+ #endregion // Public Constructors
+
+ #region Public Instance Properties
+ public Color Color
+ {
+ get
+ {
+ return color;
+ }
+
+ set
+ {
+ color = value;
+ }
+ }
+
+ [DefaultValue(true)]
+ public virtual bool AllowFullOpen
+ {
+ get
+ {
+ return allowFullOpen;
+ }
+
+ set
+ {
+ allowFullOpen = value;
+ }
+ }
+
+ // Currently AnyColor internally is always true
+ // Does really anybody still use 256 or less colors ???
+ // Naw, cairo only supports 24bit anyway - pdb
+ [DefaultValue(false)]
+ public virtual bool AnyColor
+ {
+ get
+ {
+ return anyColor;
+ }
+
+ set
+ {
+ anyColor = value;
+ }
+ }
+
+ [DefaultValue(false)]
+ public virtual bool FullOpen
+ {
+ get
+ {
+ return fullOpen;
+ }
+
+ set
+ {
+ fullOpen = value;
+ }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+ public int[] CustomColors
+ {
+ get
+ {
+ return customColors;
+ }
+
+ set
+ {
+ customColors = value;
+ }
+ }
+
+ [DefaultValue(false)]
+ public virtual bool ShowHelp
+ {
+ get
+ {
+ return showHelp;
+ }
+
+ set
+ {
+ showHelp = value;
+ }
+ }
+
+ [DefaultValue(false)]
+ public virtual bool SolidColorOnly
+ {
+ get
+ {
+ return solidColorOnly;
+ }
+
+ set
+ {
+ solidColorOnly = value;
+ }
+ }
+ #endregion // Public Instance Properties
+
+ #region Public Instance Methods
+ public override void Reset( )
+ {
+ allowFullOpen = true;
+ anyColor = false;
+ color = Color.Black;
+ customColors = null;
+ fullOpen = false;
+ showHelp = false;
+ solidColorOnly = false;
+ }
+
+ public override string ToString( )
+ {
+ return base.ToString( ) + ", Color: " + Color.ToString( );
+ }
+ #endregion // Public Instance Methods
+
+ #region Protected Instance Properties
+ protected virtual IntPtr Instance
+ {
+ get
+ {
+ // MS Internal
+ return (IntPtr)GetHashCode( );
+ }
+ }
+
+ protected virtual int Options
+ {
+ get
+ {
+ // MS Internal
+ return 0;
+ }
+ }
+ #endregion // Protected Instance Properties
+
+ #region Protected Instance Methods
+ protected override bool RunDialog( IntPtr hwndOwner )
+ {
+ colorDialogPanel = new ColorDialogPanel (this);
+
+ form.Controls.Clear ();
+ form.Controls.Add( colorDialogPanel );
+
+ if ( customColors != null )
+ colorDialogPanel.BaseColorControl.SetCustomColors( );
+
+ return true;
+ }
+ #endregion // Protected Instance Methods
+
+ #region Private Classes
+ internal class ColorDialogPanel : Panel
+ {
+ #region Local Variables
+ private Panel selectedColorPanel;
+ private BaseColorControl baseColorControl;
+ private ColorMatrixControl colorMatrixControl;
+ private BrightnessControl brightnessControl;
+ private TriangleControl triangleControl;
+
+ private Button okButton;
+ private Button cancelButton;
+ private Button helpButton;
+ private Button addColoursButton;
+ private Button defineColoursButton;
+
+ private TextBox hueTextBox;
+ private TextBox satTextBox;
+ private TextBox briTextBox;
+ private TextBox redTextBox;
+ private TextBox greenTextBox;
+ private TextBox blueTextBox;
+
+ private Label briLabel;
+ private Label satLabel;
+ private Label hueLabel;
+ private Label colorBaseLabel;
+ private Label greenLabel;
+ private Label blueLabel;
+ private Label redLabel;
+
+ private ColorDialog colorDialog;
+ #endregion // Local Variables
+
+ internal ColorDialogPanel( ColorDialog colorDialog )
+ {
+ this.colorDialog = colorDialog;
+
+ satTextBox = new TextBox( );
+ briTextBox = new TextBox( );
+ blueTextBox = new TextBox( );
+ greenTextBox = new TextBox( );
+ redTextBox = new TextBox( );
+ hueTextBox = new TextBox( );
+
+ redLabel = new Label( );
+ blueLabel = new Label( );
+ greenLabel = new Label( );
+ colorBaseLabel = new Label( );
+ hueLabel = new Label( );
+ satLabel = new Label( );
+ briLabel = new Label( );
+
+ okButton = new Button( );
+ cancelButton = new Button( );
+ if (colorDialog.ShowHelp)
+ helpButton = new Button( );
+ defineColoursButton = new Button( );
+ addColoursButton = new Button( );
+
+ baseColorControl = new BaseColorControl( this );
+ colorMatrixControl = new ColorMatrixControl( this );
+ brightnessControl = new BrightnessControl( this );
+ triangleControl = new TriangleControl( this );
+
+ selectedColorPanel = new Panel( );
+
+ SuspendLayout( );
+
+ // hueTextBox
+ hueTextBox.Location = new Point( 324, 203 );
+ hueTextBox.Size = new Size( 27, 21 );
+ hueTextBox.TabIndex = 11;
+ hueTextBox.TextAlign = HorizontalAlignment.Right;
+ hueTextBox.MaxLength = 3;
+ // satTextBox
+ satTextBox.Location = new Point( 324, 225 );
+ satTextBox.Size = new Size( 27, 21 );
+ satTextBox.TabIndex = 15;
+ satTextBox.TextAlign = HorizontalAlignment.Right;
+ satTextBox.MaxLength = 3;
+ // greenTextBox
+ greenTextBox.Location = new Point( 404, 225 );
+ greenTextBox.Size = new Size( 27, 21 );
+ greenTextBox.TabIndex = 18;
+ greenTextBox.TextAlign = HorizontalAlignment.Right;
+ greenTextBox.MaxLength = 3;
+ // briTextBox
+ briTextBox.Location = new Point( 324, 247 );
+ briTextBox.Size = new Size( 27, 21 );
+ briTextBox.TabIndex = 16;
+ briTextBox.TextAlign = HorizontalAlignment.Right;
+ briTextBox.MaxLength = 3;
+ // blueTextBox
+ blueTextBox.Location = new Point( 404, 247 );
+ blueTextBox.Size = new Size( 27, 21 );
+ blueTextBox.TabIndex = 19;
+ blueTextBox.TextAlign = HorizontalAlignment.Right;
+ blueTextBox.MaxLength = 3;
+ // redTextBox
+ redTextBox.Location = new Point( 404, 203 );
+ redTextBox.Size = new Size( 27, 21 );
+ redTextBox.TabIndex = 17;
+ redTextBox.TextAlign = HorizontalAlignment.Right;
+ redTextBox.MaxLength = 3;
+
+ // redLabel
+ redLabel.FlatStyle = FlatStyle.System;
+ redLabel.Location = new Point( 361, 206 );
+ redLabel.Size = new Size( 40, 16 );
+ redLabel.TabIndex = 25;
+ redLabel.Text = Locale.GetText( "Red" ) + ":";
+ redLabel.TextAlign = ContentAlignment.MiddleRight;
+ // blueLabel
+ blueLabel.FlatStyle = FlatStyle.System;
+ blueLabel.Location = new Point( 361, 250 );
+ blueLabel.Size = new Size( 40, 16 );
+ blueLabel.TabIndex = 26;
+ blueLabel.Text = Locale.GetText( "Blue" ) + ":";
+ blueLabel.TextAlign = ContentAlignment.MiddleRight;
+ // greenLabel
+ greenLabel.FlatStyle = FlatStyle.System;
+ greenLabel.Location = new Point( 361, 228 );
+ greenLabel.Size = new Size( 40, 16 );
+ greenLabel.TabIndex = 27;
+ greenLabel.Text = Locale.GetText( "Green" ) + ":";
+ greenLabel.TextAlign = ContentAlignment.MiddleRight;
+ // colorBaseLabel
+ colorBaseLabel.Location = new Point( 228, 247 );
+ colorBaseLabel.Size = new Size( 60, 25 );
+ colorBaseLabel.TabIndex = 28;
+ colorBaseLabel.Text = Locale.GetText( "Color" );
+ colorBaseLabel.TextAlign = ContentAlignment.MiddleCenter;
+ // hueLabel
+ hueLabel.FlatStyle = FlatStyle.System;
+ hueLabel.Location = new Point( 287, 206 );
+ hueLabel.Size = new Size( 36, 16 );
+ hueLabel.TabIndex = 23;
+ hueLabel.Text = Locale.GetText( "Hue" ) + ":";
+ hueLabel.TextAlign = ContentAlignment.MiddleRight;
+ // satLabel
+ satLabel.FlatStyle = FlatStyle.System;
+ satLabel.Location = new Point( 287, 228 );
+ satLabel.Size = new Size( 36, 16 );
+ satLabel.TabIndex = 22;
+ satLabel.Text = Locale.GetText( "Sat" ) + ":";
+ satLabel.TextAlign = ContentAlignment.MiddleRight;
+ // briLabel
+ briLabel.FlatStyle = FlatStyle.System;
+ briLabel.Location = new Point( 287, 250 );
+ briLabel.Size = new Size( 36, 16 );
+ briLabel.TabIndex = 24;
+ briLabel.Text = Locale.GetText( "Bri" ) + ":";
+ briLabel.TextAlign = ContentAlignment.MiddleRight;
+
+ // defineColoursButton
+ defineColoursButton.FlatStyle = FlatStyle.System;
+ defineColoursButton.Location = new Point( 5, 244 );
+ defineColoursButton.Size = new Size( 210, 22 );
+ defineColoursButton.TabIndex = 6;
+ defineColoursButton.Text = Locale.GetText( "Define Colours >>" );
+ // okButton
+ okButton.FlatStyle = FlatStyle.System;
+ okButton.Location = new Point( 5, 271 );
+ okButton.Size = new Size( 66, 22 );
+ okButton.TabIndex = 0;
+ okButton.Text = Locale.GetText( "OK" );
+ // cancelButton
+ cancelButton.FlatStyle = FlatStyle.System;
+ cancelButton.Location = new Point( 78, 271 );
+ cancelButton.Size = new Size( 66, 22 );
+ cancelButton.TabIndex = 1;
+ cancelButton.Text = Locale.GetText( "Cancel" );
+ // helpButton
+ if (colorDialog.ShowHelp) {
+ helpButton.FlatStyle = FlatStyle.System;
+ helpButton.Location = new Point( 149, 271 );
+ helpButton.Size = new Size( 66, 22 );
+ helpButton.TabIndex = 5;
+ helpButton.Text = Locale.GetText ( "Help" );
+ }
+
+ // addColoursButton
+ addColoursButton.FlatStyle = FlatStyle.System;
+ addColoursButton.Location = new Point( 227, 271 );
+ addColoursButton.Size = new Size( 213, 22 );
+ addColoursButton.TabIndex = 7;
+ addColoursButton.Text = Locale.GetText( "Add Colours" );
+
+ // baseColorControl
+ baseColorControl.Location = new Point( 3, 6 );
+ baseColorControl.Size = new Size( 212, 231 );
+ baseColorControl.TabIndex = 13;
+ // colorMatrixControl
+ colorMatrixControl.Location = new Point( 227, 7 );
+ colorMatrixControl.Size = new Size( 179, 190 );
+ colorMatrixControl.TabIndex = 14;
+ // triangleControl
+ triangleControl.Location = new Point( 432, 0 );
+ triangleControl.Size = new Size( 16, 204 );
+ triangleControl.TabIndex = 12;
+ // brightnessControl
+ brightnessControl.Location = new Point( 415, 7 );
+ brightnessControl.Size = new Size( 14, 190 );
+ brightnessControl.TabIndex = 20;
+
+ // selectedColorPanel
+ selectedColorPanel.BackColor = SystemColors.Desktop;
+ selectedColorPanel.BorderStyle = BorderStyle.Fixed3D;
+ selectedColorPanel.Location = new Point( 227, 202 );
+ selectedColorPanel.Size = new Size( 60, 42 );
+ selectedColorPanel.TabIndex = 10;
+
+ ClientSize = new Size( 448, 332 ); // 300
+ Controls.Add( hueTextBox );
+ Controls.Add( satTextBox );
+ Controls.Add( briTextBox );
+ Controls.Add( redTextBox );
+ Controls.Add( greenTextBox );
+ Controls.Add( blueTextBox );
+
+ Controls.Add( defineColoursButton );
+ Controls.Add( okButton );
+ Controls.Add( cancelButton );
+ if (colorDialog.ShowHelp)
+ Controls.Add( helpButton );
+ Controls.Add( addColoursButton );
+
+ Controls.Add( baseColorControl );
+ Controls.Add( colorMatrixControl );
+ Controls.Add( brightnessControl );
+ Controls.Add( triangleControl );
+
+ Controls.Add( colorBaseLabel );
+ Controls.Add( greenLabel );
+ Controls.Add( blueLabel );
+ Controls.Add( redLabel );
+ Controls.Add( briLabel );
+ Controls.Add( hueLabel );
+ Controls.Add( satLabel );
+
+ Controls.Add( selectedColorPanel );
+
+ ResumeLayout( false );
+
+ brightnessControl.ColorToShow = selectedColorPanel.BackColor;
+
+ redTextBox.Text = selectedColorPanel.BackColor.R.ToString( );
+ greenTextBox.Text = selectedColorPanel.BackColor.G.ToString( );
+ blueTextBox.Text = selectedColorPanel.BackColor.B.ToString( );
+
+ HSB hsb = HSB.RGB2HSB( selectedColorPanel.BackColor );
+ hueTextBox.Text = hsb.hue.ToString( );
+ satTextBox.Text = hsb.sat.ToString( );
+ briTextBox.Text = hsb.bri.ToString( );
+
+ if ( !colorDialog.AllowFullOpen )
+ defineColoursButton.Enabled = false;
+
+ if ( colorDialog.FullOpen )
+ DoButtonDefineColours( );
+
+ defineColoursButton.Click += new EventHandler( OnClickButtonDefineColours );
+ addColoursButton.Click += new EventHandler( OnClickButtonAddColours );
+ if (colorDialog.ShowHelp)
+ helpButton.Click += new EventHandler( OnClickHelpButton );
+ cancelButton.Click += new EventHandler( OnClickCancelButton );
+ okButton.Click += new EventHandler( OnClickOkButton );
+
+ hueTextBox.KeyPress += new KeyPressEventHandler( OnKeyPressTextBoxes );
+ satTextBox.KeyPress += new KeyPressEventHandler( OnKeyPressTextBoxes );
+ briTextBox.KeyPress += new KeyPressEventHandler( OnKeyPressTextBoxes );
+ redTextBox.KeyPress += new KeyPressEventHandler( OnKeyPressTextBoxes );
+ greenTextBox.KeyPress += new KeyPressEventHandler( OnKeyPressTextBoxes );
+ blueTextBox.KeyPress += new KeyPressEventHandler( OnKeyPressTextBoxes );
+
+ SetStyle( ControlStyles.DoubleBuffer, true );
+ }
+
+ public Panel SelectedColorPanel
+ {
+ set
+ {
+ selectedColorPanel = value;
+ }
+
+ get
+ {
+ return selectedColorPanel;
+ }
+ }
+
+ public BrightnessControl BrightnessControl
+ {
+ set
+ {
+ brightnessControl = value;
+ }
+
+ get
+ {
+ return brightnessControl;
+ }
+ }
+
+ public TextBox HueTextBox
+ {
+ set
+ {
+ hueTextBox = value;
+ }
+
+ get
+ {
+ return hueTextBox;
+ }
+ }
+
+ public ColorMatrixControl ColorMatrixControl
+ {
+ set
+ {
+ colorMatrixControl = value;
+ }
+
+ get
+ {
+ return colorMatrixControl;
+ }
+ }
+
+ public TriangleControl TriangleControl
+ {
+ set
+ {
+ triangleControl = value;
+ }
+
+ get
+ {
+ return triangleControl;
+ }
+ }
+
+ public TextBox RedTextBox
+ {
+ set
+ {
+ redTextBox = value;
+ }
+
+ get
+ {
+ return redTextBox;
+ }
+ }
+
+ public TextBox GreenTextBox
+ {
+ set
+ {
+ greenTextBox = value;
+ }
+
+ get
+ {
+ return greenTextBox;
+ }
+ }
+
+ public BaseColorControl BaseColorControl
+ {
+ set
+ {
+ baseColorControl = value;
+ }
+
+ get
+ {
+ return baseColorControl;
+ }
+ }
+
+ public TextBox BlueTextBox
+ {
+ set
+ {
+ blueTextBox = value;
+ }
+
+ get
+ {
+ return blueTextBox;
+ }
+ }
+
+ public TextBox SatTextBox
+ {
+ set
+ {
+ satTextBox = value;
+ }
+
+ get
+ {
+ return satTextBox;
+ }
+ }
+
+ public TextBox BriTextBox
+ {
+ set
+ {
+ briTextBox = value;
+ }
+
+ get
+ {
+ return briTextBox;
+ }
+ }
+
+ public ColorDialog ColorDialog
+ {
+ set
+ {
+ colorDialog = value;
+ }
+
+ get
+ {
+ return colorDialog;
+ }
+ }
+
+ void OnClickCancelButton( object sender, EventArgs e )
+ {
+ colorDialog.form.Controls.Remove( this );
+ colorDialog.form.DialogResult = DialogResult.Cancel;
+ }
+
+ void OnClickOkButton( object sender, EventArgs e )
+ {
+ colorDialog.form.Controls.Remove( this );
+ colorDialog.form.DialogResult = DialogResult.OK;
+ }
+
+ void OnClickButtonDefineColours( object sender, EventArgs e )
+ {
+ DoButtonDefineColours( );
+ }
+
+ private void DoButtonDefineColours( )
+ {
+ defineColoursButton.Enabled = false;
+
+ colorDialog.FullOpen = true;
+
+ colorMatrixControl.ColorToShow = baseColorControl.ColorToShow;
+
+ colorDialog.form.ClientSize = new Size( 448, 332 );
+ }
+
+ void OnClickButtonAddColours( object sender, EventArgs e )
+ {
+ baseColorControl.SetUserColor( selectedColorPanel.BackColor );
+ }
+
+ // FIXME: Is this correct ?
+ void OnClickHelpButton( object sender, EventArgs e )
+ {
+ colorDialog.OnHelpRequest( e );
+ }
+
+ // not working 100 %, S.W.F.TextBox isn't finished yet
+ void OnKeyPressTextBoxes( object sender, KeyPressEventArgs e )
+ {
+ // accept only '0', '1', ... , '9'
+ // 48 = '0', 57 = '9'
+ if ( e.KeyChar < (char)48 || e.KeyChar > (char)57 )
+ e.Handled = true;
+
+ TextChangedTextBoxes( sender );
+ }
+
+ // not working 100 %, S.W.F.TextBox isn't finished yet
+ void TextChangedTextBoxes( object sender )
+ {
+ if ( ( (TextBox)sender ).Text.Length == 0 )
+ return;
+
+ int val;
+
+ if ( sender == hueTextBox )
+ {
+ val = System.Convert.ToInt32( hueTextBox.Text );
+
+ if ( val > 240 )
+ {
+ val = 240;
+ hueTextBox.Text = val.ToString( );
+ }
+ else
+ if ( val < 0 )
+ {
+ val = 0;
+ hueTextBox.Text = val.ToString( );
+ }
+
+ UpdateFromHSBTextBoxes( );
+
+ UpdateControls( selectedColorPanel.BackColor );
+ }
+ else
+ if ( sender == satTextBox )
+ {
+ val = System.Convert.ToInt32( satTextBox.Text );
+
+ if ( val > 239 )
+ {
+ val = 239;
+ satTextBox.Text = val.ToString( );
+ }
+ else
+ if ( val < 0 )
+ {
+ val = 0;
+ satTextBox.Text = val.ToString( );
+ }
+
+ UpdateFromHSBTextBoxes( );
+
+ UpdateControls( selectedColorPanel.BackColor );
+ }
+ else
+ if ( sender == briTextBox )
+ {
+ val = System.Convert.ToInt32( briTextBox.Text );
+
+ if ( val > 239 )
+ {
+ val = 239;
+ briTextBox.Text = val.ToString( );
+ }
+ else
+ if ( val < 0 )
+ {
+ val = 0;
+ briTextBox.Text = val.ToString( );
+ }
+
+ UpdateFromHSBTextBoxes( );
+
+ UpdateControls( selectedColorPanel.BackColor );
+ }
+ else
+ if ( sender == redTextBox )
+ {
+ val = System.Convert.ToInt32( redTextBox.Text );
+
+ if ( val > 255 )
+ {
+ val = 255;
+ redTextBox.Text = val.ToString( );
+ }
+ else
+ if ( val < 0 )
+ {
+ val = 0;
+ redTextBox.Text = val.ToString( );
+ }
+
+ UpdateFromRGBTextBoxes( );
+ }
+ else
+ if ( sender == greenTextBox )
+ {
+ val = System.Convert.ToInt32( greenTextBox.Text );
+
+ if ( val > 255 )
+ {
+ val = 255;
+ greenTextBox.Text = val.ToString( );
+ }
+ else
+ if ( val < 0 )
+ {
+ val = 0;
+ greenTextBox.Text = val.ToString( );
+ }
+
+ UpdateFromRGBTextBoxes( );
+ }
+ else
+ if ( sender == blueTextBox )
+ {
+ val = System.Convert.ToInt32( blueTextBox.Text );
+
+ if ( val > 255 )
+ {
+ val = 255;
+ blueTextBox.Text = val.ToString( );
+ }
+ else
+ if ( val < 0 )
+ {
+ val = 0;
+ blueTextBox.Text = val.ToString( );
+ }
+
+ UpdateFromRGBTextBoxes( );
+ }
+ }
+
+ public void UpdateControls( Color color )
+ {
+ colorDialog.Color = color;
+ selectedColorPanel.BackColor = color;
+ colorMatrixControl.ColorToShow = color;
+ brightnessControl.ColorToShow = color;
+ triangleControl.ColorToShow = color;
+ }
+
+ public void UpdateRGBTextBoxes( Color color )
+ {
+ redTextBox.Text = color.R.ToString( );
+ greenTextBox.Text = color.G.ToString( );
+ blueTextBox.Text = color.B.ToString( );
+ }
+
+ public void UpdateHSBTextBoxes( Color color )
+ {
+ HSB hsb = HSB.RGB2HSB( color );
+
+ hueTextBox.Text = hsb.hue.ToString( );
+ satTextBox.Text = hsb.sat.ToString( );
+ briTextBox.Text = hsb.bri.ToString( );
+ }
+
+ public void UpdateFromHSBTextBoxes( )
+ {
+ Color col = HSB.HSB2RGB( System.Convert.ToInt32( hueTextBox.Text ),
+ System.Convert.ToInt32( satTextBox.Text ),
+ System.Convert.ToInt32( briTextBox.Text ) );
+
+ selectedColorPanel.BackColor = col;
+ UpdateRGBTextBoxes( col );
+ }
+
+ public void UpdateFromRGBTextBoxes( )
+ {
+ Color col = Color.FromArgb( System.Convert.ToInt32( redTextBox.Text ),
+ System.Convert.ToInt32( greenTextBox.Text ),
+ System.Convert.ToInt32( blueTextBox.Text ) );
+
+ selectedColorPanel.BackColor = col;
+
+ UpdateHSBTextBoxes( col );
+
+ UpdateFromHSBTextBoxes( );
+
+ UpdateControls( col );
+ }
+ }
+
+ internal struct HSB
+ {
+ public int hue;
+ public int sat;
+ public int bri;
+
+ public static HSB RGB2HSB( Color color )
+ {
+ HSB hsb = new HSB( );
+
+ hsb.hue = (int)( ( color.GetHue( ) / 360.0f ) * 241 );
+ hsb.sat = (int)( color.GetSaturation( ) * 241 );
+ hsb.bri = (int)( color.GetBrightness( ) * 240 );
+
+ if ( hsb.hue > 240 ) hsb.hue = 240;
+ if ( hsb.sat > 240 ) hsb.sat = 240;
+ if ( hsb.bri > 239 ) hsb.bri = 239;
+
+ return hsb;
+ }
+
+ // not using ControlPaint HBS2Color, this algo is more precise
+ public static Color HSB2RGB( int hue, int saturation, int brightness )
+ {
+ if ( hue > 240 )
+ hue = 240;
+ else
+ if ( hue < 0 )
+ hue = 0;
+
+ if ( saturation > 240 )
+ saturation = 240;
+ else
+ if ( saturation < 0 )
+ saturation = 0;
+
+ if ( brightness > 239 )
+ brightness = 239;
+ else
+ if ( brightness < 0 )
+ brightness = 0;
+
+ float H = hue / 240.0f;
+ float S = saturation / 240.0f;
+ float L = brightness / 239.0f;
+
+ float r = 0, g = 0, b = 0;
+ float d1, d2;
+
+ if ( L == 0 )
+ {
+ r = g = b = 0;
+ }
+ else
+ {
+ if ( S == 0 )
+ {
+ r = g = b = L;
+ }
+ else
+ {
+ d2 = ( L <= 0.5f ) ? L * ( 1.0f + S ) : L + S - ( L * S );
+ d1 = 2.0f * L - d2;
+
+ float[] d3 = new float[] { H + 1.0f / 3.0f , H, H - 1.0f / 3.0f };
+ float[] rgb = new float[] { 0,0,0 };
+
+ for ( int i = 0; i < 3; i++ )
+ {
+ if ( d3[ i ] < 0 )
+ d3[ i ] += 1.0f;
+ if ( d3[ i ] > 1.0f )
+ d3[ i ] -= 1.0f;
+
+ if ( 6.0f * d3[ i ] < 1.0f )
+ rgb[ i ] = d1 + ( d2 - d1 ) * d3[ i ] * 6.0f;
+ else
+ if ( 2.0f * d3[ i ] < 1.0f )
+ rgb[ i ] = d2;
+ else
+ if ( 3.0f * d3[ i ] < 2.0f )
+ rgb[ i ] = ( d1 + ( d2 - d1 ) * ( ( 2.0f / 3.0f ) - d3[ i ] ) * 6.0f );
+ else
+ rgb[ i ] = d1;
+ }
+
+ r = rgb[ 0 ];
+ g = rgb[ 1 ];
+ b = rgb[ 2 ];
+ }
+ }
+
+ r = 255.0f * r;
+ g = 255.0f * g;
+ b = 255.0f * b;
+
+ if ( r < 1 )
+ r = 0.0f;
+ else
+ if ( r > 255.0f )
+ r = 255.0f;
+
+ if ( g < 1 )
+ g = 0.0f;
+ else
+ if ( g > 255.0f )
+ g = 255.0f;
+
+ if ( b < 1 )
+ b = 0.0f;
+ else
+ if ( b > 255.0f )
+ b = 255.0f;
+
+ return Color.FromArgb( (int)r, (int)g, (int)b );
+ }
+
+ public static int Brightness( Color color )
+ {
+ return (int)( color.GetBrightness( ) * 240 );
+ }
+
+ public static void GetHueSaturation( Color color, out int hue, out int sat )
+ {
+ hue = (int)( ( color.GetHue( ) / 360.0f ) * 241 );
+ sat = (int)( color.GetSaturation( ) * 241 );
+ }
+
+ // only for testing
+ // there are some small glitches, but it is still better than ControlPaint implementation
+ public static void TestColor( Color color )
+ {
+ Console.WriteLine( "Color: " + color );
+ HSB hsb = HSB.RGB2HSB( color );
+ Console.WriteLine( "RGB2HSB: " + hsb.hue + ", " + hsb.sat + ", " + hsb.bri );
+ Console.WriteLine( "HSB2RGB: " + HSB.HSB2RGB( hsb.hue, hsb.sat, hsb.bri ) );
+ Console.WriteLine( );
+ }
+ }
+
+ internal class BaseColorControl : Control
+ {
+ internal class SmallColorControl : Control
+ {
+ private Color color;
+
+ private bool isSelected = false;
+
+ public SmallColorControl( Color color )
+ {
+ this.color = color;
+
+ Size = new Size( 25, 23 );
+
+ SetStyle( ControlStyles.DoubleBuffer, true );
+ SetStyle( ControlStyles.AllPaintingInWmPaint, true );
+ SetStyle( ControlStyles.UserPaint, true );
+ SetStyle( ControlStyles.Selectable, true );
+ }
+
+ public bool IsSelected
+ {
+ set
+ {
+ isSelected = value;
+ Invalidate( );
+ }
+
+ get
+ {
+ return isSelected;
+ }
+ }
+
+ public Color Color
+ {
+ set
+ {
+ color = value;
+ Invalidate( );
+ }
+
+ get
+ {
+ return color;
+ }
+ }
+
+ protected override void OnPaint( PaintEventArgs pe )
+ {
+ base.OnPaint( pe );
+
+ pe.Graphics.FillRectangle( ThemeEngine.Current.ResPool.GetSolidBrush( BackColor ), 0, 0, 26, 23 );
+
+ pe.Graphics.FillRectangle( ThemeEngine.Current.ResPool.GetSolidBrush( color ),
+ new Rectangle( 4, 4, 17, 15 ) );
+
+ DrawBorder( pe.Graphics, new Rectangle( 4, 4, 17, 15 ) );
+
+ if ( isSelected )
+ {
+ pe.Graphics.DrawRectangle( ThemeEngine.Current.ResPool.GetPen( Color.Black ),
+ new Rectangle( 2, 2, 20, 18 ) );
+ }
+
+ if ( Focused )
+ {
+ ControlPaint.DrawFocusRectangle(
+ pe.Graphics, new Rectangle( 0, 0, 25, 23 )
+ );
+ }
+ }
+
+ protected override void OnClick( EventArgs e ) {
+ Focus();
+ IsSelected = true;
+
+ base.OnClick( e );
+ }
+
+
+ protected override void OnLostFocus( EventArgs e )
+ {
+ Invalidate( );
+
+ base.OnLostFocus( e );
+ }
+
+ private void DrawBorder( Graphics dc, Rectangle rect )
+ {
+ Pen pen = ThemeEngine.Current.ResPool.GetPen( Color.Black );
+ dc.DrawLine( pen, rect.X, rect.Y, rect.X, rect.Bottom - 1 );
+ dc.DrawLine( pen, rect.X + 1, rect.Y, rect.Right - 1, rect.Y );
+ }
+ }
+
+ private SmallColorControl[] smallColorControl;
+
+ private SmallColorControl[] userSmallColorControl;
+
+ private Label userColorLabel;
+ private Label baseColorLabel;
+
+ private SmallColorControl selectedSmallColorControl;
+
+ private int currentlyUsedUserSmallColorControl = 0;
+ private int[] customColors = null;
+
+ private ColorDialogPanel colorDialogPanel = null;
+
+ public BaseColorControl( ColorDialogPanel colorDialogPanel )
+ {
+ this.colorDialogPanel = colorDialogPanel;
+
+ userSmallColorControl = new SmallColorControl[ 16 ];
+ userSmallColorControl[ 0 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 1 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 2 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 3 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 4 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 5 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 6 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 7 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 8 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 9 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 10 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 11 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 12 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 13 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 14 ] = new SmallColorControl( Color.White );
+ userSmallColorControl[ 15 ] = new SmallColorControl( Color.White );
+
+ smallColorControl = new SmallColorControl[ 48 ];
+ smallColorControl[ 0 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 255 ) ), ( (Byte)( 128 ) ), ( (Byte)( 138 ) ) ) );
+ smallColorControl[ 1 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 128 ) ), ( (Byte)( 128 ) ), ( (Byte)( 64 ) ) ) );
+ smallColorControl[ 2 ] = new SmallColorControl( Color.Gray );
+ smallColorControl[ 3 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 128 ) ), ( (Byte)( 0 ) ), ( (Byte)( 255 ) ) ) );
+ smallColorControl[ 4 ] = new SmallColorControl( Color.Silver );
+ smallColorControl[ 5 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 64 ) ), ( (Byte)( 128 ) ), ( (Byte)( 128 ) ) ) );
+ smallColorControl[ 6 ] = new SmallColorControl( Color.White );
+ smallColorControl[ 7 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 64 ) ), ( (Byte)( 0 ) ), ( (Byte)( 64 ) ) ) );
+ smallColorControl[ 8 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 255 ) ), ( (Byte)( 128 ) ), ( (Byte)( 64 ) ) ) );
+ smallColorControl[ 9 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 128 ) ), ( (Byte)( 64 ) ), ( (Byte)( 64 ) ) ) );
+ smallColorControl[ 10 ] = new SmallColorControl( Color.Teal );
+ smallColorControl[ 11 ] = new SmallColorControl( Color.Lime );
+ smallColorControl[ 12 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 128 ) ), ( (Byte)( 128 ) ), ( (Byte)( 255 ) ) ) );
+ smallColorControl[ 13 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 0 ) ), ( (Byte)( 64 ) ), ( (Byte)( 128 ) ) ) );
+ smallColorControl[ 14 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 255 ) ), ( (Byte)( 0 ) ), ( (Byte)( 128 ) ) ) );
+ smallColorControl[ 15 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 128 ) ), ( (Byte)( 255 ) ), ( (Byte)( 0 ) ) ) );
+ smallColorControl[ 16 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 0 ) ), ( (Byte)( 255 ) ), ( (Byte)( 64 ) ) ) );
+ smallColorControl[ 17 ] = new SmallColorControl( Color.Red );
+ smallColorControl[ 18 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 255 ) ), ( (Byte)( 128 ) ), ( (Byte)( 0 ) ) ) );
+ smallColorControl[ 19 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 255 ) ), ( (Byte)( 128 ) ), ( (Byte)( 255 ) ) ) );
+ smallColorControl[ 20 ] = new SmallColorControl( Color.Fuchsia );
+ smallColorControl[ 21 ] = new SmallColorControl( Color.Aqua );
+ smallColorControl[ 22 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 128 ) ), ( (Byte)( 255 ) ), ( (Byte)( 128 ) ) ) );
+ smallColorControl[ 23 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 128 ) ), ( (Byte)( 255 ) ), ( (Byte)( 255 ) ) ) );
+ smallColorControl[ 24 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 0 ) ), ( (Byte)( 128 ) ), ( (Byte)( 255 ) ) ) );
+ smallColorControl[ 25 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 128 ) ), ( (Byte)( 64 ) ), ( (Byte)( 0 ) ) ) );
+ smallColorControl[ 26 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 64 ) ), ( (Byte)( 0 ) ), ( (Byte)( 0 ) ) ) );
+ smallColorControl[ 27 ] = new SmallColorControl( Color.Maroon );
+ smallColorControl[ 28 ] = new SmallColorControl( Color.Purple );
+ smallColorControl[ 29 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 0 ) ), ( (Byte)( 0 ) ), ( (Byte)( 160 ) ) ) );
+ smallColorControl[ 30 ] = new SmallColorControl( Color.Blue );
+ smallColorControl[ 31 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 0 ) ), ( (Byte)( 128 ) ), ( (Byte)( 64 ) ) ) );
+ smallColorControl[ 32 ] = new SmallColorControl( Color.Green );
+ smallColorControl[ 33 ] = new SmallColorControl( Color.Yellow );
+ smallColorControl[ 34 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 128 ) ), ( (Byte)( 128 ) ), ( (Byte)( 192 ) ) ) );
+ smallColorControl[ 35 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 0 ) ), ( (Byte)( 128 ) ), ( (Byte)( 192 ) ) ) );
+ smallColorControl[ 36 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 128 ) ), ( (Byte)( 0 ) ), ( (Byte)( 64 ) ) ) );
+ smallColorControl[ 37 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 255 ) ), ( (Byte)( 128 ) ), ( (Byte)( 192 ) ) ) );
+ smallColorControl[ 38 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 0 ) ), ( (Byte)( 255 ) ), ( (Byte)( 128 ) ) ) );
+ smallColorControl[ 39 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 255 ) ), ( (Byte)( 255 ) ), ( (Byte)( 128 ) ) ) );
+ smallColorControl[ 40 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 0 ) ), ( (Byte)( 64 ) ), ( (Byte)( 0 ) ) ) );
+ smallColorControl[ 41 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 0 ) ), ( (Byte)( 64 ) ), ( (Byte)( 64 ) ) ) );
+ smallColorControl[ 42 ] = new SmallColorControl( Color.Navy );
+ smallColorControl[ 43 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 0 ) ), ( (Byte)( 0 ) ), ( (Byte)( 64 ) ) ) );
+ smallColorControl[ 44 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 64 ) ), ( (Byte)( 0 ) ), ( (Byte)( 64 ) ) ) );
+ smallColorControl[ 45 ] = new SmallColorControl( Color.FromArgb( ( (Byte)( 64 ) ), ( (Byte)( 0 ) ), ( (Byte)( 128 ) ) ) );
+ smallColorControl[ 46 ] = new SmallColorControl( Color.Black ); //Black
+ smallColorControl[ 47 ] = new SmallColorControl( Color.Olive );
+
+ baseColorLabel = new Label( );
+ userColorLabel = new Label( );
+
+ SuspendLayout( );
+
+ // colorPanel1
+ smallColorControl[ 0 ].Location = new Point( 0, 15 );
+ smallColorControl[ 0 ].TabIndex = 51;
+ smallColorControl[ 0 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel2
+ smallColorControl[ 1 ].Location = new Point( 50, 130 );
+ smallColorControl[ 1 ].TabIndex = 92;
+ smallColorControl[ 1 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel3
+ smallColorControl[ 2 ].Location = new Point( 75, 130 );
+ smallColorControl[ 2 ].TabIndex = 93;
+ smallColorControl[ 2 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel4
+ smallColorControl[ 3 ].Location = new Point( 175, 84 );
+ smallColorControl[ 3 ].TabIndex = 98;
+ smallColorControl[ 3 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel5
+ smallColorControl[ 4 ].Location = new Point( 125, 130 );
+ smallColorControl[ 4 ].TabIndex = 95;
+ smallColorControl[ 4 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel6
+ smallColorControl[ 5 ].Location = new Point( 100, 130 );
+ smallColorControl[ 5 ].TabIndex = 94;
+ smallColorControl[ 5 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel7
+ smallColorControl[ 6 ].Location = new Point( 175, 130 );
+ smallColorControl[ 6 ].TabIndex = 97;
+ smallColorControl[ 6 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel8
+ smallColorControl[ 7 ].Location = new Point( 150, 130 );
+ smallColorControl[ 7 ].TabIndex = 96;
+ smallColorControl[ 7 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel9
+ smallColorControl[ 8 ].Location = new Point( 25, 61 );
+ smallColorControl[ 8 ].TabIndex = 68;
+ smallColorControl[ 8 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel10
+ smallColorControl[ 9 ].Location = new Point( 0, 61 );
+ smallColorControl[ 9 ].TabIndex = 67;
+ smallColorControl[ 9 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel11
+ smallColorControl[ 10 ].Location = new Point( 75, 61 );
+ smallColorControl[ 10 ].TabIndex = 70;
+ smallColorControl[ 10 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel12
+ smallColorControl[ 11 ].Location = new Point( 50, 61 );
+ smallColorControl[ 11 ].TabIndex = 69;
+ smallColorControl[ 11 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel13
+ smallColorControl[ 12 ].Location = new Point( 125, 61 );
+ smallColorControl[ 12 ].TabIndex = 72;
+ smallColorControl[ 12 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel14
+ smallColorControl[ 13 ].Location = new Point( 100, 61 );
+ smallColorControl[ 13 ].TabIndex = 71;
+ smallColorControl[ 13 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel15
+ smallColorControl[ 14 ].Location = new Point( 175, 61 );
+ smallColorControl[ 14 ].TabIndex = 74;
+ smallColorControl[ 14 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel16
+ smallColorControl[ 15 ].Location = new Point( 50, 38 );
+ smallColorControl[ 15 ].TabIndex = 61;
+ smallColorControl[ 15 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel17
+ smallColorControl[ 16 ].Location = new Point( 75, 38 );
+ smallColorControl[ 16 ].TabIndex = 62;
+ smallColorControl[ 16 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel18
+ smallColorControl[ 17 ].Location = new Point( 0, 38 );
+ smallColorControl[ 17 ].TabIndex = 59;
+ smallColorControl[ 17 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel19
+ smallColorControl[ 18 ].Location = new Point( 25, 84 );
+ smallColorControl[ 18 ].TabIndex = 75;
+ smallColorControl[ 18 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel20
+ smallColorControl[ 19 ].Location = new Point( 175, 15 );
+ smallColorControl[ 19 ].TabIndex = 58;
+ smallColorControl[ 19 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel21
+ smallColorControl[ 20 ].Location = new Point( 175, 38 );
+ smallColorControl[ 20 ].TabIndex = 66;
+ smallColorControl[ 20 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel22
+ smallColorControl[ 21 ].Location = new Point( 100, 38 );
+ smallColorControl[ 21 ].TabIndex = 63;
+ smallColorControl[ 21 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel23
+ smallColorControl[ 22 ].Location = new Point( 50, 15 );
+ smallColorControl[ 22 ].TabIndex = 53;
+ smallColorControl[ 22 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel24
+ smallColorControl[ 23 ].Location = new Point( 100, 15 );
+ smallColorControl[ 23 ].TabIndex = 55;
+ smallColorControl[ 23 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel25
+ smallColorControl[ 24 ].Location = new Point( 125, 15 );
+ smallColorControl[ 24 ].TabIndex = 56;
+ smallColorControl[ 24 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel26
+ smallColorControl[ 25 ].Location = new Point( 25, 107 );
+ smallColorControl[ 25 ].TabIndex = 83;
+ smallColorControl[ 25 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel27
+ smallColorControl[ 26 ].Location = new Point( 0, 107 );
+ smallColorControl[ 26 ].TabIndex = 82;
+ smallColorControl[ 26 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel28
+ smallColorControl[ 27 ].Location = new Point( 0, 84 );
+ smallColorControl[ 27 ].TabIndex = 81;
+ smallColorControl[ 27 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel29
+ smallColorControl[ 28 ].Location = new Point( 150, 84 );
+ smallColorControl[ 28 ].TabIndex = 80;
+ smallColorControl[ 28 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel30
+ smallColorControl[ 29 ].Location = new Point( 125, 84 );
+ smallColorControl[ 29 ].TabIndex = 79;
+ smallColorControl[ 29 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel31
+ smallColorControl[ 30 ].Location = new Point( 100, 84 );
+ smallColorControl[ 30 ].TabIndex = 78;
+ smallColorControl[ 30 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel32
+ smallColorControl[ 31 ].Location = new Point( 75, 84 );
+ smallColorControl[ 31 ].TabIndex = 77;
+ smallColorControl[ 31 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel33
+ smallColorControl[ 32 ].Location = new Point( 50, 84 );
+ smallColorControl[ 32 ].TabIndex = 76;
+ smallColorControl[ 32 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel34
+ smallColorControl[ 33 ].Location = new Point( 25, 38 );
+ smallColorControl[ 33 ].TabIndex = 60;
+ smallColorControl[ 33 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel35
+ smallColorControl[ 34 ].Location = new Point( 150, 38 );
+ smallColorControl[ 34 ].TabIndex = 65;
+ smallColorControl[ 34 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel36
+ smallColorControl[ 35 ].Location = new Point( 125, 38 );
+ smallColorControl[ 35 ].TabIndex = 64;
+ smallColorControl[ 35 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel37
+ smallColorControl[ 36 ].Location = new Point( 150, 61 );
+ smallColorControl[ 36 ].TabIndex = 73;
+ smallColorControl[ 36 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel38
+ smallColorControl[ 37 ].Location = new Point( 150, 15 );
+ smallColorControl[ 37 ].TabIndex = 57;
+ smallColorControl[ 37 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel39
+ smallColorControl[ 38 ].Location = new Point( 75, 15 );
+ smallColorControl[ 38 ].TabIndex = 54;
+ smallColorControl[ 38 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel40
+ smallColorControl[ 39 ].Location = new Point( 25, 15 );
+ smallColorControl[ 39 ].TabIndex = 52;
+ smallColorControl[ 39 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel41
+ smallColorControl[ 40 ].Location = new Point( 50, 107 );
+ smallColorControl[ 40 ].TabIndex = 84;
+ smallColorControl[ 40 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel42
+ smallColorControl[ 41 ].Location = new Point( 75, 107 );
+ smallColorControl[ 41 ].TabIndex = 85;
+ smallColorControl[ 41 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel43
+ smallColorControl[ 42 ].Location = new Point( 100, 107 );
+ smallColorControl[ 42 ].TabIndex = 86;
+ smallColorControl[ 42 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel44
+ smallColorControl[ 43 ].Location = new Point( 125, 107 );
+ smallColorControl[ 43 ].TabIndex = 87;
+ smallColorControl[ 43 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel45
+ smallColorControl[ 44 ].Location = new Point( 150, 107 );
+ smallColorControl[ 44 ].TabIndex = 88;
+ smallColorControl[ 44 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel46
+ smallColorControl[ 45 ].Location = new Point( 175, 107 );
+ smallColorControl[ 45 ].TabIndex = 89;
+ smallColorControl[ 45 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel47
+ smallColorControl[ 46 ].Location = new Point( 0, 130 );
+ smallColorControl[ 46 ].TabIndex = 90;
+ smallColorControl[ 46 ].Click += new EventHandler( OnSmallColorControlClick );
+ // colorPanel48
+ smallColorControl[ 47 ].Location = new Point( 25, 130 );
+ smallColorControl[ 47 ].TabIndex = 91;
+ smallColorControl[ 47 ].Click += new EventHandler( OnSmallColorControlClick );
+
+ // userColorPane1
+ userSmallColorControl[ 0 ].Location = new Point( 0, 180 );
+ userSmallColorControl[ 0 ].TabIndex = 99;
+ userSmallColorControl[ 0 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel2
+ userSmallColorControl[ 1 ].Location = new Point( 0, 203 );
+ userSmallColorControl[ 1 ].TabIndex = 108;
+ userSmallColorControl[ 1 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel13
+ userSmallColorControl[ 2 ].Location = new Point( 25, 180 );
+ userSmallColorControl[ 2 ].TabIndex = 100;
+ userSmallColorControl[ 2 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel4
+ userSmallColorControl[ 3 ].Location = new Point( 25, 203 );
+ userSmallColorControl[ 3 ].TabIndex = 109;
+ userSmallColorControl[ 3 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel5
+ userSmallColorControl[ 4 ].Location = new Point( 50, 180 );
+ userSmallColorControl[ 4 ].TabIndex = 101;
+ userSmallColorControl[ 4 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel6
+ userSmallColorControl[ 5 ].Location = new Point( 50, 203 );
+ userSmallColorControl[ 5 ].TabIndex = 110;
+ userSmallColorControl[ 5 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel7
+ userSmallColorControl[ 6 ].Location = new Point( 75, 180 );
+ userSmallColorControl[ 6 ].TabIndex = 102;
+ userSmallColorControl[ 6 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel8
+ userSmallColorControl[ 7 ].Location = new Point( 75, 203 );
+ userSmallColorControl[ 7 ].TabIndex = 111;
+ userSmallColorControl[ 7 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel9
+ userSmallColorControl[ 8 ].Location = new Point( 100, 180 );
+ userSmallColorControl[ 8 ].TabIndex = 103;
+ userSmallColorControl[ 8 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel10
+ userSmallColorControl[ 9 ].Location = new Point( 100, 203 );
+ userSmallColorControl[ 9 ].TabIndex = 112;
+ userSmallColorControl[ 9 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel11
+ userSmallColorControl[ 10 ].Location = new Point( 125, 180 );
+ userSmallColorControl[ 10 ].TabIndex = 105;
+ userSmallColorControl[ 10 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel2
+ userSmallColorControl[ 11 ].Location = new Point( 125, 203 );
+ userSmallColorControl[ 11 ].TabIndex = 113;
+ userSmallColorControl[ 11 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel13
+ userSmallColorControl[ 12 ].Location = new Point( 150, 180 );
+ userSmallColorControl[ 12 ].TabIndex = 106;
+ userSmallColorControl[ 12 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel4
+ userSmallColorControl[ 13 ].Location = new Point( 150, 203 );
+ userSmallColorControl[ 13 ].TabIndex = 114;
+ userSmallColorControl[ 13 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel15
+ userSmallColorControl[ 14 ].Location = new Point( 175, 180 );
+ userSmallColorControl[ 14 ].TabIndex = 107;
+ userSmallColorControl[ 14 ].Click += new EventHandler( OnSmallColorControlClick );
+ // userColorPanel16
+ userSmallColorControl[ 15 ].Location = new Point( 175, 203 );
+ userSmallColorControl[ 15 ].TabIndex = 115;
+ userSmallColorControl[ 15 ].Click += new EventHandler( OnSmallColorControlClick );
+
+ // baseColorLabel
+ baseColorLabel.Location = new Point( 2, 0 );
+ baseColorLabel.Size = new Size( 200, 12 );
+ baseColorLabel.TabIndex = 5;
+ baseColorLabel.Text = Locale.GetText( "Base Colours" ) + ":";
+ // userColorLabel
+ userColorLabel.FlatStyle = FlatStyle.System;
+ userColorLabel.Location = new Point( 2, 164 );
+ userColorLabel.Size = new Size( 200, 14 );
+ userColorLabel.TabIndex = 104;
+ userColorLabel.Text = Locale.GetText( "User Colors" ) + ":";
+
+ Controls.Add( userSmallColorControl[ 7 ] );
+ Controls.Add( userSmallColorControl[ 6 ] );
+ Controls.Add( userSmallColorControl[ 5 ] );
+ Controls.Add( userSmallColorControl[ 4 ] );
+ Controls.Add( userSmallColorControl[ 3 ] );
+ Controls.Add( userSmallColorControl[ 2 ] );
+ Controls.Add( userSmallColorControl[ 1 ] );
+ Controls.Add( userSmallColorControl[ 0 ] );
+ Controls.Add( userSmallColorControl[ 15 ] );
+ Controls.Add( userSmallColorControl[ 14 ] );
+ Controls.Add( userSmallColorControl[ 13 ] );
+ Controls.Add( userSmallColorControl[ 12 ] );
+ Controls.Add( userSmallColorControl[ 11 ] );
+ Controls.Add( userSmallColorControl[ 10 ] );
+ Controls.Add( userSmallColorControl[ 9 ] );
+ Controls.Add( userSmallColorControl[ 8 ] );
+
+ Controls.Add( smallColorControl[ 0 ] );
+ Controls.Add( smallColorControl[ 3 ] );
+ Controls.Add( smallColorControl[ 6 ] );
+ Controls.Add( smallColorControl[ 7 ] );
+ Controls.Add( smallColorControl[ 4 ] );
+ Controls.Add( smallColorControl[ 5 ] );
+ Controls.Add( smallColorControl[ 2 ] );
+ Controls.Add( smallColorControl[ 1 ] );
+ Controls.Add( smallColorControl[ 47 ] );
+ Controls.Add( smallColorControl[ 46 ] );
+ Controls.Add( smallColorControl[ 45 ] );
+ Controls.Add( smallColorControl[ 44 ] );
+ Controls.Add( smallColorControl[ 43 ] );
+ Controls.Add( smallColorControl[ 42 ] );
+ Controls.Add( smallColorControl[ 41 ] );
+ Controls.Add( smallColorControl[ 40 ] );
+ Controls.Add( smallColorControl[ 25 ] );
+ Controls.Add( smallColorControl[ 26 ] );
+ Controls.Add( smallColorControl[ 27 ] );
+ Controls.Add( smallColorControl[ 28 ] );
+ Controls.Add( smallColorControl[ 29 ] );
+ Controls.Add( smallColorControl[ 30 ] );
+ Controls.Add( smallColorControl[ 31 ] );
+ Controls.Add( smallColorControl[ 32 ] );
+ Controls.Add( smallColorControl[ 18 ] );
+ Controls.Add( smallColorControl[ 14 ] );
+ Controls.Add( smallColorControl[ 36 ] );
+ Controls.Add( smallColorControl[ 12 ] );
+ Controls.Add( smallColorControl[ 13 ] );
+ Controls.Add( smallColorControl[ 10 ] );
+ Controls.Add( smallColorControl[ 11 ] );
+ Controls.Add( smallColorControl[ 8 ] );
+ Controls.Add( smallColorControl[ 9 ] );
+ Controls.Add( smallColorControl[ 20 ] );
+ Controls.Add( smallColorControl[ 34 ] );
+ Controls.Add( smallColorControl[ 35 ] );
+ Controls.Add( smallColorControl[ 21 ] );
+ Controls.Add( smallColorControl[ 16 ] );
+ Controls.Add( smallColorControl[ 15 ] );
+ Controls.Add( smallColorControl[ 33 ] );
+ Controls.Add( smallColorControl[ 17 ] );
+ Controls.Add( smallColorControl[ 19 ] );
+ Controls.Add( smallColorControl[ 37 ] );
+ Controls.Add( smallColorControl[ 24 ] );
+ Controls.Add( smallColorControl[ 23 ] );
+ Controls.Add( smallColorControl[ 38 ] );
+ Controls.Add( smallColorControl[ 22 ] );
+ Controls.Add( smallColorControl[ 39 ] );
+
+ Controls.Add( userColorLabel );
+ Controls.Add( baseColorLabel );
+
+ Size = new Size( 212, 238 );
+ ResumeLayout( false );
+
+ selectedSmallColorControl = smallColorControl[ 46 ]; // default, Black
+ selectedSmallColorControl.IsSelected = true;
+
+ CheckIfColorIsInPanel( );
+ }
+
+ private void CheckIfColorIsInPanel( )
+ {
+ if ( colorDialogPanel.ColorDialog.Color != Color.Black )
+ {
+ // check if we have a panel with a BackColor = ColorDialog.Color...
+ for ( int i = 0; i < smallColorControl.Length; i++ )
+ {
+ if ( smallColorControl[ i ].BackColor == colorDialogPanel.ColorDialog.Color )
+ {
+ selectedSmallColorControl = smallColorControl[ i ];
+ break;
+ }
+ }
+ }
+ }
+
+ void OnSmallColorControlClick( object sender, EventArgs e )
+ {
+ // previous selected smallcolorcontrol
+ if ( selectedSmallColorControl != (SmallColorControl)sender )
+ selectedSmallColorControl.IsSelected = false;
+
+ selectedSmallColorControl = (SmallColorControl)sender;
+
+ TriangleControl.CurrentBrightness = HSB.Brightness( selectedSmallColorControl.Color );
+
+ colorDialogPanel.UpdateControls( selectedSmallColorControl.Color );
+ colorDialogPanel.UpdateRGBTextBoxes( selectedSmallColorControl.Color );
+ colorDialogPanel.UpdateHSBTextBoxes( selectedSmallColorControl.Color );
+ }
+
+ public Color ColorToShow
+ {
+ get
+ {
+ return selectedSmallColorControl.Color;
+ }
+ }
+
+ public void SetUserColor( Color col )
+ {
+ userSmallColorControl[ currentlyUsedUserSmallColorControl ].Color = col;
+
+ // check if this.customColors already exists
+ if ( customColors == null )
+ {
+ customColors = new int[ 16 ];
+ int white = Color.White.ToArgb( );
+
+ for ( int i = 0; i < customColors.Length; i++ )
+ customColors[ i ] = white;
+ }
+
+ customColors[ currentlyUsedUserSmallColorControl ] = col.ToArgb( );
+
+ // update ColorDialog dialog property
+ colorDialogPanel.ColorDialog.CustomColors = customColors;
+
+ currentlyUsedUserSmallColorControl++;
+ if ( currentlyUsedUserSmallColorControl > 15 )
+ currentlyUsedUserSmallColorControl = 0;
+ }
+
+ public void SetCustomColors( )
+ {
+ int[] customColors = colorDialogPanel.ColorDialog.CustomColors;
+
+ for ( int i = 0; i < customColors.Length; i++ )
+ {
+ userSmallColorControl[ i ].Color = Color.FromArgb( customColors[ i ] );
+ }
+ }
+ }
+
+ internal class ColorMatrixControl : Panel
+ {
+ internal class DrawingBitmap
+ {
+ private Bitmap bitmap;
+
+ public DrawingBitmap( )
+ {
+ bitmap = new Bitmap( 180, 191 );
+
+ float hueadd = 241.0f / 178.0f;
+ float satsub = 241.0f / 189.0f;
+ float satpos = 240.0f;
+
+ // paint the matrix to the bitmap
+ for ( int height = 0; height < 191; height++ )
+ {
+ float huepos = 0.0f;
+
+ for ( int width = 0; width < 180; width++ )
+ {
+ HSB hsb = new HSB( );
+
+ hsb.hue = (int)huepos;
+ hsb.sat = (int)satpos;
+ hsb.bri = 120; // paint it with 120 to get a nice bitmap
+
+ bitmap.SetPixel( width, height, HSB.HSB2RGB( hsb.hue, hsb.sat, hsb.bri ) );
+
+ huepos += hueadd;
+ }
+
+ satpos -= satsub;
+ }
+ }
+
+ public Bitmap Bitmap
+ {
+ set
+ {
+ bitmap = value;
+ }
+
+ get
+ {
+ return bitmap;
+ }
+ }
+ }
+
+ internal class CrossCursor
+ {
+ private Bitmap bitmap;
+
+ private Color cursorColor;
+
+ public CrossCursor( )
+ {
+ bitmap = new Bitmap( 22, 22 );
+
+ cursorColor = Color.Black;
+
+ Draw( );
+ }
+
+ public void Draw( )
+ {
+ using( Pen pen = new Pen( ThemeEngine.Current.ResPool.GetSolidBrush( cursorColor ), 3 ) )
+ {
+ using( Graphics graphics = Graphics.FromImage( bitmap ) )
+ {
+ graphics.DrawLine( pen, 11, 0, 11, 7 );
+ graphics.DrawLine( pen, 11, 14, 11, 21 );
+ graphics.DrawLine( pen, 0, 11, 7, 11 );
+ graphics.DrawLine( pen, 14, 11, 21, 11 );
+ }
+ }
+ }
+
+ public Bitmap Bitmap
+ {
+ set
+ {
+ bitmap = value;
+ }
+
+ get
+ {
+ return bitmap;
+ }
+ }
+
+ public Color CursorColor
+ {
+ set
+ {
+ cursorColor = value;
+ }
+
+ get
+ {
+ return cursorColor;
+ }
+ }
+ }
+
+ private DrawingBitmap drawingBitmap = new DrawingBitmap( );
+
+ private CrossCursor crossCursor = new CrossCursor();
+
+ private bool mouseButtonDown = false;
+
+ private bool drawCross = true;
+
+ private Color color;
+
+ private int currentXPos;
+ private int currentYPos;
+
+ private const float xstep = 240.0f/178.0f;
+ private const float ystep = 240.0f/189.0f;
+
+ private ColorDialogPanel colorDialogPanel;
+
+ public ColorMatrixControl( ColorDialogPanel colorDialogPanel )
+ {
+ this.colorDialogPanel = colorDialogPanel;
+
+ SuspendLayout( );
+
+ BorderStyle = BorderStyle.Fixed3D;
+ Location = new Point( 0, 0 );
+ Size = new Size( 179, 190 );
+ TabIndex = 0;
+ TabStop = false;
+ //BackColor = SystemColors.Control;
+ Size = new Size( 179, 190 );
+
+ ResumeLayout( false );
+
+ SetStyle( ControlStyles.DoubleBuffer, true );
+ SetStyle( ControlStyles.AllPaintingInWmPaint, true );
+ SetStyle( ControlStyles.UserPaint, true );
+ }
+
+ protected override void OnPaint( PaintEventArgs e )
+ {
+ Draw( e );
+
+ base.OnPaint( e );
+ }
+
+ private void Draw( PaintEventArgs e )
+ {
+ e.Graphics.DrawImage( drawingBitmap.Bitmap, 0, 0 );
+
+ // drawCross is false if the mouse gets moved...
+ if ( drawCross )
+ {
+ e.Graphics.DrawImage( crossCursor.Bitmap, currentXPos - 11 , currentYPos - 11 );
+ }
+ }
+
+ protected override void OnMouseDown( MouseEventArgs e )
+ {
+ mouseButtonDown = true;
+ currentXPos = e.X;
+ currentYPos = e.Y;
+ if ( drawCross )
+ {
+ drawCross = false;
+ Invalidate( );
+ Update( );
+ }
+
+ UpdateControls( );
+
+ base.OnMouseDown( e );
+ }
+
+ protected override void OnMouseMove( MouseEventArgs e )
+ {
+ if ( mouseButtonDown )
+ if ( ( e.X < 178 && e.X >= 0 ) && ( e.Y < 189 && e.Y >= 0 ) ) // 177 189
+ {
+ currentXPos = e.X;
+ currentYPos = e.Y;
+ UpdateControls( );
+ }
+
+ base.OnMouseMove( e );
+ }
+
+ protected override void OnMouseUp( MouseEventArgs e )
+ {
+ mouseButtonDown = false;
+ drawCross = true;
+ Invalidate( );
+ Update( );
+ }
+
+ public Color ColorToShow
+ {
+ set
+ {
+ color = value;
+
+ HSB hsb = HSB.RGB2HSB( color );
+
+ currentXPos = (int)( (float)hsb.hue / xstep );
+ currentYPos = 189 - (int)( (float)hsb.sat / ystep );
+
+ if ( currentXPos < 0 )
+ currentXPos = 0;
+ if ( currentYPos < 0 )
+ currentYPos = 0;
+
+ Invalidate( );
+ Update( );
+
+ UpdateControls( );
+ }
+ }
+
+ private Color GetColorFromHSB( )
+ {
+ int hue = (int)( (float)currentXPos * xstep );
+ int sat = 240 - ( (int)( (float)currentYPos * ystep ) );
+ int bri = TriangleControl.CurrentBrightness;
+
+ return HSB.HSB2RGB( hue, sat, bri );
+ }
+
+ private void UpdateControls( )
+ {
+ Color tmpColor = GetColorFromHSB( );
+
+ // update the brightness control
+ colorDialogPanel.BrightnessControl.ShowColor( (int)( (float)currentXPos * xstep ), 240 - ( (int)( (float)currentYPos * ystep ) ) );
+
+ // update saturation text box
+ int satvalue = ( 240 - ( (int)( (float)currentYPos * ystep ) ) );
+ satvalue = satvalue == 240 ? 239 : satvalue;
+ colorDialogPanel.SatTextBox.Text = satvalue.ToString( );
+
+ // update hue text box
+ colorDialogPanel.HueTextBox.Text = ( (int)( (float)currentXPos * xstep ) ).ToString( );
+
+ // update the main selected color panel
+ colorDialogPanel.SelectedColorPanel.BackColor = tmpColor;
+
+ // and finally the rgb text boxes
+ colorDialogPanel.UpdateRGBTextBoxes( tmpColor );
+ }
+ }
+
+
+ internal class BrightnessControl : Panel
+ {
+ internal class DrawingBitmap
+ {
+ private Bitmap bitmap;
+
+ public DrawingBitmap( )
+ {
+ bitmap = new Bitmap( 14, 190 );
+ }
+
+ public Bitmap Bitmap
+ {
+ set
+ {
+ bitmap = value;
+ }
+
+ get
+ {
+ return bitmap;
+ }
+ }
+
+ // only hue and saturation are needed.
+ // color will be computed with an iteration
+ public void Draw( int hue, int sat )
+ {
+ float brisub = 240.0f / 190.0f;
+ float bri = 240.0f;
+
+ for ( int height = 0; height < 190; height++ )
+ {
+ for ( int width = 0; width < 14; width++ )
+ {
+ Color pixcolor = HSB.HSB2RGB( hue, sat, (int)bri );
+ bitmap.SetPixel( width, height, pixcolor );
+ }
+ bri = bri - brisub;
+ }
+ }
+ }
+
+ private const float step = 240.0f/189.0f;
+
+ private DrawingBitmap bitmap;
+
+ private Color color;
+
+ private ColorDialogPanel colorDialogPanel;
+
+ public BrightnessControl( ColorDialogPanel colorDialogPanel )
+ {
+ this.colorDialogPanel = colorDialogPanel;
+
+ SuspendLayout( );
+
+ BorderStyle = BorderStyle.Fixed3D;
+ Location = new Point( 0, 0 );
+ Size = new Size( 14, 190 );
+ TabIndex = 0;
+ TabStop = false;
+ Size = new Size( 14, 190 );
+ ResumeLayout( false );
+
+ bitmap = new DrawingBitmap( );
+
+ SetStyle( ControlStyles.DoubleBuffer, true );
+ SetStyle( ControlStyles.AllPaintingInWmPaint, true );
+ SetStyle( ControlStyles.UserPaint, true );
+ }
+
+
+ protected override void OnPaint( PaintEventArgs e )
+ {
+ e.Graphics.DrawImage( bitmap.Bitmap, 0, 0 );
+
+ base.OnPaint( e );
+ }
+
+ protected override void OnMouseDown( MouseEventArgs e )
+ {
+ colorDialogPanel.TriangleControl.TrianglePosition = (int)( (float)( 189 - e.Y ) * step );
+
+ base.OnMouseDown( e );
+ }
+
+ // this one is for ColorMatrixControl
+ public void ShowColor( int hue, int sat )
+ {
+ bitmap.Draw( hue, sat );
+ Invalidate( );
+ Update( );
+ }
+
+ // this one for the other controls
+ public Color ColorToShow
+ {
+ set
+ {
+ int hue, sat;
+ HSB.GetHueSaturation( value, out hue, out sat );
+ bitmap.Draw( hue, sat );
+ Invalidate( );
+ Update( );
+ }
+ }
+ }
+
+
+ internal class TriangleControl : Panel
+ {
+ private bool mouseButtonDown = false;
+
+ private int currentTrianglePosition = 195;
+// private Rectangle clipRectangle;
+
+ private const float briStep = 239.0f/186.0f;
+
+ private static int currentBrightness = 0;
+
+ private ColorDialogPanel colorDialogPanel;
+
+ public TriangleControl( ColorDialogPanel colorDialogPanel )
+ {
+ this.colorDialogPanel = colorDialogPanel;
+
+ Size = new Size( 16, 203 );
+
+ SetStyle( ControlStyles.DoubleBuffer, true );
+ SetStyle( ControlStyles.AllPaintingInWmPaint, true );
+ SetStyle( ControlStyles.UserPaint, true );
+ }
+
+ public static int CurrentBrightness
+ {
+ set
+ {
+ currentBrightness = value;
+ }
+
+ get
+ {
+ return currentBrightness;
+ }
+ }
+
+ protected override void OnPaint( PaintEventArgs e )
+ {
+ Draw( e );
+
+ base.OnPaint( e );
+ }
+
+ private void Draw( PaintEventArgs e )
+ {
+ e.Graphics.FillRectangle( ThemeEngine.Current.ResPool.GetSolidBrush( BackColor ), new Rectangle( 0, 0, 16, 203 ) );
+
+ Point[] trianglePoints = new Point[ 3 ]
+ {
+ new Point( 0, currentTrianglePosition ),
+ new Point( 8, currentTrianglePosition - 8 ),
+ new Point( 8, currentTrianglePosition + 8 )
+ };
+
+ e.Graphics.FillPolygon( ThemeEngine.Current.ResPool.GetSolidBrush( Color.Black ), trianglePoints );
+ }
+
+ protected override void OnMouseDown( MouseEventArgs e )
+ {
+ if ( e.Y > 195 || e.Y < 9 ) return; // helper until Cursor.Clip works
+
+ mouseButtonDown = true;
+ currentTrianglePosition = e.Y;
+
+ // Cursor.Clip doesn't yet work in Managed.Windows.Forms
+// clipRectangle = Cursor.Clip;
+// Point p = Location;
+// p.Y += 8;
+// Size s = Size;
+// s.Width -= 5;
+// s.Height -= 16;
+// Cursor.Clip = new Rectangle( Parent.PointToScreen( p ), s );
+
+ colorDialogPanel.BriTextBox.Text = TrianglePosition.ToString( );
+ colorDialogPanel.UpdateFromHSBTextBoxes( );
+
+ Invalidate( );
+ Update( );
+
+ base.OnMouseDown( e );
+ }
+
+ protected override void OnMouseMove( MouseEventArgs e )
+ {
+ if ( mouseButtonDown )
+ if ( e.Y < 196 && e.Y > 8 )
+ {
+ currentTrianglePosition = e.Y;
+
+ colorDialogPanel.BriTextBox.Text = TrianglePosition.ToString( );
+ colorDialogPanel.UpdateFromHSBTextBoxes( );
+
+ Invalidate( );
+ Update( );
+ }
+
+ base.OnMouseMove( e );
+ }
+
+ protected override void OnMouseUp( MouseEventArgs e )
+ {
+ mouseButtonDown = false;
+// Cursor.Clip = clipRectangle;
+
+ base.OnMouseUp( e );
+ }
+
+ public int TrianglePosition
+ {
+ get
+ {
+ float tmp = (float)( currentTrianglePosition - 9 );
+ tmp = tmp * briStep;
+
+ int retval = 239 - (int)tmp;
+
+ TriangleControl.CurrentBrightness = retval;
+
+ return retval;
+ }
+
+ set
+ {
+ float tmp = (float)value / briStep;
+ currentTrianglePosition = 186 - (int)tmp + 9;
+
+ colorDialogPanel.BriTextBox.Text = TrianglePosition.ToString( );
+ colorDialogPanel.UpdateFromHSBTextBoxes( );
+
+ Invalidate( );
+ Update( );
+ }
+ }
+
+ public Color ColorToShow
+ {
+ set
+ {
+ TrianglePosition = HSB.Brightness( value );
+ }
+ }
+ }
+ #endregion
+ }
+}