108 lines
3.5 KiB
C
108 lines
3.5 KiB
C
#pragma once
|
|
|
|
#include "../../color.h"
|
|
#include "../../plugin.h"
|
|
#include "../../string-sizes.h"
|
|
|
|
// This extension allows a host to tell the plugin more about its position
|
|
// within a project or session.
|
|
|
|
static CLAP_CONSTEXPR const char CLAP_EXT_PROJECT_LOCATION[] = "clap.project-location/2";
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
enum clap_project_location_kind {
|
|
// Represents a document/project/session.
|
|
CLAP_PROJECT_LOCATION_PROJECT = 1,
|
|
|
|
// Represents a group of tracks.
|
|
// It can contain track groups, tracks, and devices (post processing).
|
|
// The first device within a track group has the index of
|
|
// the last track or track group within this group + 1.
|
|
CLAP_PROJECT_LOCATION_TRACK_GROUP = 2,
|
|
|
|
// Represents a single track.
|
|
// It contains devices (serial).
|
|
CLAP_PROJECT_LOCATION_TRACK = 3,
|
|
|
|
// Represents a single device.
|
|
// It can contain other nested device chains.
|
|
CLAP_PROJECT_LOCATION_DEVICE = 4,
|
|
|
|
// Represents a nested device chain (serial).
|
|
// Its parent must be a device.
|
|
// It contains other devices.
|
|
CLAP_PROJECT_LOCATION_NESTED_DEVICE_CHAIN = 5,
|
|
};
|
|
|
|
enum clap_project_location_track_kind {
|
|
// This track is an instrument track.
|
|
CLAP_PROJECT_LOCATION_INSTUMENT_TRACK = 1,
|
|
|
|
// This track is an audio track.
|
|
CLAP_PROJECT_LOCATION_AUDIO_TRACK = 2,
|
|
|
|
// This track is both an instrument and audio track.
|
|
CLAP_PROJECT_LOCATION_HYBRID_TRACK = 3,
|
|
|
|
// This track is a return track.
|
|
CLAP_PROJECT_LOCATION_RETURN_TRACK = 4,
|
|
|
|
// This track is a master track.
|
|
// Each group have a master track for processing the sum of all its children tracks.
|
|
CLAP_PROJECT_LOCATION_MASTER_TRACK = 5,
|
|
};
|
|
|
|
enum clap_project_location_flags {
|
|
CLAP_PROJECT_LOCATION_HAS_INDEX = 1 << 0,
|
|
CLAP_PROJECT_LOCATION_HAS_COLOR = 1 << 1,
|
|
};
|
|
|
|
typedef struct clap_project_location_element {
|
|
// A bit-mask, see clap_project_location_flags.
|
|
uint64_t flags;
|
|
|
|
// Kind of the element, must be one of the CLAP_PROJECT_LOCATION_* values.
|
|
uint32_t kind;
|
|
|
|
// Only relevant if kind is CLAP_PLUGIN_LOCATION_TRACK.
|
|
// see enum CLAP_PROJECT_LOCATION_track_kind.
|
|
uint32_t track_kind;
|
|
|
|
// Index within the parent element.
|
|
// Only usable if CLAP_PROJECT_LOCATION_HAS_INDEX is set in flags.
|
|
uint32_t index;
|
|
|
|
// Internal ID of the element.
|
|
// This is not intended for display to the user,
|
|
// but rather to give the host a potential quick way for lookups.
|
|
char id[CLAP_PATH_SIZE];
|
|
|
|
// User friendly name of the element.
|
|
char name[CLAP_NAME_SIZE];
|
|
|
|
// Color for this element.
|
|
// Only usable if CLAP_PROJECT_LOCATION_HAS_COLOR is set in flags.
|
|
clap_color_t color;
|
|
} clap_project_location_element_t;
|
|
|
|
typedef struct clap_plugin_project_location {
|
|
// Called by the host when the location of the plugin instance changes.
|
|
//
|
|
// The last item in this array always refers to the device itself, and as
|
|
// such is expected to be of kind CLAP_PLUGIN_LOCATION_DEVICE.
|
|
// The first item in this array always refers to the project this device is in and must be of
|
|
// kind CLAP_PROJECT_LOCATION_PROJECT. The path is expected to be something like: PROJECT >
|
|
// TRACK_GROUP+ > TRACK > (DEVICE > NESTED_DEVICE_CHAIN)* > DEVICE
|
|
//
|
|
// [main-thread]
|
|
void(CLAP_ABI *set)(const clap_plugin_t *plugin,
|
|
const clap_project_location_element_t *path,
|
|
uint32_t num_elements);
|
|
} clap_plugin_project_location_t;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|