my log
[synfig.git] / synfig-studio / trunk / 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 Robert B. Quattlebaum Jr.
9 **
10 **      This software and associated documentation
11 **      are CONFIDENTIAL and PROPRIETARY property of
12 **      the above-mentioned copyright holder.
13 **
14 **      You may not copy, print, publish, or in any
15 **      other way distribute this software without
16 **      a prior written agreement with
17 **      the copyright holder.
18 **      \endlegal
19 */
20 /* ========================================================================= */
21
22 /* === S T A R T =========================================================== */
23
24 #ifndef __SYNFIG_STUDIO_WIDGET_COLOREDIT_H
25 #define __SYNFIG_STUDIO_WIDGET_COLOREDIT_H
26
27 /* === H E A D E R S ======================================================= */
28
29 #include <gtkmm/box.h>
30 #include <gtkmm/table.h>
31 #include <gtkmm/spinbutton.h>
32 #include <gtkmm/adjustment.h>
33 #include <gtkmm/drawingarea.h>
34 #include <synfig/color.h>
35 #include "widget_color.h"
36
37 /* === M A C R O S ========================================================= */
38
39 /* === T Y P E D E F S ===================================================== */
40
41 /* === C L A S S E S & S T R U C T S ======================================= */
42
43 namespace Gtk {
44         class Notebook;
45 };
46
47 namespace studio {
48
49 class ColorSlider : public Gtk::DrawingArea
50 {
51 public:
52         enum Type
53         {
54                 TYPE_R,
55                 TYPE_G,
56                 TYPE_B,
57                 TYPE_Y,
58                 TYPE_U,
59                 TYPE_V,
60                 TYPE_HUE,
61                 TYPE_SAT,
62                 TYPE_A,
63                 
64                 TYPE_END
65         };
66         
67 private:
68
69         sigc::signal<void,Type,float> signal_slider_moved_;
70         sigc::signal<void> signal_activated_;
71
72         Type type;
73         synfig::Color color_;
74
75 public:
76
77         sigc::signal<void,Type,float>& signal_slider_moved() { return signal_slider_moved_; }
78         sigc::signal<void>& signal_activated() { return signal_activated_; }
79
80         Type
81         get_type()const { return type; }
82
83         const synfig::Color&
84         get_color()const { return color_; }
85
86
87         ColorSlider(const Type &x=TYPE_Y);
88
89         void
90         set_type(Type x);
91
92         void
93         set_color(synfig::Color x);
94
95         static void adjust_color(Type type, synfig::Color &color, float amount);
96
97 private:
98         typedef void (*slider_color_func)(synfig::Color &,float);
99
100         static void slider_color_TYPE_R(synfig::Color &color, float amount);
101         static void slider_color_TYPE_G(synfig::Color &color, float amount);
102         static void slider_color_TYPE_B(synfig::Color &color, float amount);
103         static void slider_color_TYPE_Y(synfig::Color &color, float amount);
104         static void slider_color_TYPE_U(synfig::Color &color, float amount);
105         static void slider_color_TYPE_V(synfig::Color &color, float amount);
106         static void slider_color_TYPE_HUE(synfig::Color &color, float amount);
107         static void slider_color_TYPE_SAT(synfig::Color &color, float amount);
108         static void slider_color_TYPE_A(synfig::Color &color, float amount);
109         
110
111         bool
112         redraw(GdkEventExpose*bleh);
113         bool on_event(GdkEvent *event);
114 }; // END of class ColorSlider
115
116         
117 class Widget_ColorEdit : public Gtk::Table
118 {
119         sigc::signal<void> signal_activated_;
120         sigc::signal<void> signal_value_changed_;
121
122         ColorSlider *slider_R;
123         ColorSlider *slider_G;
124         ColorSlider *slider_B;
125         ColorSlider *slider_A;
126         ColorSlider *slider_Y;
127         ColorSlider *slider_U;
128         ColorSlider *slider_V;
129         ColorSlider *slider_SAT;
130         ColorSlider *slider_HUE;
131         
132         Widget_Color widget_color;
133         
134         bool hold_signals;
135         
136         bool clamp_;
137         
138         Gtk::SpinButton *spinbutton_R;
139         Gtk::SpinButton *spinbutton_G;
140         Gtk::SpinButton *spinbutton_B;
141         Gtk::SpinButton *spinbutton_A;
142
143         Gtk::Adjustment R_adjustment;
144         Gtk::Adjustment G_adjustment;
145         Gtk::Adjustment B_adjustment;
146         Gtk::Adjustment A_adjustment;
147         
148         synfig::Color color;
149
150         Gtk::Notebook* notebook;
151
152 protected:
153         
154         void on_value_changed();
155
156 public:
157
158         sigc::signal<void>& signal_activated() { return signal_activated_; }
159
160         sigc::signal<void>& signal_activate() { return signal_activated_; }
161
162         void on_slider_moved(ColorSlider::Type type, float amount);
163
164         //Glib::SignalProxy0<void> signal_activate() { return spinbutton_A->signal_activate(); }
165         
166         sigc::signal<void>& signal_value_changed() { return signal_value_changed_; }
167         
168         void activated() { signal_activated_(); }
169         void activate() { signal_activated_(); }
170         void set_value(const synfig::Color &data);
171         const synfig::Color &get_value();
172         synfig::Color get_value_raw();
173         void set_has_frame(bool x);
174         void set_digits(int x);
175         Widget_ColorEdit();
176         ~Widget_ColorEdit();
177 }; // END of class Widget_ColorEdit
178         
179 }; // END of namespace studio
180
181 /* === E N D =============================================================== */
182
183 #endif