{
ColorWindow *gui = (ColorWindow *)get_gui();
if( !gui ) return;
- gui->lock_window();
+ gui->lock_window("ColorPicker::update_gui");
this->output = output;
this->alpha = alpha;
gui->change_values();
int ColorWindow::handle_event()
{
- thread->handle_new_color(rgb888(), (int)(255*aph + 0.5));
+ unlock_window();
+ thread->handle_new_color(rgb888(), alpha8());
+ lock_window("ColorWindow::handle_event");
return 1;
}
void ColorWindow::update_rgb_hex(const char *hex)
{
- int color;
+ unsigned color;
if( sscanf(hex,"%x",&color) == 1 ) {
+ if( thread->do_alpha ) {
+ aph = ((color>>24) & 0xff) / 255.;
+ aph_a->update(aph);
+ }
float r = ((color>>16) & 0xff) / 255.;
float g = ((color>>8) & 0xff) / 255.;
float b = ((color>>0) & 0xff) / 255.;
{
window->aph = get_value();
window->aph_a->update(window->aph);
+ window->hex_box->update();
window->handle_event();
return 1;
}
bclamp(r, 0, 255); bclamp(g, 0, 255); bclamp(b, 0, 255);
return (r<<16) | (g<<8) | (b<<0);
}
+int ColorWindow::alpha8()
+{
+ int a = 255*aph + 0.5;
+ bclamp(a, 0, 255);
+ return a;
+}
PaletteNum::PaletteNum(ColorWindow *window, int x, int y,
float &output, float min, float max)
}
void PaletteHex::update()
{
- char hex[BCSTRLEN]; sprintf(hex,"%06x",window->rgb888());
+ char hex[BCSTRLEN], *cp = hex;
+ if( window->thread->do_alpha )
+ cp += sprintf(cp,"%02x", window->alpha8());
+ sprintf(cp,"%06x",window->rgb888());
BC_TextBox::update(hex);
}
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);
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)
{
}
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;
}
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;