aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/GraphicObjects/ColorSelector.cs
blob: 13a588ce43093d19a8f9ede9a1fb4796fd51153a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//
//  ColorPicker.cs
//
//  Author:
//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
//
//  Copyright (c) 2016 jp
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Xml.Serialization;
using System.ComponentModel;

namespace Crow
{
	public class ColorSelector : GraphicObject
	{
		public ColorSelector (): base()
		{
		}

		const double div = 255.0;
		const double colDiv = 1.0 / div;
		protected Point mousePos;

		public override void onMouseMove (object sender, MouseMoveEventArgs e)
		{
			base.onMouseMove (sender, e);
			if (CurrentInterface.Mouse.LeftButton == ButtonState.Released)
				return;
			updateMouseLocalPos (e.Position);
		}
		public override void onMouseDown (object sender, MouseButtonEventArgs e)
		{
			base.onMouseDown (sender, e);
			if (e.Button == MouseButton.Left)
				updateMouseLocalPos (e.Position);
		}

		protected virtual void updateMouseLocalPos(Point mPos){
			Rectangle r = ScreenCoordinates (Slot);
			Rectangle cb = ClientRectangle;
			mousePos = mPos - r.Position;

			mousePos.X = Math.Max(cb.X, mousePos.X);
			mousePos.X = Math.Min(cb.Right-1, mousePos.X);
			mousePos.Y = Math.Max(cb.Y, mousePos.Y);
			mousePos.Y = Math.Min(cb.Bottom-1, mousePos.Y);
		}
//		virtual protected void updateColorFromPicking(bool redraw = true){
//			SelectedColor = new SolidColor(getPixelAt(mousePos.X, mousePos.Y));
//
//			updateHSV ();
//
//			NotifyValueChanged ("R", R);
//			NotifyValueChanged ("G", G);
//			NotifyValueChanged ("B", B);
//			NotifyValueChanged ("A", A);
//
//			if (redraw)
//				RegisterForRedraw ();
//		}
//
//		protected Color getPixelAt(int x, int y){
//			if (bmp == null)
//				return Color.Transparent;
//
//			int ptr = y * Slot.Width * 4 + x * 4;
//
//			return new Color(
//				(double)bmp[ptr + 2] * colDiv,
//				(double)bmp[ptr + 1] * colDiv,
//				(double)bmp[ptr] * colDiv,
//				(double)bmp[ptr + 3] * colDiv);
//		}
	}
}