X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Fgradient%2Fgradient.C;h=24bbdf727f0144bae9cfe5a55842e030f872bc62;hb=HEAD;hp=826f817f6d0de267afad55418b796331e156dfa3;hpb=59e74f262d7b6be235f2bbfaac35ef4274f52dc9;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/plugins/gradient/gradient.C b/cinelerra-5.1/plugins/gradient/gradient.C index 826f817f..24bbdf72 100644 --- a/cinelerra-5.1/plugins/gradient/gradient.C +++ b/cinelerra-5.1/plugins/gradient/gradient.C @@ -128,11 +128,11 @@ int GradientConfig::get_out_color() return result; } -#define COLOR_W 100 -#define COLOR_H 30 +#define COLOR_W xS(100) +#define COLOR_H yS(30) GradientWindow::GradientWindow(GradientMain *plugin) - : PluginClientWindow(plugin, 350, 290, 350, 290, 0) + : PluginClientWindow(plugin, xS(350), yS(290), xS(350), yS(290), 0) { this->plugin = plugin; angle = 0; @@ -141,20 +141,18 @@ GradientWindow::GradientWindow(GradientMain *plugin) center_y = 0; center_x_title = 0; center_y_title = 0; - in_color_thread = 0; - out_color_thread = 0; } GradientWindow::~GradientWindow() { - delete in_color_thread; - delete out_color_thread; } void GradientWindow::create_objects() { + int xs10 = xS(10); + int ys10 = yS(10); int margin = plugin->get_theme()->widget_border; - int x = 10, y = 10; + int x = xs10, y = ys10; BC_Title *title; add_subwindow(title = new BC_Title(x, y, _("Shape:"))); @@ -170,7 +168,7 @@ void GradientWindow::create_objects() add_subwindow(rate = new GradientRate(plugin, x + title->get_w() + margin, y)); rate->create_objects(); - y += rate->get_h() + margin; + y += rate->get_h() + 3*margin; int x1 = x, y1 = y; BC_Title *title1; @@ -179,40 +177,33 @@ void GradientWindow::create_objects() BC_Title *title2; add_subwindow(title2 = new BC_Title(x, y, _("Outer radius:"))); - add_subwindow(reset = new GradientReset(plugin, this, x, y+100)); - y = y1; x += MAX(title1->get_w(), title2->get_w()) + margin; add_subwindow(in_radius = new GradientInRadius(plugin, x, y)); y += in_radius->get_h() + margin; add_subwindow(out_radius = new GradientOutRadius(plugin, x, y)); - y += out_radius->get_h() + margin; + y += out_radius->get_h() + 3*margin; x = x1; - y1 = y; - add_subwindow(in_color = new GradientInColorButton(plugin, this, x, y)); - y += COLOR_H + margin; - - add_subwindow(out_color = new GradientOutColorButton(plugin, this, x, y)); - x += MAX(in_color->get_w(), out_color->get_w()) + margin; - y = y1; - - in_color_x = x; - in_color_y = y; - y += COLOR_H + margin; - out_color_x = x; - out_color_y = y; - in_color_thread = new GradientInColorThread(plugin, this); - out_color_thread = new GradientOutColorThread(plugin, this); - update_in_color(); - update_out_color(); + add_subwindow(title1 = new BC_Title(x, y, _("Inner Color:"))); + y1 = y + COLOR_H+4 + 2*margin; + add_subwindow(title2 = new BC_Title(x, y1, _("Outer Color:"))); + int x2 = x + MAX(title1->get_w(), title2->get_w()) + margin; + int in_rgb = plugin->config.get_in_color(); + int in_a = plugin->config.in_a; + add_subwindow(in_color = new GradientInColorButton(plugin, this, x2+2, y+2, in_rgb, in_a)); + draw_3d_border(x2,y, COLOR_W+4,COLOR_H+4, 1); + in_color->create_objects(); + + int out_rgb = plugin->config.get_out_color(); + int out_a = plugin->config.out_a; + add_subwindow(out_color = new GradientOutColorButton(plugin, this, x2+2, y1+2, out_rgb, out_a)); + draw_3d_border(x2,y1, COLOR_W+4,COLOR_H+4, 1); + out_color->create_objects(); + y = y1 + COLOR_H+4 + 3*margin; + + add_subwindow(reset = new GradientReset(plugin, this, x, y)); update_shape(); - - draw_3d_border(in_color_x - 2, in_color_y - 2, - COLOR_W + 4, COLOR_H + 4, 1); - - draw_3d_border(out_color_x - 2, out_color_y - 2, - COLOR_W + 4, COLOR_H + 4, 1); show_window(); } @@ -227,7 +218,7 @@ void GradientWindow::update_shape() delete center_y; center_y = 0; if( !angle ) { add_subwindow(angle_title = new BC_Title(x, y, _("Angle:"))); - add_subwindow(angle = new GradientAngle(plugin, x + angle_title->get_w() + 10, y)); + add_subwindow(angle = new GradientAngle(plugin, x + angle_title->get_w() + xS(10), y)); } } else { @@ -236,40 +227,24 @@ void GradientWindow::update_shape() if( !center_x ) { add_subwindow(center_x_title = new BC_Title(x, y, _("Center X:"))); add_subwindow(center_x = new GradientCenterX(plugin, - x + center_x_title->get_w() + 10, y)); - x += center_x_title->get_w() + 10 + center_x->get_w() + 10; + x + center_x_title->get_w() + xS(10), y)); + x += center_x_title->get_w() + xS(10) + center_x->get_w() + xS(10); add_subwindow(center_y_title = new BC_Title(x, y, _("Center Y:"))); add_subwindow(center_y = new GradientCenterY(plugin, - x + center_y_title->get_w() + 10, y)); + x + center_y_title->get_w() + xS(10), y)); } } show_window(); } -void GradientWindow::update_in_color() -{ -//printf("GradientWindow::update_in_color 1 %08x\n", plugin->config.get_in_color()); - set_color(plugin->config.get_in_color()); - draw_box(in_color_x, in_color_y, COLOR_W, COLOR_H); - flash(in_color_x, in_color_y, COLOR_W, COLOR_H); -} - -void GradientWindow::update_out_color() -{ -//printf("GradientWindow::update_out_color 1 %08x\n", plugin->config.get_in_color()); - set_color(plugin->config.get_out_color()); - draw_box(out_color_x, out_color_y, COLOR_W, COLOR_H); - flash(out_color_x, out_color_y, COLOR_W, COLOR_H); -} - void GradientWindow::done_event(int result) { - in_color_thread->close_window(); - out_color_thread->close_window(); + in_color->close_picker(); + out_color->close_picker(); } GradientShape::GradientShape(GradientMain *plugin, GradientWindow *gui, int x, int y) - : BC_PopupMenu(x, y, 100, to_text(plugin->config.shape), 1) + : BC_PopupMenu(x, y, xS(100), to_text(plugin->config.shape), 1) { this->plugin = plugin; this->gui = gui; @@ -302,7 +277,7 @@ int GradientShape::handle_event() GradientCenterX::GradientCenterX(GradientMain *plugin, int x, int y) - : BC_FPot(x, y, plugin->config.center_x, 0, 100) + : BC_FPot(x, y, plugin->config.center_x, 0, xS(100)) { this->plugin = plugin; } @@ -315,7 +290,7 @@ int GradientCenterX::handle_event() GradientCenterY::GradientCenterY(GradientMain *plugin, int x, int y) - : BC_FPot(x, y, plugin->config.center_y, 0, 100) + : BC_FPot(x, y, plugin->config.center_y, 0, xS(100)) { this->plugin = plugin; } @@ -343,7 +318,7 @@ int GradientAngle::handle_event() GradientRate::GradientRate(GradientMain *plugin, int x, int y) - : BC_PopupMenu(x, y, 100, to_text(plugin->config.rate), 1) + : BC_PopupMenu(x, y, xS(100), to_text(plugin->config.rate), 1) { this->plugin = plugin; } @@ -378,7 +353,7 @@ int GradientRate::handle_event() GradientInRadius::GradientInRadius(GradientMain *plugin, int x, int y) - : BC_FSlider(x, y, 0, 200, 200, + : BC_FSlider(x, y, 0, xS(200), yS(200), 0.f, 100.f, (float)plugin->config.in_radius) { this->plugin = plugin; @@ -393,7 +368,7 @@ int GradientInRadius::handle_event() GradientOutRadius::GradientOutRadius(GradientMain *plugin, int x, int y) - : BC_FSlider(x, y, 0, 200, 200, + : BC_FSlider(x, y, 0, xS(200), yS(200), 0.f, 100.f, (float)plugin->config.out_radius) { this->plugin = plugin; @@ -406,101 +381,84 @@ int GradientOutRadius::handle_event() return 1; } -GradientInColorButton::GradientInColorButton(GradientMain *plugin, GradientWindow *window, int x, int y) - : BC_GenericButton(x, y, _("Inner color:")) + +GradientInColorButton::GradientInColorButton(GradientMain *plugin, GradientWindow *gui, + int x, int y, int color, int alpha) + : ColorBoxButton(_("Inner color:"), x, y, COLOR_W, COLOR_H, color, alpha, 1) { this->plugin = plugin; - this->window = window; + this->gui = gui; } -int GradientInColorButton::handle_event() +GradientInColorButton::~GradientInColorButton() { - window->in_color_thread->start_window( - plugin->config.get_in_color(), - plugin->config.in_a); - return 1; } - -GradientOutColorButton::GradientOutColorButton(GradientMain *plugin, GradientWindow *window, int x, int y) - : BC_GenericButton(x, y, _("Outer color:")) +void GradientInColorButton::handle_done_event(int result) { - this->plugin = plugin; - this->window = window; + if( result ) { + gui->lock_window("GradientInColorButton::handle_done_event"); + update_gui(orig_color, orig_alpha); + gui->unlock_window(); + handle_new_color(orig_color, orig_alpha); + } } -int GradientOutColorButton::handle_event() +int GradientInColorButton::handle_new_color(int color, int alpha) { - window->out_color_thread->start_window( - plugin->config.get_out_color(), - plugin->config.out_a); + plugin->config.in_r = (color & 0xff0000) >> 16; + plugin->config.in_g = (color & 0xff00) >> 8; + plugin->config.in_b = (color & 0xff); + plugin->config.in_a = alpha; + plugin->send_configure_change(); return 1; } -GradientReset::GradientReset(GradientMain *plugin, GradientWindow *window, int x, int y) - : BC_GenericButton(x, y, _("Reset")) +GradientOutColorButton::GradientOutColorButton(GradientMain *plugin, GradientWindow *gui, + int x, int y, int color, int alpha) + : ColorBoxButton(_("Outer color:"), x, y, COLOR_W, COLOR_H, color, alpha, 1) { this->plugin = plugin; - this->window = window; + this->gui = gui; } -int GradientReset::handle_event() +GradientOutColorButton::~GradientOutColorButton() { - plugin->config.reset(); - window->update_gui(); - plugin->send_configure_change(); - return 1; } -GradientInColorThread::GradientInColorThread(GradientMain *plugin, - GradientWindow *window) - : ColorPicker(1, _("Inner color")) +void GradientOutColorButton::handle_done_event(int result) { - this->plugin = plugin; - this->window = window; + if( result ) { + gui->lock_window("GradientOutColorButton::handle_done_event"); + update_gui(orig_color, orig_alpha); + gui->unlock_window(); + handle_new_color(orig_color, orig_alpha); + } } -int GradientInColorThread::handle_new_color(int output, int alpha) +int GradientOutColorButton::handle_new_color(int color, int alpha) { - plugin->config.in_r = (output & 0xff0000) >> 16; - plugin->config.in_g = (output & 0xff00) >> 8; - plugin->config.in_b = (output & 0xff); - plugin->config.in_a = alpha; - - window->lock_window("GradientInColorThread::handle_new_color"); - window->update_in_color(); - window->flush(); - window->unlock_window(); + plugin->config.out_r = (color & 0xff0000) >> 16; + plugin->config.out_g = (color & 0xff00) >> 8; + plugin->config.out_b = (color & 0xff); + plugin->config.out_a = alpha; plugin->send_configure_change(); -//printf("GradientInColorThread::handle_event 1 %d %d %d %d %d %d %d %d\n", -// plugin->config.in_r, plugin->config.in_g, plugin->config.in_b, plugin->config.in_a, -// plugin->config.out_r, plugin->config.out_g, plugin->config.out_b, plugin->config.out_a); return 1; } -GradientOutColorThread::GradientOutColorThread(GradientMain *plugin, - GradientWindow *window) - : ColorPicker(1, _("Outer color")) +GradientReset::GradientReset(GradientMain *plugin, GradientWindow *window, int x, int y) + : BC_GenericButton(x, y, _("Reset")) { this->plugin = plugin; this->window = window; } -int GradientOutColorThread::handle_new_color(int output, int alpha) +int GradientReset::handle_event() { - plugin->config.out_r = (output & 0xff0000) >> 16; - plugin->config.out_g = (output & 0xff00) >> 8; - plugin->config.out_b = (output & 0xff); - plugin->config.out_a = alpha; - window->lock_window("GradientOutColorThread::handle_new_color"); - window->update_out_color(); - window->flush(); - window->unlock_window(); + plugin->config.reset(); + window->update_gui(); plugin->send_configure_change(); -//printf("GradientOutColorThread::handle_event 1 %d %d %d %d %d %d %d %d\n", -// plugin->config.in_r, plugin->config.in_g, plugin->config.in_b, plugin->config.in_a, -// plugin->config.out_r, plugin->config.out_g, plugin->config.out_b, plugin->config.out_a); return 1; } @@ -606,10 +564,13 @@ void GradientMain::update_gui() { if( !thread ) return; if( !load_configuration() ) return; - ((GradientWindow*)thread->window)->lock_window("GradientMain::update_gui"); - GradientWindow *window = (GradientWindow *)thread->window; - window->update_gui(); - window->unlock_window(); + thread->window->lock_window("GradientMain::update_gui"); + if( load_configuration() ) { + GradientWindow *window = (GradientWindow *)thread->window; + window->update_gui(); + window->flush(); + } + thread->window->unlock_window(); } void GradientWindow::update_gui() @@ -622,13 +583,9 @@ void GradientWindow::update_gui() if( angle ) angle->update(config.angle); if( center_x ) center_x->update(config.center_x); if( center_y ) center_y->update(config.center_y); - update_in_color(); - update_out_color(); update_shape(); - unlock_window(); - in_color_thread->update_gui(config.get_in_color(), config.in_a); - out_color_thread->update_gui(config.get_out_color(), config.out_a); - lock_window("GradientWindow::update_gui"); + in_color->update_gui(config.get_in_color(), config.in_a); + out_color->update_gui(config.get_out_color(), config.out_a); } @@ -1090,9 +1047,9 @@ void GradientUnit::process_package(LoadPackage *package) int out1, out2, out3, out4; YUV::yuv.rgb_to_yuv_8(in_r,in_g,in_b, in1,in2,in3); in4 = plugin->config.in_a; - int out_r = plugin->config.in_r; - int out_g = plugin->config.in_g; - int out_b = plugin->config.in_b; + int out_r = plugin->config.out_r; + int out_g = plugin->config.out_g; + int out_b = plugin->config.out_b; YUV::yuv.rgb_to_yuv_8(out_r,out_g,out_b, out1,out2,out3); out4 = plugin->config.out_a; CREATE_GRADIENT(unsigned char, int, 3, 0xff) @@ -1106,9 +1063,9 @@ void GradientUnit::process_package(LoadPackage *package) int out1, out2, out3, out4; YUV::yuv.rgb_to_yuv_8(in_r,in_g,in_b, in1,in2,in3); in4 = plugin->config.in_a; - int out_r = plugin->config.in_r; - int out_g = plugin->config.in_g; - int out_b = plugin->config.in_b; + int out_r = plugin->config.out_r; + int out_g = plugin->config.out_g; + int out_b = plugin->config.out_b; YUV::yuv.rgb_to_yuv_8(out_r,out_g,out_b, out1,out2,out3); out4 = plugin->config.out_a; CREATE_GRADIENT(unsigned char, int, 4, 0xff)