Fix bugs in previous commit that caused FTBFS in synfig and ETL FTBFS with older...
[synfig.git] / synfig-studio / tags / synfigstudio_0_61_03 / synfig-studio / src / gtkmm / widget_coloredit.h
1 /* === S Y N F I G ========================================================= */
2 /*!     \file widget_coloredit.h
3 **      \brief Template Header
4 **
5 **      $Id: widget_coloredit.h,v 1.1.1.1 2005/01/07 03:34:37 darco Exp $
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         ColorSlider *slider_A;
127         ColorSlider *slider_Y;
128         ColorSlider *slider_U;
129         ColorSlider *slider_V;
130         ColorSlider *slider_SAT;
131         ColorSlider *slider_HUE;
132         
133         Widget_Color widget_color;
134         
135         bool hold_signals;
136         
137         bool clamp_;
138         
139         Gtk::SpinButton *spinbutton_R;
140         Gtk::SpinButton *spinbutton_G;
141         Gtk::SpinButton *spinbutton_B;
142         Gtk::SpinButton *spinbutton_A;
143
144         Gtk::Adjustment R_adjustment;
145         Gtk::Adjustment G_adjustment;
146         Gtk::Adjustment B_adjustment;
147         Gtk::Adjustment A_adjustment;
148         
149         synfig::Color color;
150
151         Gtk::Notebook* notebook;
152
153 protected:
154         
155         void on_value_changed();
156
157 public:
158
159         sigc::signal<void>& signal_activated() { return signal_activated_; }
160
161         sigc::signal<void>& signal_activate() { return signal_activated_; }
162
163         void on_slider_moved(ColorSlider::Type type, float amount);
164
165         //Glib::SignalProxy0<void> signal_activate() { return spinbutton_A->signal_activate(); }
166         
167         sigc::signal<void>& signal_value_changed() { return signal_value_changed_; }
168         
169         void activated() { signal_activated_(); }
170         void activate() { signal_activated_(); }
171         void set_value(const synfig::Color &data);
172         const synfig::Color &get_value();
173         synfig::Color get_value_raw();
174         void set_has_frame(bool x);
175         void set_digits(int x);
176         Widget_ColorEdit();
177         ~Widget_ColorEdit();
178 }; // END of class Widget_ColorEdit
179         
180 }; // END of namespace studio
181
182 /* === E N D =============================================================== */
183
184 #endif