diff options
Diffstat (limited to 'plugins/eg-sampler.lv2/sampler_ui.c')
-rw-r--r-- | plugins/eg-sampler.lv2/sampler_ui.c | 78 |
1 files changed, 35 insertions, 43 deletions
diff --git a/plugins/eg-sampler.lv2/sampler_ui.c b/plugins/eg-sampler.lv2/sampler_ui.c index 1895f22..24a79aa 100644 --- a/plugins/eg-sampler.lv2/sampler_ui.c +++ b/plugins/eg-sampler.lv2/sampler_ui.c @@ -25,19 +25,17 @@ #include "lv2/lv2plug.in/ns/ext/atom/atom-helpers.h" #include "lv2/lv2plug.in/ns/ext/atom/atom.h" -#include "lv2/lv2plug.in/ns/ext/uri-map/uri-map.h" +#include "lv2/lv2plug.in/ns/ext/atom/forge.h" +#include "lv2/lv2plug.in/ns/ext/urid/urid.h" #include "lv2/lv2plug.in/ns/extensions/ui/ui.h" -#define NS_ATOM "http://lv2plug.in/ns/ext/atom#" +#include "./uris.h" -#define SAMPLER_URI "http://lv2plug.in/plugins/eg-sampler" #define SAMPLER_UI_URI "http://lv2plug.in/plugins/eg-sampler#ui" -#define MIDI_EVENT_URI "http://lv2plug.in/ns/ext/midi#MidiEvent" -#define FILENAME_URI SAMPLER_URI "#filename" -#define STRING_BUF 8192 typedef struct { - LV2_URI_Map_Feature* uri_map; + LV2_URID_Mapper* mapper; + LV2_Atom_Forge* forge; LV2UI_Write_Function write; LV2UI_Controller controller; @@ -45,11 +43,10 @@ typedef struct { GtkWidget* button; } SamplerUI; -static uint32_t +static LV2_URID uri_to_id(SamplerUI* ui, const char* uri) { - return ui->uri_map->uri_to_id(ui->uri_map->callback_data, - NULL, uri); + return ui->mapper->map_uri(ui->mapper->handle, uri); } static void @@ -66,36 +63,29 @@ on_load_clicked(GtkWidget* widget, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); - if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { - char* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - const size_t filename_len = strlen(filename); - fprintf(stderr, "LOAD SAMPLE %s\n", filename); - const size_t msg_size = sizeof(LV2_Atom) - + sizeof(LV2_Object) - + sizeof(LV2_Atom_Property) - + filename_len + 1;; - - uint8_t buf[msg_size]; - LV2_Atom* msg = (LV2_Atom*)buf; - - msg->type = uri_to_id(ui, NS_ATOM "Blank"); - msg->size = 0; - LV2_Object* obj = (LV2_Object*)msg->body; - obj->context = 0; - obj->id = 0; - - lv2_atom_append_property(msg, - uri_to_id(ui, FILENAME_URI), - uri_to_id(ui, NS_ATOM "String"), - filename_len + 1, - (const uint8_t*)filename); - - //ui->write(ui->controller, - // 0, - - - + if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_ACCEPT) { + gtk_widget_destroy(dialog); + return; } + + char* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + const size_t filename_len = strlen(filename); + gtk_widget_destroy(dialog); + + uint8_t msg_buf[4096]; + LV2_Object* msg = (LV2_Object*)msg_buf; + lv2_atom_forge_set_message(ui->forge, msg, uri_to_id(ui, SET_MESSAGE_URI)); + lv2_object_append(msg, + uri_to_id(ui, FILENAME_URI), + uri_to_id(ui, NS_ATOM "String"), + filename_len, + filename); + + ui->write(ui->controller, 0, sizeof(LV2_Atom) + msg->size, + uri_to_id(ui, NS_ATOM "atomTransfer"), + msg); + + g_free(filename); } static LV2UI_Handle @@ -108,7 +98,7 @@ instantiate(const LV2UI_Descriptor* descriptor, const LV2_Feature* const* features) { SamplerUI* ui = (SamplerUI*)malloc(sizeof(SamplerUI)); - ui->uri_map = NULL; + ui->mapper = NULL; ui->write = write_function; ui->controller = controller; ui->button = NULL; @@ -116,17 +106,19 @@ instantiate(const LV2UI_Descriptor* descriptor, *widget = NULL; for (int i = 0; features[i]; ++i) { - if (strcmp(features[i]->URI, LV2_URI_MAP_URI) == 0) { - ui->uri_map = (LV2_URI_Map_Feature*)features[i]->data; + if (!strcmp(features[i]->URI, LV2_URID_URI "#Mapper")) { + ui->mapper = (LV2_URID_Mapper*)features[i]->data; } } - if (!ui->uri_map) { + if (!ui->mapper) { fprintf(stderr, "sampler_ui: Host does not support uri-map\n"); free(ui); return NULL; } + ui->forge = lv2_atom_forge_new(ui->mapper); + ui->button = gtk_button_new_with_label("Load Sample"); g_signal_connect(ui->button, "clicked", G_CALLBACK(on_load_clicked), |