/// <summary> /// The timer is used to control the color wheel update from the text boxes. /// If we update instantly, we are unable to type, therefore allow a delay for typing /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timer1_Tick(object sender, EventArgs e) { // The tag contains the control that started the timer Control c = (Control)timer1.Tag; try { if ((Color)c.Tag == Color.White) { this.color.Alpha = Math.Max(0, Math.Min(255, (int)(float.Parse(c.Text) * 255))); } if ((Color)c.Tag == Color.Red) { this.color.Red = Math.Max(0, Math.Min(255, (int)(float.Parse(c.Text) * 255))); } if ((Color)c.Tag == Color.Green) { this.color.Green = Math.Max(0, Math.Min(255, (int)(float.Parse(c.Text) * 255))); } if ((Color)c.Tag == Color.Blue) { this.color.Blue = Math.Max(0, Math.Min(255, (int)(float.Parse(c.Text) * 255))); } this.hsvColor = ColorHandler.RGBtoHSV(this.color); updateBar(); } catch { } timer1.Stop(); }
/// <summary> /// The control_ lost focus. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The e. /// </param> private void Control_LostFocus(object sender, EventArgs e) { // In case they leave the text box before the timer has expired, call the // timer1_tick to update the color wheel with the new data. if (timer1.Enabled) { timer1_Tick(sender, e); } hsvColor = ColorHandler.RGBtoHSV(this.color); updateBar(); this.Refresh(); }
private void GrabColor(object sender, Point mouseXY) { int cntlNum = this.Controls.IndexOf((Control)sender); int cx = mouseXY.X; int cy = mouseXY.Y; switch (cntlNum) { case 0: // center our coordinate system so the middle is (0,0), and positive Y is facing up cx -= (this.Controls[cntlNum].Width / 2); cy -= (this.Controls[cntlNum].Height / 2); if (cx < this.Controls[cntlNum].Width / 2) { double theta = Math.Atan2(cy, cx); if (theta < 0) { theta += 2 * Math.PI; } double alpha = Math.Sqrt((cx * cx) + (cy * cy)); int h = (int)((theta / (Math.PI * 2)) * 360.0); int s = (int)Math.Min(100.0, (alpha / (double)(this.Controls[0].Width / 2)) * 100); int v = hsvColor.value; hsvColor = new ColorHandler.HSV(h, s, v); OnColorChanged(); updateBar(); } break; case 1: if (cx < this.Controls[cntlNum].Width) { hsvColor.value = Math.Max(0, Math.Min(100, 100 - (cy * 100 / this.Controls[cntlNum].Height))); updateBox(); } break; } this.color = ColorHandler.HSVtoRGB(hsvColor); Invalidate(true); }
/// <summary> /// The draw bar. /// </summary> /// <param name="g"> /// The g. /// </param> /// <param name="width"> /// The width. /// </param> /// <param name="height"> /// The height. /// </param> private void DrawBar(Graphics g, int width, int height) { PointF[] points = new PointF[2]; for (int i = 0; i < points.Length; i++) { points[i].X = width / 2; points[i].Y = i * height; } ColorHandler.HSV col = new ColorHandler.HSV(hsvColor.Hue, hsvColor.Saturation, 100); using ( LinearGradientBrush lgb = new LinearGradientBrush( points[0], points[1], ColorHandler.HSVtoColor(col), Color.Black)) { g.FillRectangle(lgb, 0, 0, width, height); } }
/// <summary> /// The control_ text changed. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The e. /// </param> private void Control_TextChanged(object sender, EventArgs e) { if (updatingColors) { return; } Control c = (Control)sender; try { if ((Color)c.Tag == Color.White) { this.color.Alpha = Math.Max(0, Math.Min(255, (int)(float.Parse(c.Text) * 255))); } if ((Color)c.Tag == Color.Red) { this.color.Red = Math.Max(0, Math.Min(255, (int)(float.Parse(c.Text) * 255))); } if ((Color)c.Tag == Color.Green) { this.color.Green = Math.Max(0, Math.Min(255, (int)(float.Parse(c.Text) * 255))); } if ((Color)c.Tag == Color.Blue) { this.color.Blue = Math.Max(0, Math.Min(255, (int)(float.Parse(c.Text) * 255))); } this.hsvColor = ColorHandler.RGBtoHSV(this.color); updateBar(); } catch { } }
/// <summary> /// Initializes a new instance of the <see cref="ColorChangedEventArgs"/> class. /// </summary> /// <param name="RGB">The RGB.</param> /// <param name="HSV">The HSV.</param> /// <remarks></remarks> public ColorChangedEventArgs(ColorHandler.RGB RGB, ColorHandler.HSV HSV) { mRGB = RGB; mHSV = HSV; }
/// <summary> /// The control_ lost focus. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The e. /// </param> private void Control_LostFocus(object sender, EventArgs e) { hsvColor = ColorHandler.RGBtoHSV(this.color); updateBar(); this.Refresh(); }
/// <summary> /// The control_ lost focus. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The e. /// </param> private void Control_LostFocus(object sender, EventArgs e) { // In case they leave the text box before the timer has expired, call the // timer1_tick to update the color wheel with the new data. if (timer1.Enabled) timer1_Tick(sender, e); hsvColor = ColorHandler.RGBtoHSV(this.color); updateBar(); this.Refresh(); }