From: Good Guy Date: Sun, 6 Oct 2019 23:29:07 +0000 (-0600) Subject: rework shapewipe gui layout X-Git-Tag: 2019-10~10 X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=commitdiff_plain;h=75267dc010a3c3f351a2312469deb5b419fae819 rework shapewipe gui layout --- diff --git a/cinelerra-5.1/plugins/shapewipe/shapewipe.C b/cinelerra-5.1/plugins/shapewipe/shapewipe.C index a360fd5e..0cd3bbe0 100644 --- a/cinelerra-5.1/plugins/shapewipe/shapewipe.C +++ b/cinelerra-5.1/plugins/shapewipe/shapewipe.C @@ -41,13 +41,15 @@ // feather slider range log2 = -10 .. -1 == 9.8e-4 .. 0.5 #define SHAPE_FLOG_MIN -10. #define SHAPE_FLOG_MAX -1. +#define SHAPE_FMIN expf(M_LN2*SHAPE_FLOG_MIN) +#define SHAPE_FMAX expf(M_LN2*SHAPE_FLOG_MAX) REGISTER_PLUGIN(ShapeWipeMain) ShapeWipeConfig::ShapeWipeConfig() { direction = 0; - feather = 0; + feather = SHAPE_FMIN; preserve_aspect = 0; strcpy(shape_name, DEFAULT_SHAPE); } @@ -160,32 +162,72 @@ int ShapeWipeTumble::handle_down_event() ShapeWipeFeather::ShapeWipeFeather(ShapeWipeMain *client, ShapeWipeWindow *window, int x, int y) - : BC_FSlider(x, y, 0, 150, 150, SHAPE_FLOG_MIN, SHAPE_FLOG_MAX, - !client->config.feather ? SHAPE_FLOG_MIN : - log(client->config.feather)/M_LN2) + : BC_TumbleTextBox(window, + bclip(client->config.feather, SHAPE_FMIN, SHAPE_FMAX), + SHAPE_FMIN, SHAPE_FMAX, x, y, 64, 3) +{ + this->client = client; + this->window = window; +} + +int ShapeWipeFeather::handle_event() +{ + float v = atof(get_text()); + bclamp(v, SHAPE_FMIN, SHAPE_FMAX); + client->config.feather = v; + float sv = log(v)/M_LN2; + window->shape_fslider->update(sv); + client->send_configure_change(); + return 1; +} + +ShapeWipeFSlider::ShapeWipeFSlider(ShapeWipeMain *client, + ShapeWipeWindow *window, int x, int y, int w) + : BC_FSlider(x, y, 0, w, w, SHAPE_FLOG_MIN, SHAPE_FLOG_MAX, + log(bclip(client->config.feather, SHAPE_FMIN, SHAPE_FMAX))/M_LN2) { this->client = client; this->window = window; set_precision(0.001); set_pagination(0.01, 0.1); + enable_show_value(0); } -char *ShapeWipeFeather::get_caption() +int ShapeWipeFSlider::handle_event() { - double v = get_value(); - char *caption = BC_Slider::get_caption(); - sprintf(caption, "%-5.3f", exp(v*M_LN2)); - return caption; + float v = get_value(); + float vv = exp(M_LN2*v); + client->config.feather = vv; + window->shape_feather->update(vv); + client->send_configure_change(); + return 1; } -int ShapeWipeFeather::handle_event() +ShapeWipeReset::ShapeWipeReset(ShapeWipeMain *client, + ShapeWipeWindow *window, int x, int y) + : BC_Button(x, y, client->get_theme()->get_image_set("reset_button")) { - float v = get_value(); - client->config.feather = exp(M_LN2*v); + this->client = client; + this->window = window; + set_tooltip(_("Reset feather")); +} + +int ShapeWipeReset::handle_event() +{ + window->shape_fslider->update(SHAPE_FLOG_MIN); + float v = SHAPE_FMIN; + window->shape_feather->update(v); + client->config.feather = v; client->send_configure_change(); return 1; } +int ShapeWipeReset::calculate_w(ShapeWipeMain *client) +{ + VFrame **reset_images = client->get_theme()->get_image_set("reset_button"); + return reset_images[0]->get_w(); +} + ShapeWipeShape::ShapeWipeShape(ShapeWipeMain *client, ShapeWipeWindow *window, int x, int y, @@ -206,14 +248,16 @@ int ShapeWipeShape::handle_event() ShapeWipeWindow::ShapeWipeWindow(ShapeWipeMain *plugin) - : PluginClientWindow(plugin, 450, 125, 450, 125, 0) + : PluginClientWindow(plugin, 425, 215, 425, 215, 0) { this->plugin = plugin; + shape_feather = 0; } ShapeWipeWindow::~ShapeWipeWindow() { shapes.remove_all_objects(); + delete shape_feather; } @@ -221,48 +265,58 @@ void ShapeWipeWindow::create_objects() { BC_Title *title = 0; lock_window("ShapeWipeWindow::create_objects"); - int widget_border = plugin->get_theme()->widget_border; - int window_border = plugin->get_theme()->window_border; - int x = window_border, y = window_border; + int pad = 10, margin = 10; + int x = margin, y = margin; + int ww = get_w() - 2*margin; plugin->init_shapes(); for( int i=0; ishape_titles.size(); ++i ) { shapes.append(new BC_ListBoxItem(plugin->shape_titles.get(i))); } - add_subwindow(title = new BC_Title(x, y, _("Direction:"))); - x += title->get_w() + widget_border; - add_subwindow(left = new ShapeWipeW2B(plugin, - this, x, y)); - x += left->get_w() + widget_border; - add_subwindow(right = new ShapeWipeB2W(plugin, - this, x, y)); - x = window_border; - y += right->get_h() + widget_border; - + BC_TitleBar *bar; + add_subwindow(bar = new BC_TitleBar(x, y, ww, x+ww/12, + pad, _("Wipe"), MEDIUMFONT)); + y += bar->get_h() + pad; add_subwindow(title = new BC_Title(x, y, _("Shape:"))); - x += title->get_w() + widget_border; - - shape_text = new ShapeWipeShape(plugin, - this, x, y, 150, 200); + int x1 = get_w()/5; + x = x1; + int tw = ww - x1 - ShapeWipeTumble::calculate_w() - pad - + BC_WindowBase::get_resources()->listbox_button[0]->get_w(); + shape_text = new ShapeWipeShape(plugin, this, x1, y, tw, 200); shape_text->create_objects(); - x += shape_text->get_w() + widget_border; + x += shape_text->get_w() + pad; add_subwindow(new ShapeWipeTumble(plugin, this, x, y)); - y += shape_text->get_h() + widget_border; + y += shape_text->get_h() + pad; - x = window_border; + x = margin; add_subwindow(title = new BC_Title(x, y, _("Feather:"))); - x += title->get_w() + widget_border; - add_subwindow(shape_feather = new ShapeWipeFeather(plugin, this, x, y)); - y += shape_feather->get_h() + widget_border; - - x = window_border; + x = x1; + shape_feather = new ShapeWipeFeather(plugin, this, x, y); + shape_feather->create_objects(); + shape_feather->set_log_floatincrement(1); + x += shape_feather->get_w() + 2*pad; + int sw = ww - ShapeWipeReset::calculate_w(plugin) - pad - x; + add_subwindow(shape_fslider = new ShapeWipeFSlider(plugin, this, x, y, sw)); + x += shape_fslider->get_w() + 2*pad; + add_subwindow(shape_reset = new ShapeWipeReset(plugin, this, x, y)); + y += shape_fslider->get_h() + pad; + + x = margin; ShapeWipePreserveAspectRatio *aspect_ratio; add_subwindow(aspect_ratio = new ShapeWipePreserveAspectRatio( plugin, this, x, y)); - y += aspect_ratio->get_h() + widget_border; + y += aspect_ratio->get_h() + pad; + + add_subwindow(bar = new BC_TitleBar(x, y, ww, x+ww/12, + pad, _("Direction"), MEDIUMFONT)); + y += bar->get_h() + pad; + x = margin; + add_subwindow(left = new ShapeWipeW2B(plugin, this, x, y)); + y += left->get_h(); + add_subwindow(right = new ShapeWipeB2W(plugin, this, x, y)); show_window(); unlock_window(); diff --git a/cinelerra-5.1/plugins/shapewipe/shapewipe.h b/cinelerra-5.1/plugins/shapewipe/shapewipe.h index 76b6efce..f9f67c59 100644 --- a/cinelerra-5.1/plugins/shapewipe/shapewipe.h +++ b/cinelerra-5.1/plugins/shapewipe/shapewipe.h @@ -29,6 +29,8 @@ class ShapeWipeW2B; class ShapeWipeB2W; class ShapeWipeTumble; class ShapeWipeFeather; +class ShapeWipeFSlider; +class ShapeWipeReset; class ShapeWipeShape; class ShapeWipePreserveAspectRatio; class ShapePackage; @@ -79,18 +81,40 @@ public: ShapeWipeWindow *window; }; -class ShapeWipeFeather : public BC_FSlider +class ShapeWipeFeather : public BC_TumbleTextBox { public: ShapeWipeFeather(ShapeWipeMain *client, ShapeWipeWindow *window, int x, int y); - char *get_caption(); int handle_event(); ShapeWipeMain *client; ShapeWipeWindow *window; }; +class ShapeWipeFSlider : public BC_FSlider +{ +public: + ShapeWipeFSlider(ShapeWipeMain *client, + ShapeWipeWindow *window, int x, int y, int w); + int handle_event(); + + ShapeWipeMain *client; + ShapeWipeWindow *window; +}; + +class ShapeWipeReset : public BC_Button +{ +public: + ShapeWipeReset(ShapeWipeMain *client, + ShapeWipeWindow *window, int x, int y); + int handle_event(); + static int calculate_w(ShapeWipeMain *client); + + ShapeWipeMain *client; + ShapeWipeWindow *window; +}; + class ShapeWipeShape : public BC_PopupTextBox { public: @@ -129,6 +153,8 @@ public: ShapeWipeTumble *shape_tumbler; ShapeWipeShape *shape_text; ShapeWipeFeather *shape_feather; + ShapeWipeFSlider *shape_fslider; + ShapeWipeReset *shape_reset; ArrayList shapes; };