olaf neophyte and de.po updates, valgrind tweaks, delete green lady, inkscape dpi=96
[goodguy/history.git] / cinelerra-5.1 / plugins / bluebanana / bluebananawindow.C
index 8ef90b551b191d1b4b1c66baeda0255a71461510..10692ce465bccd1ce0a81611e1fea6a91490d458 100644 (file)
@@ -29,6 +29,7 @@
 #include "bluebananawindow.h"
 #include "keys.h"
 #include "language.h"
+#include "plugin.h"
 #include "brender.h"
 
 #include "bluebananacolor.c"
@@ -1350,10 +1351,9 @@ class BluebananaAAReadout : public BB_Tumble {
 
 class BluebananaAASlider : public BluebananaSliderSingle {
 public:
-  int hidden;
   BluebananaAASlider(BluebananaMain *plugin, BluebananaWindow *gui,
                      int x, int y, int w, int h)
-    : BluebananaSliderSingle(plugin,gui,x,y,w,h,0,100) { hidden = 0; }
+    : BluebananaSliderSingle(plugin,gui,x,y,w,h,0,100) {}
   virtual int handle_event() {
     plugin->config.Aadj_val = val;
     return 1;
@@ -1365,11 +1365,11 @@ public:
   void update(){
     val = plugin->config.Aadj_val;
     if( BC_CModels::has_alpha(plugin->colormodel) ) {
-      if( hidden ) { show_window();  hidden = 0; }
+      if( is_hidden() ) show_window();
     }else{
-      if( !hidden ) { hide_window();  hidden = 1; }
+      if( !is_hidden() ) hide_window();
     }
-    if( hidden ) return;
+    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 ?
@@ -1692,13 +1692,11 @@ public:
 
 class BluebananaAAActive : public BC_CheckBox {
 public:
-  int hidden;
 
   BluebananaAAActive(BluebananaMain *plugin, BluebananaWindow *gui)
   : BC_CheckBox(-1, -1, &plugin->config.Aadj_active, ""){
     this->plugin = plugin;
     this->gui = gui;
-    hidden = 0;
   }
   virtual int handle_event(){
     plugin->config.Aadj_active =
@@ -1709,11 +1707,11 @@ public:
   void update(){
     this->BC_CheckBox::update(plugin->config.Aadj_active,1);
     if( BC_CModels::has_alpha(plugin->colormodel) ) {
-      if( hidden ) { show_window();  hidden = 0; }
+      if( is_hidden() ) show_window();
     }else{
-      if( !hidden ) { hide_window();  hidden = 1; }
+      if( !is_hidden() ) hide_window();
     }
-    if( hidden ) return;
+    if( is_hidden() ) return;
     gui->Aadj_slider->update();
   }
   BluebananaMain *plugin;
@@ -1765,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:
@@ -1816,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();
@@ -1848,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();
@@ -1887,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;
     }
 
@@ -1915,7 +1938,7 @@ public:
   BluebananaMain *plugin;
   BluebananaWindow *gui;
   BC_Title *label;
-  int x,y,padx,hidden;
+  int x,y,padx;
 };
 
 // ------------------------------------------ Use mask ----------------------------------------
@@ -1931,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();
@@ -1969,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;
@@ -1985,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;
@@ -2009,7 +2029,7 @@ public:
   BluebananaMain *plugin;
   BluebananaWindow *gui;
   BC_Title *label;
-  int x,y,padx,hidden;
+  int x,y,padx;
 };
 
 // --------------------------------------- Main GUI window --------------------------------------
@@ -2072,26 +2092,30 @@ 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.);
   }
 
+  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]));
@@ -2451,10 +2475,11 @@ 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) return 0;
+  if(!plugin->server->plugin->on) return 0;
   if(d==207){
 
     /* if background render is active and we're showing the zebra, mark