mask tweaks, focus follows centroid, gradient/colorpicker rework, no hard edges in...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / colorpicker.C
index f36374669e8185d503ed1065693739e67586e2f0..b910b9f4cab42dc2d5ce6a201815b4be97ee5396 100644 (file)
@@ -1237,6 +1237,13 @@ void ColorButton::close_picker()
        delete color_picker;  color_picker = 0;
 }
 
+void ColorButton::update_gui(int color, int alpha)
+{
+       if( color_picker )
+               color_picker->update_gui(color, alpha);
+       update_gui(color | (~alpha<<24));
+}
+
 void ColorButton::update_gui(int color)
 {
        set_color(color);
@@ -1259,10 +1266,16 @@ void ColorButtonPicker::handle_done_event(int result)
        color_button->handle_done_event(result);
 }
 
-int ColorButtonPicker::handle_new_color(int color, int alpha)
+void ColorButtonPicker::update(int color, int alpha)
 {
        color_button->color = color;
+       color_button->alpha = alpha;
        color_button->color_thread->update_lock->unlock();
+}
+
+int ColorButtonPicker::handle_new_color(int color, int alpha)
+{
+       update(color, alpha);
        color_button->handle_new_color(color, alpha);
        return 1;
 }
@@ -1270,10 +1283,15 @@ int ColorButtonPicker::handle_new_color(int color, int alpha)
 void ColorButtonPicker::update_gui()
 {
        color_button->lock_window("ColorButtonPicker::update_gui");
-       color_button->update_gui(color_button->color);
+       color_button->update_gui(color_button->color, color_button->alpha);
        color_button->unlock_window();
 }
 
+void ColorButtonPicker::update_gui(int color, int alpha)
+{
+       ColorPicker::update_gui(color, alpha);
+}
+
 ColorButtonThread::ColorButtonThread(ColorButton *color_button)
  : Thread(1, 0, 0)
 {
@@ -1337,12 +1355,13 @@ void ColorBoxButton::handle_done_event(int result)
 }
 void ColorBoxButton::create_objects()
 {
-       update_gui(color);
+       update_gui(color, alpha);
 }
 
 void ColorBoxButton::set_color(int color)
 {
-       this->color = color;
+       this->color = (color & 0xffffff);
+       this->alpha = (~color>>24) & 0xff;
        int r = (color>>16) & 0xff;
        int g = (color>> 8) & 0xff;
        int b = (color>> 0) & 0xff;
@@ -1398,12 +1417,13 @@ void ColorCircleButton::handle_done_event(int result)
 }
 void ColorCircleButton::create_objects()
 {
-       update_gui(color);
+       update_gui(color, alpha);
 }
 
 void ColorCircleButton::set_color(int color)
 {
-       this->color = color;
+       this->color = (color & 0xffffff);
+       this->alpha = (~color>>24) & 0xff;
        int r = (color>>16) & 0xff;
        int g = (color>>8) & 0xff;
        int b = (color>>0) & 0xff;