add new clear-gray color theme
[ardour.git] / gtk2_ardour / vst_plugin_ui.cc
index 758c38cd8fe4bbb1d35775d100520cdd9a5f12a1..a964e96b4ee920ecb08f233c6e8cb8f779ade326 100644 (file)
 
 */
 
+#include <gtkmm.h>
 #include "ardour/vst_plugin.h"
 #include "ardour/vst_types.h"
+#include "ardour/plugin_insert.h"
 #include "vst_plugin_ui.h"
+
+#ifdef PLATFORM_WINDOWS
+#include <gdk/gdkwin32.h>
+#elif defined __APPLE__
+// TODO
+#else
 #include <gdk/gdkx.h>
+#endif
 
 VSTPluginUI::VSTPluginUI (boost::shared_ptr<ARDOUR::PluginInsert> insert, boost::shared_ptr<ARDOUR::VSTPlugin> plugin)
        : PlugUIBase (insert)
@@ -30,20 +39,20 @@ VSTPluginUI::VSTPluginUI (boost::shared_ptr<ARDOUR::PluginInsert> insert, boost:
        box->set_spacing (6);
        box->set_border_width (6);
        box->pack_end (focus_button, false, false);
-       box->pack_end (bypass_button, false, false, 10);
+       box->pack_end (bypass_button, false, false, 4);
+       box->pack_end (reset_button, false, false, 4);
        box->pack_end (delete_button, false, false);
        box->pack_end (save_button, false, false);
        box->pack_end (add_button, false, false);
-       box->pack_end (_preset_box, false, false);
+       box->pack_end (_preset_combo, false, false);
 
-       if (!insert->active ()) {
-               bypass_button.set_active_state (Gtkmm2ext::Active);
-       } else {
-               bypass_button.unset_active_state ();
-       }
+       bypass_button.set_active (!insert->active ());
 
        pack_start (*box, false, false);
+#ifdef GDK_WINDOWING_X11
        pack_start (_socket, true, true);
+       _socket.set_border_width (0);
+#endif
 }
 
 VSTPluginUI::~VSTPluginUI ()
@@ -52,39 +61,62 @@ VSTPluginUI::~VSTPluginUI ()
 }
 
 void
-VSTPluginUI::preset_selected ()
+VSTPluginUI::preset_selected (ARDOUR::Plugin::PresetRecord preset)
 {
+#ifdef GDK_WINDOWING_X11
        _socket.grab_focus ();
-       PlugUIBase::preset_selected ();
+#endif
+       PlugUIBase::preset_selected (preset);
 }
 
 int
 VSTPluginUI::get_preferred_height ()
 {
-       return _vst->state()->height;
+       return _vst->state()->height + _vst->state()->voffset;
 }
 
 int
 VSTPluginUI::get_preferred_width ()
 {
-       return _vst->state()->width;
+       return _vst->state()->width + _vst->state()->hoffset;
 }
 
 int
 VSTPluginUI::package (Gtk::Window& win)
 {
+#ifdef GDK_WINDOWING_X11
        /* Forward configure events to plugin window */
        win.signal_configure_event().connect (sigc::mem_fun (*this, &VSTPluginUI::configure_handler), false);
 
        /* This assumes that the window's owner understands the XEmbed protocol */
        _socket.add_id (get_XID ());
-       
+       _socket.set_size_request(
+                       _vst->state()->width + _vst->state()->hoffset,
+                       _vst->state()->height + _vst->state()->voffset);
+#endif
+
        return 0;
 }
 
 bool
-VSTPluginUI::configure_handler (GdkEventConfigure* ev)
+VSTPluginUI::on_window_show(const std::string& title)
+{
+       _vst->state()->gui_shown = 1;
+       return PlugUIBase::on_window_show(title);
+}
+
+void
+VSTPluginUI::on_window_hide()
 {
+       _vst->state()->gui_shown = 0;
+       PlugUIBase::on_window_hide();
+}
+
+
+bool
+VSTPluginUI::configure_handler (GdkEventConfigure*)
+{
+#ifdef GDK_WINDOWING_X11
        XEvent event;
        gint x, y;
        GdkWindow* w;
@@ -118,6 +150,6 @@ VSTPluginUI::configure_handler (GdkEventConfigure* ev)
        XSendEvent (GDK_WINDOW_XDISPLAY (w), GDK_WINDOW_XWINDOW (w), False, StructureNotifyMask, &event);
        gdk_error_trap_pop ();
 
+#endif
        return false;
 }
-