63dcfa6002f356d68927b694c449c12d0b4b62c8
[synfig.git] /
1 /* === S Y N F I G ========================================================= */
2 /*!     \file widget_coloredit.h
3 **      \brief Template Header
4 **
5 **      $Id$
6 **
7 **      \legal
8 **      Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
9 **
10 **      This package is free software; you can redistribute it and/or
11 **      modify it under the terms of the GNU General Public License as
12 **      published by the Free Software Foundation; either version 2 of
13 **      the License, or (at your option) any later version.
14 **
15 **      This package is distributed in the hope that it will be useful,
16 **      but WITHOUT ANY WARRANTY; without even the implied warranty of
17 **      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 **      General Public License for more details.
19 **      \endlegal
20 */
21 /* ========================================================================= */
22
23 /* === S T A R T =========================================================== */
24
25 #ifndef __SYNFIG_STUDIO_WIDGET_COLOREDIT_H
26 #define __SYNFIG_STUDIO_WIDGET_COLOREDIT_H
27
28 /* === H E A D E R S ======================================================= */
29
30 #include <gtkmm/box.h>
31 #include <gtkmm/table.h>
32 #include <gtkmm/spinbutton.h>
33 #include <gtkmm/adjustment.h>
34 #include <gtkmm/drawingarea.h>
35 #include <synfig/color.h>
36 #include "widget_color.h"
37
38 /* === M A C R O S ========================================================= */
39
40 /* === T Y P E D E F S ===================================================== */
41
42 /* === C L A S S E S & S T R U C T S ======================================= */
43
44 namespace Gtk {
45         class Notebook;
46 };
47
48 namespace studio {
49
50 class ColorSlider : public Gtk::DrawingArea
51 {
52 public:
53         enum Type
54         {
55                 TYPE_R,
56                 TYPE_G,
57                 TYPE_B,
58                 TYPE_Y,
59                 TYPE_U,
60                 TYPE_V,
61                 TYPE_HUE,
62                 TYPE_SAT,
63                 TYPE_A,
64
65                 TYPE_END
66         };
67
68 private:
69
70         sigc::signal<void,Type,float> signal_slider_moved_;
71         sigc::signal<void> signal_activated_;
72
73         Type type;
74         synfig::Color color_;
75
76 public:
77
78         sigc::signal<void,Type,float>& signal_slider_moved() { return signal_slider_moved_; }
79         sigc::signal<void>& signal_activated() { return signal_activated_; }
80
81         Type
82         get_type()const { return type; }
83
84         const synfig::Color&
85         get_color()const { return color_; }
86
87
88         ColorSlider(const Type &x=TYPE_Y);
89
90         void
91         set_type(Type x);
92
93         void
94         set_color(synfig::Color x);
95
96         static void adjust_color(Type type, synfig::Color &color, float amount);
97
98 private:
99         typedef void (*slider_color_func)(synfig::Color &,float);
100
101         static void slider_color_TYPE_R(synfig::Color &color, float amount);
102         static void slider_color_TYPE_G(synfig::Color &color, float amount);
103         static void slider_color_TYPE_B(synfig::Color &color, float amount);
104         static void slider_color_TYPE_Y(synfig::Color &color, float amount);
105         static void slider_color_TYPE_U(synfig::Color &color, float amount);
106         static void slider_color_TYPE_V(synfig::Color &color, float amount);
107         static void slider_color_TYPE_HUE(synfig::Color &color, float amount);
108         static void slider_color_TYPE_SAT(synfig::Color &color, float amount);
109         static void slider_color_TYPE_A(synfig::Color &color, float amount);
110
111
112         bool
113         redraw(GdkEventExpose*bleh);
114         bool on_event(GdkEvent *event);
115 }; // END of class ColorSlider
116
117
118 class Widget_ColorEdit : public Gtk::Table
119 {
120         sigc::signal<void> signal_activated_;
121         sigc::signal<void> signal_value_changed_;
122
123         ColorSlider *slider_R;
124         ColorSlider *slider_G;
125         ColorSlider *slider_B;
126         Gtk::Label *hex_color_label;
127         Gtk::Entry *hex_color;
128
129         ColorSlider *slider_A;
130         ColorSlider *slider_Y;
131         ColorSlider *slider_U;
132         ColorSlider *slider_V;
133         ColorSlider *slider_SAT;
134         ColorSlider *slider_HUE;
135
136         Widget_Color widget_color;
137
138         bool hold_signals;
139
140         bool clamp_;
141
142         Gtk::SpinButton *spinbutton_R;
143         Gtk::SpinButton *spinbutton_G;
144         Gtk::SpinButton *spinbutton_B;
145         Gtk::SpinButton *spinbutton_A;
146
147         Gtk::Adjustment R_adjustment;
148         Gtk::Adjustment G_adjustment;
149         Gtk::Adjustment B_adjustment;
150         Gtk::Adjustment A_adjustment;
151
152         synfig::Color color;
153
154         Gtk::Notebook* notebook;
155
156 protected:
157
158         void on_value_changed();
159
160 public:
161
162         sigc::signal<void>& signal_activated() { return signal_activated_; }
163
164         sigc::signal<void>& signal_activate() { return signal_activated_; }
165
166         void on_slider_moved(ColorSlider::Type type, float amount);
167         void on_hex_edited();
168
169         //Glib::SignalProxy0<void> signal_activate() { return spinbutton_A->signal_activate(); }
170
171         sigc::signal<void>& signal_value_changed() { return signal_value_changed_; }
172
173         void activated() { signal_activated_(); }
174         void activate() { signal_activated_(); }
175         void set_value(const synfig::Color &data);
176         const synfig::Color &get_value();
177         synfig::Color get_value_raw();
178         void set_has_frame(bool x);
179         void set_digits(int x);
180         Widget_ColorEdit();
181         ~Widget_ColorEdit();
182 }; // END of class Widget_ColorEdit
183
184 }; // END of namespace studio
185
186 /* === E N D =============================================================== */
187
188 #endif