+ #endregion
+ }\r
+\r
+\r
+ class CustomColorPicker : UserControl\r
+ {\r
+ Color[,] colors;\r
+ bool highlighting;\r
+ int x, y;\r
+ public CustomColorPicker ()\r
+ {\r
+ colors = new Color[8, 8];\r
+ colors[0, 0] = Color.White;\r
+ colors[1, 0] = Color.FromArgb (224, 224, 224);\r
+ colors[2, 0] = Color.Silver;\r
+ colors[3, 0] = Color.Gray;\r
+ colors[4, 0] = Color.FromArgb (64, 64, 64);\r
+ colors[5, 0] = Color.Black;\r
+ colors[6, 0] = Color.White;\r
+ colors[7, 0] = Color.White;\r
+\r
+ colors[0, 1] = Color.FromArgb (255, 192, 192);\r
+ colors[1, 1] = Color.FromArgb (255, 128, 128);\r
+ colors[2, 1] = Color.Red;\r
+ colors[3, 1] = Color.FromArgb (192, 0, 0);\r
+ colors[4, 1] = Color.Maroon;\r
+ colors[5, 1] = Color.FromArgb (64, 0, 0);\r
+ colors[6, 1] = Color.White;\r
+ colors[7, 1] = Color.White;\r
+\r
+ colors[0, 2] = Color.FromArgb (255, 224, 192);\r
+ colors[1, 2] = Color.FromArgb (255, 192, 128);\r
+ colors[2, 2] = Color.FromArgb (255, 128, 0);\r
+ colors[3, 2] = Color.FromArgb (192, 64, 0);\r
+ colors[4, 2] = Color.FromArgb (128, 64, 0);\r
+ colors[5, 2] = Color.FromArgb (128, 64, 64);\r
+ colors[6, 2] = Color.White;\r
+ colors[7, 2] = Color.White;\r
+\r
+ colors[0, 3] = Color.FromArgb (255, 255, 192);\r
+ colors[1, 3] = Color.FromArgb (255, 255, 128);\r
+ colors[2, 3] = Color.Yellow;\r
+ colors[3, 3] = Color.FromArgb (192, 192, 0);\r
+ colors[4, 3] = Color.Olive;\r
+ colors[5, 3] = Color.FromArgb (64, 64, 0);\r
+ colors[6, 3] = Color.White;\r
+ colors[7, 3] = Color.White;\r
+\r
+ colors[0, 4] = Color.FromArgb (192, 255, 192);\r
+ colors[1, 4] = Color.FromArgb (128, 255, 128);\r
+ colors[2, 4] = Color.Lime;\r
+ colors[3, 4] = Color.FromArgb (0, 192, 0);\r
+ colors[4, 4] = Color.Green;\r
+ colors[5, 4] = Color.FromArgb (0, 64, 0);\r
+ colors[6, 4] = Color.White;\r
+ colors[7, 4] = Color.White;\r
+\r
+ colors[0, 5] = Color.FromArgb (192, 255, 255);\r
+ colors[1, 5] = Color.FromArgb (128, 255, 255);\r
+ colors[2, 5] = Color.Cyan;\r
+ colors[3, 5] = Color.FromArgb (0, 192, 192);\r
+ colors[4, 5] = Color.Teal;\r
+ colors[5, 5] = Color.FromArgb (0, 64, 64);\r
+ colors[6, 5] = Color.White;\r
+ colors[7, 5] = Color.White;\r
+\r
+ colors[0, 6] = Color.FromArgb (192, 192, 255);\r
+ colors[1, 6] = Color.FromArgb (128, 128, 255);\r
+ colors[2, 6] = Color.Blue;\r
+ colors[3, 6] = Color.FromArgb (0, 0, 192);\r
+ colors[4, 6] = Color.Navy;\r
+ colors[5, 6] = Color.FromArgb (0, 0, 64);\r
+ colors[6, 6] = Color.White;\r
+ colors[7, 6] = Color.White;\r
+\r
+ colors[0, 7] = Color.FromArgb (255, 192, 255);\r
+ colors[1, 7] = Color.FromArgb (255, 128, 255);\r
+ colors[2, 7] = Color.Fuchsia;\r
+ colors[3, 7] = Color.FromArgb (192, 0, 192);\r
+ colors[4, 7] = Color.Purple;\r
+ colors[5, 7] = Color.FromArgb (64, 0, 64);\r
+ colors[6, 7] = Color.White;\r
+ colors[7, 7] = Color.White;\r
+ }\r
+\r
+ public event EventHandler ColorChanged;\r
+\r
+ protected override void OnPaint (PaintEventArgs e)\r
+ {\r
+ for (int i = 0; i < 8; i++)\r
+ for (int j = 0; j < 8; j++) {\r
+ DrawRect (e.Graphics, colors[i, j], j * 24, i * 24);\r
+ }\r
+\r
+ if (highlighting) {\r
+ int i = x / 24;\r
+ int j = y / 24;\r
+ ControlPaint.DrawFocusRectangle (e.Graphics, new Rectangle (i * 24 - 2, j * 24 - 2, 24, 24));\r
+ }\r
+\r
+ base.OnPaint (e);\r
+ }\r
+\r
+ void DrawRect (Graphics g, Color color, int x, int y)\r
+ {\r
+ using (SolidBrush brush = new SolidBrush (color))\r
+ g.FillRectangle (brush, x, y, 20, 20);\r
+ ControlPaint.DrawBorder3D (g, x, y, 20, 20);\r
+ }\r
+\r
+ protected override void OnMouseDown (MouseEventArgs e)\r
+ {\r
+ if (e.X % 24 < 20 && e.Y % 24 < 20) {\r
+ x = e.X;\r
+ y = e.Y;\r
+ highlighting = true;\r
+ Invalidate ();\r
+ }\r
+ base.OnMouseDown (e);\r
+ }\r
+\r
+ protected override void OnMouseUp (MouseEventArgs e)\r
+ {\r
+ if (highlighting && this.ClientRectangle.Contains (e.X, e.Y)) {\r
+ if (ColorChanged != null)\r
+ ColorChanged (colors[y / 24, x / 24], EventArgs.Empty);\r
+ highlighting = false;\r
+ }\r
+ base.OnMouseUp (e);\r
+ }\r
+\r
+ protected override void OnMouseMove (MouseEventArgs e)\r
+ {\r
+ if (highlighting) {\r
+ int old_x = x;\r
+ int old_y = y;\r
+ x = e.X;\r
+ y = e.Y;\r
+ if ((old_x / 24 != x / 24 || old_y / 24 != y / 24) &&\r
+ x / 24 < 8 && y / 24 < 8) {\r
+ Region r = new Region ();\r
+ r.Union (new Rectangle (old_x - 2, old_y - 2, 24, 24));\r
+ r.Union (new Rectangle (x - 2, y - 2, 24, 24));\r
+ Invalidate (r);\r
+ }\r
+ }\r
+ base.OnMouseMove (e);\r
+ }\r