add BC_SCALE env var for hi def monitors, cleanup theme data
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / oilpainting / oil.C
index 9dbe1e241b4ec089f7c5e5b20a69ac7c065223f7..0e2c039dda68cdf1d3a72d195d23b569469c50b0 100644 (file)
 
 
 class OilEffect;
-
+class OilWindow;
+class OilReset;
 
 
 class OilConfig
 {
 public:
        OilConfig();
+       void reset();
+
        void copy_from(OilConfig &src);
        int equivalent(OilConfig &src);
        void interpolate(OilConfig &prev,
@@ -79,16 +82,28 @@ public:
        OilEffect *plugin;
 };
 
+class OilReset : public BC_GenericButton
+{
+public:
+       OilReset(OilEffect *plugin, OilWindow *window, int x, int y);
+       ~OilReset();
+       int handle_event();
+       OilEffect *plugin;
+       OilWindow *window;
+};
+
+
 class OilWindow : public PluginClientWindow
 {
 public:
        OilWindow(OilEffect *plugin);
        ~OilWindow();
        void create_objects();
-
+       void update();
        OilEffect *plugin;
        OilRadius *radius;
        OilIntensity *intensity;
+       OilReset *reset;
 };
 
 
@@ -159,9 +174,12 @@ public:
 
 
 
-
-
 OilConfig::OilConfig()
+{
+       reset();
+}
+
+void OilConfig::reset()
 {
        radius = 5;
        use_intensity = 0;
@@ -208,8 +226,8 @@ OilRadius::OilRadius(OilEffect *plugin, int x, int y)
  : BC_FSlider(x,
                y,
                0,
-               200,
-               200,
+               xS(200),
+               yS(200),
                (float)0,
                (float)30,
                plugin->config.radius)
@@ -242,6 +260,22 @@ int OilIntensity::handle_event()
 }
 
 
+OilReset::OilReset(OilEffect *plugin, OilWindow *window, int x, int y)
+ : BC_GenericButton(x, y, _("Reset"))
+{
+       this->plugin = plugin;
+       this->window = window;
+}
+OilReset::~OilReset()
+{
+}
+int OilReset::handle_event()
+{
+       plugin->config.reset();
+       window->update();
+       plugin->send_configure_change();
+       return 1;
+}
 
 
 
@@ -249,10 +283,10 @@ int OilIntensity::handle_event()
 
 OilWindow::OilWindow(OilEffect *plugin)
  : PluginClientWindow(plugin,
-       300,
-       160,
-       300,
-       160,
+       xS(300),
+       yS(120),
+       xS(300),
+       yS(120),
        0)
 {
        this->plugin = plugin;
@@ -264,18 +298,27 @@ OilWindow::~OilWindow()
 
 void OilWindow::create_objects()
 {
-       int x = 10, y = 10;
+       int xs10 = xS(10), xs70 = xS(70);
+       int ys10 = yS(10), ys40 = yS(40);
+       int x = xs10, y = ys10;
        add_subwindow(new BC_Title(x, y, _("Radius:")));
-       add_subwindow(radius = new OilRadius(plugin, x + 70, y));
-       y += 40;
+       add_subwindow(radius = new OilRadius(plugin, x + xs70, y));
+       y += ys40;
        add_subwindow(intensity = new OilIntensity(plugin, x, y));
+       y += ys40;
+       add_subwindow(reset = new OilReset(plugin, this, x, y));
 
        show_window();
        flush();
 }
 
 
-
+// for Reset button
+void OilWindow::update()
+{
+       radius->update(plugin->config.radius);
+       intensity->update(plugin->config.use_intensity);
+}