#include "bluebananawindow.h"
#include "keys.h"
#include "language.h"
+#include "plugin.h"
#include "brender.h"
#include "bluebananacolor.c"
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:
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 ------------------------------------
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:
};
+// -------------------------------------------- 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:
gui->Gadj_slider->update();
gui->Badj_slider->update();
gui->Oadj_slider->update();
+ gui->Aadj_slider->update();
gui->commit_config_change();
}
}
this->y=-1;
gui->add_subwindow(this->label);
gui->add_subwindow(this);
- hidden = -1;
}
virtual int handle_event(){
plugin->config.capture_mask=get_value();
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;
}
BluebananaMain *plugin;
BluebananaWindow *gui;
BC_Title *label;
- int x,y,padx,hidden;
+ int x,y,padx;
};
// ------------------------------------------ Use mask ----------------------------------------
this->y=-1;
gui->add_subwindow(this->label);
gui->add_subwindow(this);
- hidden = -1;
}
virtual int handle_event(){
plugin->config.use_mask=get_value();
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;
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;
BluebananaMain *plugin;
BluebananaWindow *gui;
BC_Title *label;
- int x,y,padx,hidden;
+ int x,y,padx;
};
// --------------------------------------- Main GUI window --------------------------------------
Gadj_slider=NULL;
Badj_slider=NULL;
Oadj_slider=NULL;
+ Aadj_slider=NULL;
use_mask=0;
capture_mask=0;
/* 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();
}
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;
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);
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
Gadj_slider->update();
Badj_slider->update();
Oadj_slider->update();
+ Aadj_slider->update();
active->update();
mark->update();
Gadj_active->update();
Badj_active->update();
Oadj_active->update();
+ Aadj_active->update();
// called to release configuration without pushing
leave_config_change();
Gadj_slider->render();
Badj_slider->render();
Oadj_slider->render();
+ Aadj_slider->render();
}
}