X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fcolorpicker.C;h=57601d7e7bbb7e5dab408d2829c005af9623d2ee;hp=f36374669e8185d503ed1065693739e67586e2f0;hb=8e67d840c5a93f77de021102a4f0bfc4e07504f4;hpb=686bc04a488847170d80ec603f8c33962a7aa928 diff --git a/cinelerra-5.1/cinelerra/colorpicker.C b/cinelerra-5.1/cinelerra/colorpicker.C index f3637466..57601d7e 100644 --- a/cinelerra-5.1/cinelerra/colorpicker.C +++ b/cinelerra-5.1/cinelerra/colorpicker.C @@ -311,7 +311,9 @@ void ColorWindow::update_display() int ColorWindow::handle_event() { + unlock_window(); thread->handle_new_color(rgb888(), alpha8()); + lock_window("ColorWindow::handle_event"); return 1; } @@ -1237,6 +1239,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,21 +1268,34 @@ 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(); - color_button->handle_new_color(color, alpha); - return 1; +} + +int ColorButtonPicker::handle_new_color(int color, int alpha) +{ + color_button->lock_window("ColorButtonPicker::handle_new_color"); + color_button->update_gui(color, alpha); + color_button->unlock_window(); + return color_button->handle_new_color(color, 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); + color_button->handle_new_color(color, alpha); +} + ColorButtonThread::ColorButtonThread(ColorButton *color_button) : Thread(1, 0, 0) { @@ -1337,12 +1359,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 +1421,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;