00001 #ifndef COLORPICKER_H
00002 #define COLORPICKER_H
00003
00004 #include "condition.inc"
00005 #include "guicast.h"
00006 #include "mutex.inc"
00007 #include "thread.h"
00008 #include "vframe.inc"
00009
00010 class ColorWindow;
00011 class PaletteWheel;
00012 class PaletteWheelValue;
00013 class PaletteOutput;
00014 class PaletteHue;
00015 class PaletteSaturation;
00016 class PaletteValue;
00017 class PaletteRed;
00018 class PaletteGreen;
00019 class PaletteBlue;
00020 class PaletteAlpha;
00021
00022 class ColorThread : public Thread
00023 {
00024 public:
00025 ColorThread(int do_alpha = 0, char *title = 0);
00026 ~ColorThread();
00027
00028
00029 void run();
00030 void start_window(int output, int alpha);
00031 virtual int handle_new_color(int output, int alpha);
00032 void update_gui(int output, int alpha);
00033
00034 private:
00035 friend class ColorWindow;
00036
00037 ColorWindow *window;
00038 Condition *completion;
00039
00040 Mutex *mutex;
00041
00042 int output;
00043 int alpha;
00044 int do_alpha;
00045 char *title;
00046 };
00047
00048 class ColorWindow : public BC_Window
00049 {
00050 public:
00051 ColorWindow(ColorThread *thread, int x, int y, char *title);
00052
00053 void create_objects();
00054 void change_values();
00055 int close_event();
00056 void update_display();
00057 void update_rgb();
00058 int handle_event();
00059
00060 ColorThread *thread;
00061
00062 PaletteWheel *wheel;
00063 PaletteWheelValue *wheel_value;
00064 PaletteOutput *output;
00065 PaletteHue *hue;
00066 PaletteSaturation *saturation;
00067 PaletteValue *value;
00068 PaletteRed *red;
00069 PaletteGreen *green;
00070 PaletteBlue *blue;
00071 PaletteAlpha *alpha;
00072 VFrame *value_bitmap;
00073 float h, s, v, r, g, b, a;
00074 };
00075
00076
00077 class PaletteWheel : public BC_SubWindow
00078 {
00079 public:
00080 PaletteWheel(ColorWindow *window, int x, int y);
00081 ~PaletteWheel();
00082 int button_press_event();
00083 int cursor_motion_event();
00084 int button_release_event();
00085
00086 int create_objects();
00087 int draw(float hue, float saturation);
00088 int get_angle(float x1, float y1, float x2, float y2);
00089 float torads(float angle);
00090 ColorWindow *window;
00091 float oldhue;
00092 float oldsaturation;
00093 int button_down;
00094 };
00095
00096 class PaletteWheelValue : public BC_SubWindow
00097 {
00098 public:
00099 PaletteWheelValue(ColorWindow *window, int x, int y);
00100 ~PaletteWheelValue();
00101 int create_objects();
00102 int button_press_event();
00103 int cursor_motion_event();
00104 int button_release_event();
00105 int draw(float hue, float saturation, float value);
00106 ColorWindow *window;
00107 int button_down;
00108
00109 VFrame *frame;
00110 };
00111
00112 class PaletteOutput : public BC_SubWindow
00113 {
00114 public:
00115 PaletteOutput(ColorWindow *window, int x, int y);
00116 ~PaletteOutput();
00117 int create_objects();
00118 int handle_event();
00119 int draw();
00120 ColorWindow *window;
00121 };
00122
00123 class PaletteHue : public BC_ISlider
00124 {
00125 public:
00126 PaletteHue(ColorWindow *window, int x, int y);
00127 ~PaletteHue();
00128 int handle_event();
00129 ColorWindow *window;
00130 };
00131
00132 class PaletteSaturation : public BC_FSlider
00133 {
00134 public:
00135 PaletteSaturation(ColorWindow *window, int x, int y);
00136 ~PaletteSaturation();
00137 int handle_event();
00138 ColorWindow *window;
00139 };
00140
00141 class PaletteValue : public BC_FSlider
00142 {
00143 public:
00144 PaletteValue(ColorWindow *window, int x, int y);
00145 ~PaletteValue();
00146 int handle_event();
00147 ColorWindow *window;
00148 };
00149
00150 class PaletteRed : public BC_FSlider
00151 {
00152 public:
00153 PaletteRed(ColorWindow *window, int x, int y);
00154 ~PaletteRed();
00155 int handle_event();
00156 ColorWindow *window;
00157 };
00158
00159 class PaletteGreen : public BC_FSlider
00160 {
00161 public:
00162 PaletteGreen(ColorWindow *window, int x, int y);
00163 ~PaletteGreen();
00164 int handle_event();
00165 ColorWindow *window;
00166 };
00167
00168 class PaletteBlue : public BC_FSlider
00169 {
00170 public:
00171 PaletteBlue(ColorWindow *window, int x, int y);
00172 ~PaletteBlue();
00173 int handle_event();
00174 ColorWindow *window;
00175 };
00176
00177 class PaletteAlpha : public BC_FSlider
00178 {
00179 public:
00180 PaletteAlpha(ColorWindow *window, int x, int y);
00181 ~PaletteAlpha();
00182 int handle_event();
00183 ColorWindow *window;
00184 };
00185
00186 #endif