aboutsummaryrefslogtreecommitdiffstats
path: root/src/jalv_gtkmm2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/jalv_gtkmm2.cpp')
-rw-r--r--src/jalv_gtkmm2.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/jalv_gtkmm2.cpp b/src/jalv_gtkmm2.cpp
new file mode 100644
index 0000000..7e70a07
--- /dev/null
+++ b/src/jalv_gtkmm2.cpp
@@ -0,0 +1,97 @@
+/*
+ Copyright 2007-2016 David Robillard <http://drobilla.net>
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#include <gtkmm/button.h>
+#include <gtkmm/main.h>
+#include <gtkmm/window.h>
+
+#include "jalv_internal.h"
+
+Gtk::Main* jalv_gtk_main = NULL;
+
+int
+jalv_init(int* argc, char*** argv, JalvOptions* opts)
+{
+ jalv_gtk_main = new Gtk::Main(*argc, *argv);
+ return 0;
+}
+
+const char*
+jalv_native_ui_type(void)
+{
+ return "http://lv2plug.in/ns/extensions/ui#GtkUI";
+}
+
+void
+jalv_ui_port_event(Jalv* jalv,
+ uint32_t port_index,
+ uint32_t buffer_size,
+ uint32_t protocol,
+ const void* buffer)
+{
+ if (jalv->ui_instance) {
+ suil_instance_port_event(jalv->ui_instance, port_index,
+ buffer_size, protocol, buffer);
+ }
+}
+
+bool
+jalv_discover_ui(Jalv* jalv)
+{
+ return true;
+}
+
+int
+jalv_open_ui(Jalv* jalv)
+{
+ Gtk::Window* window = new Gtk::Window();
+
+ if (jalv->ui) {
+ jalv_ui_instantiate(jalv, jalv_native_ui_type(), NULL);
+ }
+
+ if (jalv->ui_instance) {
+ GtkWidget* widget = (GtkWidget*)suil_instance_get_widget(
+ jalv->ui_instance);
+ Gtk::Widget* widgetmm = Glib::wrap(widget);
+ window->add(*Gtk::manage(widgetmm));
+ widgetmm->show_all();
+
+ g_timeout_add(1000 / jalv->ui_update_hz,
+ (GSourceFunc)jalv_update, jalv);
+ } else {
+ Gtk::Button* button = Gtk::manage(new Gtk::Button("Close"));
+ window->add(*Gtk::manage(button));
+ }
+
+ window->set_resizable(jalv_ui_is_resizable(jalv));
+ window->show_all();
+
+ Gtk::Main::run(*window);
+
+ delete window;
+ delete jalv_gtk_main;
+ zix_sem_post(&jalv->done);
+
+ return 0;
+}
+
+int
+jalv_close_ui(Jalv* jalv)
+{
+ Gtk::Main::quit();
+ return 0;
+}