PKGBUILD fix libva/vdpau deps
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / yuv / yuv.C
index 9e7dce83f0a6bff18d9130dcf6a789a0dda06ea7..845ca48aabb7d171340e9310c2479b1e31a45fe3 100644 (file)
 #include <stdint.h>
 #include <string.h>
 
+#define RESET_ALL 0
+#define RESET_Y_SLIDER 1
+#define RESET_U_SLIDER 2
+#define RESET_V_SLIDER 3
 
 class YUVEffect;
+class YUVWindow;
+class YUVReset;
+class YUVSliderClr;
 
 
 class YUVConfig
 {
 public:
        YUVConfig();
+       void reset(int clear);
 
        void copy_from(YUVConfig &src);
        int equivalent(YUVConfig &src);
@@ -61,13 +69,37 @@ public:
        float *output;
 };
 
+class YUVReset : public BC_GenericButton
+{
+public:
+       YUVReset(YUVEffect *plugin, YUVWindow *window, int x, int y);
+       ~YUVReset();
+       int handle_event();
+       YUVEffect *plugin;
+       YUVWindow *window;
+};
+
+class YUVSliderClr : public BC_GenericButton
+{
+public:
+       YUVSliderClr(YUVEffect *plugin, YUVWindow *window, int x, int y, int w, int clear);
+       ~YUVSliderClr();
+       int handle_event();
+       YUVEffect *plugin;
+       YUVWindow *window;
+       int clear;
+};
+
 class YUVWindow : public PluginClientWindow
 {
 public:
        YUVWindow(YUVEffect *plugin);
        void create_objects();
+       void update_gui(int clear);
        YUVLevel *y, *u, *v;
        YUVEffect *plugin;
+       YUVReset *reset;
+       YUVSliderClr *yClr, *uClr, *vClr;
 };
 
 
@@ -101,9 +133,23 @@ REGISTER_PLUGIN(YUVEffect)
 
 YUVConfig::YUVConfig()
 {
-       y = 0;
-       u = 0;
-       v = 0;
+       reset(RESET_ALL);
+}
+
+void YUVConfig::reset(int clear)
+{
+       switch(clear) {
+               case RESET_Y_SLIDER : y = 0;
+                       break;
+               case RESET_U_SLIDER : u = 0;
+                       break;
+               case RESET_V_SLIDER : v = 0;
+                       break;
+               case RESET_ALL :
+               default:
+                       y = u = v = 0;
+                       break;
+       }
 }
 
 void YUVConfig::copy_from(YUVConfig &src)
@@ -161,35 +207,98 @@ int YUVLevel::handle_event()
 }
 
 
+YUVReset::YUVReset(YUVEffect *plugin, YUVWindow *window, int x, int y)
+ : BC_GenericButton(x, y, _("Reset"))
+{
+       this->plugin = plugin;
+       this->window = window;
+}
+YUVReset::~YUVReset()
+{
+}
+int YUVReset::handle_event()
+{
+       plugin->config.reset(RESET_ALL);
+       window->update_gui(RESET_ALL);
+       plugin->send_configure_change();
+       return 1;
+}
+
+
+YUVSliderClr::YUVSliderClr(YUVEffect *plugin, YUVWindow *window, int x, int y, int w, int clear)
+ : BC_GenericButton(x, y, w, _("⌂"))
+{
+       this->plugin = plugin;
+       this->window = window;
+       this->clear = clear;
+}
+YUVSliderClr::~YUVSliderClr()
+{
+}
+int YUVSliderClr::handle_event()
+{
+       // clear==1 ==> Y slider
+       // clear==2 ==> U slider
+       // clear==3 ==> V slider
+       plugin->config.reset(clear);
+       window->update_gui(clear);
+       plugin->send_configure_change();
+       return 1;
+}
+
+
 YUVWindow::YUVWindow(YUVEffect *plugin)
- : PluginClientWindow(plugin,
-       260,
-       100,
-       260,
-       100,
-       0)
+ : PluginClientWindow(plugin, 310, 135, 310, 135, 0)
 {
        this->plugin = plugin;
 }
 
 void YUVWindow::create_objects()
 {
-       int x = 10, y = 10, x1 = 50;
+       int x = 10, y = 10, x1 = 40;
+       int x2 = 0; int clrBtn_w = 50;
+
        add_subwindow(new BC_Title(x, y, _("Y:")));
        add_subwindow(this->y = new YUVLevel(plugin, &plugin->config.y, x1, y));
+       x2 = x1 + this->y->get_w() + 10;
+       add_subwindow(yClr = new YUVSliderClr(plugin, this, x2, y, clrBtn_w, RESET_Y_SLIDER));
+
        y += 30;
        add_subwindow(new BC_Title(x, y, _("U:")));
        add_subwindow(u = new YUVLevel(plugin, &plugin->config.u, x1, y));
+       add_subwindow(uClr = new YUVSliderClr(plugin, this, x2, y, clrBtn_w, RESET_U_SLIDER));
+
        y += 30;
        add_subwindow(new BC_Title(x, y, _("V:")));
        add_subwindow(v = new YUVLevel(plugin, &plugin->config.v, x1, y));
+       add_subwindow(vClr = new YUVSliderClr(plugin, this, x2, y, clrBtn_w, RESET_V_SLIDER));
+
+       y += 35;
+       add_subwindow(reset = new YUVReset(plugin, this, x, y));
 
        show_window();
        flush();
 }
 
 
-
+// for Reset button
+void YUVWindow::update_gui(int clear)
+{
+       switch(clear) {
+               case RESET_Y_SLIDER : this->y->update(plugin->config.y);
+                       break;
+               case RESET_U_SLIDER : u->update(plugin->config.u);
+                       break;
+               case RESET_V_SLIDER : v->update(plugin->config.v);
+                       break;
+               case RESET_ALL :
+               default:
+                       this->y->update(plugin->config.y);
+                       u->update(plugin->config.u);
+                       v->update(plugin->config.v);
+                       break;
+       }
+}