X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Fbluebanana%2Fbluebananawindow.C;h=32ac6781556606c302a950ea80eadfe4764f86e1;hb=15df6cbff7373d232ae0b8dcaecd9aa51ff5c388;hp=fa6ac42d422f95870b3d673ddb9f3d0d3210b33a;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/bluebanana/bluebananawindow.C b/cinelerra-5.1/plugins/bluebanana/bluebananawindow.C index fa6ac42d..32ac6781 100644 --- a/cinelerra-5.1/plugins/bluebanana/bluebananawindow.C +++ b/cinelerra-5.1/plugins/bluebanana/bluebananawindow.C @@ -29,6 +29,7 @@ #include "bluebananawindow.h" #include "keys.h" #include "language.h" +#include "plugin.h" #include "brender.h" #include "bluebananacolor.c" @@ -1340,6 +1341,55 @@ int BluebananaOAReadout::value_event(){ return 1; } +// ---------------------------------- alpha slider --------------------------------- +class BluebananaAAReadout : public BB_Tumble { + public: + BluebananaAAReadout(BluebananaMain *plugin, BluebananaWindow *gui, int w) + : BB_Tumble(plugin,gui,0.,0,100., 0,1,w){} + int value_event(); +}; + +class BluebananaAASlider : public BluebananaSliderSingle { +public: + BluebananaAASlider(BluebananaMain *plugin, BluebananaWindow *gui, + int x, int y, int w, int h) + : BluebananaSliderSingle(plugin,gui,x,y,w,h,0,100) {} + virtual int handle_event() { + plugin->config.Aadj_val = val; + return 1; + } + void reset(){ + plugin->config.Aadj_val=100; + update(); + } + void update(){ + val = plugin->config.Aadj_val; + if( BC_CModels::has_alpha(plugin->colormodel) ) { + if( is_hidden() ) show_window(); + }else{ + if( !is_hidden() ) hide_window(); + } + if( is_hidden() ) return; + highlight = plugin->config.active && plugin->config.Aadj_active; + gui->Aadj_readout->update(plugin->config.Aadj_val); + gui->slider_labels[11]->set_color(highlight && plugin->config.Aadj_val != 100 ? + get_resources()->default_text_color : dimtextcolor); + gui->enter_config_change(); + gui->commit_config_change(); + } + void trough_color(float hdel, float vdel, float &r, float &g, float &b, float &a){ + r=g=b=.8; + a=1-cos(hdel*M_PI*.5); + } +}; + +int BluebananaAAReadout::value_event(){ + float val = get_value(); + plugin->config.Aadj_val = val; + gui->Aadj_slider->update(); + return 1; +} + // ------------------------------------- picker buttons ----------------------------------------- class BluebananaHPicker : public BC_GenericButton{ public: @@ -1424,6 +1474,14 @@ class BluebananaOAReset : public BC_GenericButton{ int handle_event() { gui->Oadj_slider->reset(); return 1;} BluebananaWindow *gui; }; +class BluebananaAAReset : public BC_GenericButton{ + public: + BluebananaAAReset(BluebananaWindow *gui, int w) : BC_GenericButton(-1, -1, w, _("Reset")){ + this->gui = gui; + } + int handle_event() { gui->Aadj_slider->reset(); return 1;} + BluebananaWindow *gui; +}; // ----------------------------------- slider active buttons ------------------------------------ @@ -1632,6 +1690,34 @@ public: BluebananaWindow *gui; }; +class BluebananaAAActive : public BC_CheckBox { +public: + + BluebananaAAActive(BluebananaMain *plugin, BluebananaWindow *gui) + : BC_CheckBox(-1, -1, &plugin->config.Aadj_active, ""){ + this->plugin = plugin; + this->gui = gui; + } + virtual int handle_event(){ + plugin->config.Aadj_active = + !BC_CModels::has_alpha(plugin->colormodel) ? 0 : get_value(); + update(); + return 1; + } + void update(){ + this->BC_CheckBox::update(plugin->config.Aadj_active,1); + if( BC_CModels::has_alpha(plugin->colormodel) ) { + if( is_hidden() ) show_window(); + }else{ + if( !is_hidden() ) hide_window(); + } + if( is_hidden() ) return; + gui->Aadj_slider->update(); + } + BluebananaMain *plugin; + BluebananaWindow *gui; +}; + // -------------------------------------------- Erode -------------------------------------------- class BluebananaErode : public BC_CheckBox { public: @@ -1677,6 +1763,31 @@ public: }; +// -------------------------------------------- Op -------------------------------------------- +class BluebananaOp : public BC_CheckBox { +public: + BluebananaOp(BluebananaMain *plugin, BluebananaWindow *gui) + : BC_CheckBox(-1, -1, &plugin->config.op, ""){ + this->plugin = plugin; + this->gui = gui; + } + virtual int handle_event() { + if(plugin->config.op != get_value()){ + plugin->config.op = get_value(); + gui->enter_config_change(); + gui->commit_config_change(); + } + return 1; + } + void update (){ + if(plugin->config.op != get_value()){ + this->BC_CheckBox::update(plugin->config.op,1); + } + }; + BluebananaMain *plugin; + BluebananaWindow *gui; +}; + // -------------------------------------------- Mark -------------------------------------------- class BluebananaMark : public BC_CheckBox { public: @@ -1728,8 +1839,11 @@ public: } void update(){ if(active != plugin->config.active){ - plugin->config.active = active; - this->BC_CheckBox::update(plugin->config.active,1); + if(active>=0) + plugin->config.active = active; + else + active = plugin->config.active; + this->BC_CheckBox::update(active,1); gui->enter_config_change(); gui->Hadj_slider->update(); gui->Sadj_slider->update(); @@ -1738,6 +1852,7 @@ public: gui->Gadj_slider->update(); gui->Badj_slider->update(); gui->Oadj_slider->update(); + gui->Aadj_slider->update(); gui->commit_config_change(); } } @@ -1759,7 +1874,6 @@ public: this->y=-1; gui->add_subwindow(this->label); gui->add_subwindow(this); - hidden = -1; } virtual int handle_event(){ plugin->config.capture_mask=get_value(); @@ -1798,23 +1912,21 @@ public: break; } - if(hideme && hidden!=1){ + if(hideme && !is_hidden()){ hide_window(); label->hide_window(); gui->set_color(get_resources()->get_bg_color()); gui->draw_box(x,y,w,h); gui->set_color(get_resources()->default_text_color); gui->draw_line(x,y+h/2,x+w,y+h/2); - hidden=1; f=1; } - if(!hideme && hidden!=0){ + if(!hideme && is_hidden()){ gui->set_color(get_resources()->get_bg_color()); gui->draw_box(x,y,w,h); show_window(); label->show_window(); - hidden=0; f=1; } @@ -1826,7 +1938,7 @@ public: BluebananaMain *plugin; BluebananaWindow *gui; BC_Title *label; - int x,y,padx,hidden; + int x,y,padx; }; // ------------------------------------------ Use mask ---------------------------------------- @@ -1842,7 +1954,6 @@ public: this->y=-1; gui->add_subwindow(this->label); gui->add_subwindow(this); - hidden = -1; } virtual int handle_event(){ plugin->config.use_mask=get_value(); @@ -1880,14 +1991,13 @@ public: case BC_YUV888: case BC_RGB161616: case BC_YUV161616: - if(hidden!=1){ + if(!is_hidden()){ hide_window(); label->hide_window(); gui->set_color(get_resources()->get_bg_color()); gui->draw_box(x,y,w,h); gui->set_color(get_resources()->default_text_color); gui->draw_line(x,y+h/2,x+w,y+h/2); - hidden=1; f=1; } break; @@ -1896,12 +2006,11 @@ public: case BC_YUVA8888: case BC_RGBA16161616: case BC_YUVA16161616: - if(hidden!=0){ + if(is_hidden()){ gui->set_color(get_resources()->get_bg_color()); gui->draw_box(x,y,w,h); show_window(); label->show_window(); - hidden=0; f=1; } break; @@ -1920,7 +2029,7 @@ public: BluebananaMain *plugin; BluebananaWindow *gui; BC_Title *label; - int x,y,padx,hidden; + int x,y,padx; }; // --------------------------------------- Main GUI window -------------------------------------- @@ -1948,6 +2057,7 @@ BluebananaWindow::BluebananaWindow(BluebananaMain *plugin) Gadj_slider=NULL; Badj_slider=NULL; Oadj_slider=NULL; + Aadj_slider=NULL; use_mask=0; capture_mask=0; @@ -1982,28 +2092,32 @@ void BluebananaWindow::create_objects() /* window headline */ { - BC_Title *l = new BC_Title(xmargin,y,_("Color Selection")); + BC_Title *l = new BC_Title(xmargin,y,_("Combine Selection")); BC_Title *l2 = new BC_Title(-1,-1,_(" Mark Selected Areas")); add_subwindow(mark = new BluebananaMark(plugin,this)); add_subwindow(l); add_subwindow(l2); padx = l->get_h()*column_padding; - label_x = xmargin + l->get_w(); - - int x0 = get_w()-xmargin-mark->get_w(); - mark->reposition_window(x0,y-(mark->get_h()-l->get_h())/2); - x0 -= padx+l2->get_w(); - l2->reposition_window(x0,y); - x0-=padx; + add_subwindow(op = new BluebananaOp(plugin,this)); + int x0 = xmargin + l->get_w() + padx; + op->reposition_window(x0,y-(op->get_h()-l->get_h())/2); + x0 += op->get_w() + padx; + int x1 = get_w()-xmargin-mark->get_w(); + mark->reposition_window(x1,y-(mark->get_h()-l->get_h())/2); + x1 -= padx+l2->get_w(); + l2->reposition_window(x1,y); + x1-=padx; set_color(get_resources()->default_text_color); - draw_line(label_x+padx, (int)(y+l->get_h()*.5), x0, (int)(y+l->get_h()*.5)); + int y0 = y+l->get_h()*.5; + draw_line(x0,y0, x1,y0); y += l->get_h()*(row_padding+1.); } - const char *labels[11]={_("hue"),_("saturation"),_("value"),_("fill"),_("red"),_("green"),_("blue"),_("hue"),_("saturation"),_("value"),_("fade")}; - for(i=0;i<11;i++){ + label_x = xmargin + 100 + padx; + const char *labels[12]={_("hue"),_("saturation"),_("value"),_("fill"),_("red"),_("green"),_("blue"),_("hue"),_("saturation"),_("value"),_("fade"),_("alpha")}; + for(i=0;i<12;i++){ add_subwindow(slider_labels[i] = new BC_Title(-1,-1,labels[i])); if(slider_labels[i]->get_w()>label_w)label_w=slider_labels[i]->get_w(); } @@ -2020,7 +2134,7 @@ void BluebananaWindow::create_objects() add_subwindow(erode_label); add_subwindow(erode); - for(i=0;i<11;i++){ + for(i=0;i<12;i++){ BC_GenericButton *p=NULL; BluebananaSlider *s=NULL; BB_Tumble *t0 = NULL, *t1=NULL, *t2=NULL; @@ -2223,6 +2337,14 @@ void BluebananaWindow::create_objects() s = Oadj_slider = new BluebananaOASlider(plugin,this,slider_x,y,slider_w,row_h); break; + case 11: + + add_subwindow(t0 = Aadj_readout = new BluebananaAAReadout(plugin,this,tumbler_text_ww)); + add_subwindow(a = Aadj_active = new BluebananaAAActive(plugin,this)); + add_subwindow(p = new BluebananaAAReset(this,tumbler_col2_w)); + s = Aadj_slider = new BluebananaAASlider(plugin,this,slider_x,y,slider_w,row_h); + break; + } add_subwindow(s); @@ -2353,10 +2475,10 @@ int BluebananaWindow::flush_config_change(){ int BluebananaWindow::repeat_event(int64_t d){ if(d==97){ - if(config_consume==config_produce) + if(config_consume!=config_produce) flush_config_change(); - config_consume=config_produce; } + if(!plugin->server->plugin->on) return 0; if(d==207){ /* if background render is active and we're showing the zebra, mark @@ -2388,6 +2510,7 @@ void BluebananaWindow::update(){ Gadj_slider->update(); Badj_slider->update(); Oadj_slider->update(); + Aadj_slider->update(); active->update(); mark->update(); @@ -2407,6 +2530,7 @@ void BluebananaWindow::update(){ Gadj_active->update(); Badj_active->update(); Oadj_active->update(); + Aadj_active->update(); // called to release configuration without pushing leave_config_change(); @@ -2425,6 +2549,7 @@ void BluebananaWindow::render(){ Gadj_slider->render(); Badj_slider->render(); Oadj_slider->render(); + Aadj_slider->render(); } }