+class ColorButton : public BC_Button
+{
+public:
+ ColorButton(const char *title,
+ int x, int y, int w, int h,
+ int color, int alpha, int ok_cancel);
+ ~ColorButton();
+
+ virtual void set_color(int color);
+ virtual int handle_new_color(int color, int alpha);
+ virtual void handle_done_event(int result);
+
+ void close_picker();
+ void update_gui(int color, int alpha);
+ void update_gui(int color);
+ int handle_event();
+
+ const char *title;
+ int color, alpha, ok_cancel;
+ int orig_color, orig_alpha;
+
+ VFrame *vframes[3];
+ ColorButtonPicker *color_picker;
+ ColorButtonThread *color_thread;
+};
+
+class ColorButtonPicker : public ColorPicker
+{
+public:
+ ColorButtonPicker(ColorButton *color_button);
+ ~ColorButtonPicker();
+ void update(int color, int alpha);
+ int handle_new_color(int color, int alpha);
+ void handle_done_event(int result);
+ void update_gui();
+ void update_gui(int color, int alpha);
+
+ ColorButton *color_button;
+};
+
+class ColorButtonThread : public Thread
+{
+public:
+ ColorButtonThread(ColorButton *color_button);
+ ~ColorButtonThread();
+
+ void start();
+ void stop();
+ void run();
+
+ ColorButton *color_button;
+ Condition *update_lock;
+ int done;
+};
+
+class ColorBoxButton : public ColorButton
+{
+public:
+ ColorBoxButton(const char *title,
+ int x, int y, int w, int h,
+ int color, int alpha, int ok_cancel);
+ ~ColorBoxButton();
+ void create_objects();
+
+ virtual int handle_new_color(int color, int alpha);
+ virtual void handle_done_event(int result);
+ void set_color(int color);
+};
+
+class ColorCircleButton : public ColorButton
+{
+public:
+ ColorCircleButton(const char *title,
+ int x, int y, int w, int h,
+ int color, int alpha, int ok_cancel);
+ ~ColorCircleButton();
+ void create_objects();
+
+ virtual int handle_new_color(int color, int alpha);
+ virtual void handle_done_event(int result);
+ void set_color(int color);
+};
+