Suil  0.6.0
suil.h
00001 /*
00002   Copyright 2011 David Robillard <http://drobilla.net>
00003 
00004   Permission to use, copy, modify, and/or distribute this software for any
00005   purpose with or without fee is hereby granted, provided that the above
00006   copyright notice and this permission notice appear in all copies.
00007 
00008   THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
00009   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
00010   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
00011   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
00012   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
00013   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
00014   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
00015 */
00016 
00021 #ifndef SUIL_SUIL_H
00022 #define SUIL_SUIL_H
00023 
00024 #include <stdbool.h>
00025 #include <stdint.h>
00026 
00027 #include "lv2/lv2plug.in/ns/lv2core/lv2.h"
00028 
00029 #ifdef SUIL_SHARED
00030 #    ifdef _WIN32
00031 #        define SUIL_LIB_IMPORT __declspec(dllimport)
00032 #        define SUIL_LIB_EXPORT __declspec(dllexport)
00033 #    else
00034 #        define SUIL_LIB_IMPORT __attribute__((visibility("default")))
00035 #        define SUIL_LIB_EXPORT __attribute__((visibility("default")))
00036 #    endif
00037 #    ifdef SUIL_INTERNAL
00038 #        define SUIL_API SUIL_LIB_EXPORT
00039 #    else
00040 #        define SUIL_API SUIL_LIB_IMPORT
00041 #    endif
00042 #else
00043 #    define SUIL_API
00044 #endif
00045 
00046 #ifdef __cplusplus
00047 extern "C" {
00048 #endif
00049 
00063 typedef struct SuilHostImpl SuilHost;
00064 
00066 typedef struct SuilInstanceImpl SuilInstance;
00067 
00069 typedef void* SuilWidget;
00070 
00079 typedef void* SuilController;
00080 
00082 typedef void (*SuilPortWriteFunc)(
00083     SuilController controller,
00084     uint32_t       port_index,
00085     uint32_t       buffer_size,
00086     uint32_t       protocol,
00087     void const*    buffer);
00088 
00090 typedef uint32_t (*SuilPortIndexFunc)(
00091     SuilController controller,
00092     const char*    port_symbol);
00093 
00095 typedef uint32_t (*SuilPortSubscribeFunc)(
00096     SuilController            controller,
00097     uint32_t                  port_index,
00098     uint32_t                  protocol,
00099     const LV2_Feature* const* features);
00100 
00102 typedef uint32_t (*SuilPortUnsubscribeFunc)(
00103     SuilController            controller,
00104     uint32_t                  port_index,
00105     uint32_t                  protocol,
00106     const LV2_Feature* const* features);
00107 
00109 typedef void (*SuilTouchFunc)(
00110     SuilController controller,
00111     uint32_t       port_index,
00112     bool           grabbed);
00113 
00121 SUIL_API
00122 SuilHost*
00123 suil_host_new(SuilPortWriteFunc       write_func,
00124               SuilPortIndexFunc       index_func,
00125               SuilPortSubscribeFunc   subscribe_func,
00126               SuilPortUnsubscribeFunc unsubscribe_func);
00127 
00133 SUIL_API
00134 void
00135 suil_host_set_touch_func(SuilHost*     host,
00136                          SuilTouchFunc touch_func);
00137 
00141 SUIL_API
00142 void
00143 suil_host_free(SuilHost* host);
00144 
00154 SUIL_API
00155 unsigned
00156 suil_ui_supported(const char* host_type_uri,
00157                   const char* ui_type_uri);
00158 
00172 SUIL_API
00173 SuilInstance*
00174 suil_instance_new(SuilHost*                 host,
00175                   SuilController            controller,
00176                   const char*               container_type_uri,
00177                   const char*               plugin_uri,
00178                   const char*               ui_uri,
00179                   const char*               ui_type_uri,
00180                   const char*               ui_bundle_path,
00181                   const char*               ui_binary_path,
00182                   const LV2_Feature* const* features);
00183 
00190 SUIL_API
00191 void
00192 suil_instance_free(SuilInstance* instance);
00193 
00202 SUIL_API
00203 SuilWidget
00204 suil_instance_get_widget(SuilInstance* instance);
00205 
00209 SUIL_API
00210 void
00211 suil_instance_port_event(SuilInstance* instance,
00212                          uint32_t      port_index,
00213                          uint32_t      buffer_size,
00214                          uint32_t      format,
00215                          const void*   buffer);
00216 
00220 SUIL_API
00221 const void*
00222 suil_instance_extension_data(SuilInstance* instance,
00223                              const char*   uri);
00224 
00229 #ifdef __cplusplus
00230 } /* extern "C" */
00231 #endif
00232 
00233 #endif /* SUIL_SUIL_H */