2023-07-28 01:14:53 +02:00
|
|
|
/*---------------------------------------------------------------------------------*/
|
|
|
|
/* Includes */
|
|
|
|
/*---------------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
#ifndef _LV2_UI_H_
|
|
|
|
#define _LV2_UI_H_
|
|
|
|
|
|
|
|
#include <limits.h>
|
|
|
|
|
|
|
|
#include "lv2/ui/ui.h"
|
|
|
|
|
|
|
|
#include <gtk/gtk.h>
|
|
|
|
#include <gdk/gdk.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* Global definitions */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
2024-04-03 14:10:45 +02:00
|
|
|
#define DRD_DRUMMER_UI_URI "http://rx3.org/AlkorZ3/drummer#ui"
|
2023-07-28 01:14:53 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
typedef struct {
|
|
|
|
LV2_Atom_Forge forge;
|
|
|
|
LV2_URID_Map* map;
|
|
|
|
LV2UI_Request_Value* request_value;
|
|
|
|
LV2_Log_Logger logger;
|
|
|
|
SamplerURIs uris;
|
|
|
|
PeaksReceiver precv;
|
|
|
|
|
|
|
|
LV2UI_Write_Function write;
|
|
|
|
LV2UI_Controller controller;
|
|
|
|
|
|
|
|
GtkWidget* box;
|
|
|
|
GtkWidget* play_button;
|
|
|
|
GtkWidget* file_button;
|
|
|
|
GtkWidget* request_file_button;
|
|
|
|
GtkWidget* button_box;
|
|
|
|
GtkWidget* canvas;
|
|
|
|
|
|
|
|
uint32_t width;
|
|
|
|
uint32_t requested_n_peaks;
|
|
|
|
char* filename;
|
|
|
|
|
|
|
|
uint8_t forge_buf[1024];
|
|
|
|
|
|
|
|
// Optional show/hide interface
|
|
|
|
GtkWidget* window;
|
|
|
|
bool did_init;
|
|
|
|
} SamplerUI;
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct DRT_LV2UI_URIS
|
|
|
|
{
|
|
|
|
LV2_URID Atom_Object;
|
|
|
|
|
|
|
|
LV2_URID String_URId;
|
|
|
|
LV2_URID Bool_URId;
|
|
|
|
LV2_URID Int_URId;
|
2024-04-10 10:05:11 +02:00
|
|
|
LV2_URID Long_URId;
|
|
|
|
LV2_URID Tuple_URId;
|
2023-07-28 01:14:53 +02:00
|
|
|
|
|
|
|
LV2_URID Midi_Event;
|
|
|
|
|
|
|
|
LV2_URID UI_Msg;
|
|
|
|
|
|
|
|
// LV2_URID kit_path;
|
2024-04-10 10:05:11 +02:00
|
|
|
|
|
|
|
LV2_URID UI_Enable;
|
|
|
|
LV2_URID UI_Disable;
|
|
|
|
|
|
|
|
LV2_URID Kit_Name_Update;
|
2023-07-28 01:14:53 +02:00
|
|
|
|
|
|
|
LV2_URID Atom_EventTransfer;
|
|
|
|
|
|
|
|
// LV2_URID get_state;
|
|
|
|
// LV2_URID midi_info;
|
|
|
|
// LV2_URID sample_trigger;
|
|
|
|
// LV2_URID channel_id;
|
|
|
|
|
|
|
|
LV2_URID Velocity_Ignore_Flag_Toggle;
|
|
|
|
LV2_URID Note_Off_Ignore_Flag_Toggle;
|
|
|
|
|
|
|
|
// LV2_URID zero_position;
|
|
|
|
// LV2_URID sample_add;
|
|
|
|
// LV2_URID sample_remove;
|
|
|
|
} DRT_LV2UI_URIS;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct DRT_LV2UI_Base
|
|
|
|
{
|
|
|
|
// LV2
|
|
|
|
LV2UI_Write_Function Write;
|
|
|
|
LV2UI_Controller Controller;
|
|
|
|
LV2_Atom_Forge Forge;
|
|
|
|
|
|
|
|
// Ports
|
2024-04-08 10:01:34 +02:00
|
|
|
LV2_Atom_Sequence *Control_Port;
|
|
|
|
LV2_Atom_Sequence *Core_Event_Port;
|
2023-07-28 01:14:53 +02:00
|
|
|
|
|
|
|
//Config
|
2024-04-08 10:01:34 +02:00
|
|
|
float Kit_Id;
|
|
|
|
float Channel_Id;
|
|
|
|
float Base_Note;
|
|
|
|
float Velocity_Ignore_Note;
|
|
|
|
float Note_Off_Ignore_Note;
|
|
|
|
float Velocity_Ignore_Flag;
|
|
|
|
float Note_Off_Ignore_Flag;
|
|
|
|
float Position_Id;
|
2023-07-28 01:14:53 +02:00
|
|
|
|
|
|
|
// params
|
2024-04-08 10:01:34 +02:00
|
|
|
int Zero_Position;
|
|
|
|
float **Gains;
|
|
|
|
float **Pans;
|
2023-07-28 01:14:53 +02:00
|
|
|
|
|
|
|
// URIs
|
2024-04-08 10:01:34 +02:00
|
|
|
LV2_URID_Map *Map_Ptr;
|
|
|
|
DRT_LV2UI_URIS URIS;
|
2023-07-28 01:14:53 +02:00
|
|
|
|
|
|
|
// Logger
|
2024-04-08 10:01:34 +02:00
|
|
|
LV2_Log_Logger Logger;
|
2023-07-28 01:14:53 +02:00
|
|
|
|
|
|
|
// UI
|
2024-04-08 10:01:34 +02:00
|
|
|
GtkWidget *Main_Widget_Ptr;
|
|
|
|
GtkWidget *Kit_ComboBox_Ptr;
|
|
|
|
GtkWidget *Channel_ComboBox_Ptr;
|
|
|
|
GtkWidget *Base_Note_Spin_Ptr;
|
|
|
|
GtkWidget *Base_Note_Label_Ptr;
|
|
|
|
char Base_Note_Label_Buf[32];
|
|
|
|
GtkWidget *Position_ComboBox_Ptr;
|
|
|
|
GtkWidget *Velocity_Ignore_Note_Spin_Ptr;
|
|
|
|
GtkWidget *Note_Off_Ignore_Note_Spin_Ptr;
|
|
|
|
GtkWidget *Velocity_Ignore_Flag_CheckBox_Ptr;
|
|
|
|
GtkWidget *Note_Off_Ignore_Flag_CheckBox_Ptr;
|
2023-07-28 01:14:53 +02:00
|
|
|
|
|
|
|
} DRT_LV2UI_Base;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ifdef _LV2_UI_C_
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* Private Definitions */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
#define DRD_MODULE_NAME "gui"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DRT_LV2UI_Base */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
DRT_LV2UI_Base DRG_LV2UI_Base;
|
|
|
|
|
|
|
|
char *DRG_LV2UI_Note_String = "C C#D D#E F F#G G#A A#B ";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* Private Prototypes */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_Map_URIS */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static inline void DR_LV2UI_Map_URIS( LV2_URID_Map *, DRT_LV2UI_URIS *);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_Log_Write */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
DRT_Status DR_LV2UI_Log_Write( DRT_Log_Type_Id, char *, va_list);
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-10 10:05:11 +02:00
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_UI_Enable */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static DRT_Status DR_LV2UI_UI_Enable( void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_UI_Disable */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static DRT_Status DR_LV2UI_UI_Disable( void);
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-28 01:14:53 +02:00
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_Channel_ID_ComboBox_Create */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static GtkWidget *DR_LV2UI_Channel_Id_ComboBox_Create( void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_Channel_Id_ComboBox_Change */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static void DR_LV2UI_Channel_Id_ComboBox_Changed( GtkComboBox *, gpointer);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_Position_Id_ComboBox_Create */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static GtkWidget *DR_LV2UI_Position_Id_ComboBox_Create( void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_Position_Id_ComboBox_Change */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static void DR_LV2UI_Position_Id_ComboBox_Changed( GtkComboBox *, gpointer);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_Velocity_Ignore_Flag_Toggled */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static gboolean DR_LV2UI_Velocity_Ignore_Flag_Toggled( GtkToggleButton *, gpointer);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_Note_Off_Ignore_Flag_Toggled */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static gboolean DR_LV2UI_Note_Off_Ignore_Flag_Toggled( GtkToggleButton *, gpointer);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_Build */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
DRT_Status DR_LV2UI_UI_Build();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_Instantiate */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static LV2UI_Handle DR_LV2UI_Instantiate( const LV2UI_Descriptor *, const char *, const char *, LV2UI_Write_Function, LV2UI_Controller, LV2UI_Widget *, const LV2_Feature * const *);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_Cleanup */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static void DR_LV2UI_Cleanup( LV2UI_Handle);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DR_LV2UI_Port_Event */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static void DR_LV2UI_Port_Event( LV2UI_Handle, uint32_t, uint32_t, uint32_t, const void *);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* LV2UI_Descritor */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
LV2_SYMBOL_EXPORT const LV2UI_Descriptor *lv2ui_descriptor( uint32_t);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* Post Private Definitions */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* DRG_LV2UI_Descritor */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
static const LV2UI_Descriptor DRG_LV2UI_Descriptor =
|
|
|
|
{
|
|
|
|
DRD_DRUMMER_URI "#ui",
|
|
|
|
DR_LV2UI_Instantiate,
|
|
|
|
DR_LV2UI_Cleanup,
|
|
|
|
DR_LV2UI_Port_Event,
|
|
|
|
NULL};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# else // ifdef _LV2_UI_C_
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* Public Prototypes */
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# endif // ifndef _LV2_UI_C_
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
#endif // ifndef _LV2_UI_H_
|
|
|
|
|