Skip to content

Commit

Permalink
Draft location ext
Browse files Browse the repository at this point in the history
  • Loading branch information
roelofvkr authored and abique committed Nov 18, 2024
1 parent 19d8d01 commit 221d366
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/clap/all.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "ext/draft/resource-directory.h"
#include "ext/draft/transport-control.h"
#include "ext/draft/triggers.h"
#include "ext/draft/location.h"
#include "ext/draft/tuning.h"
#include "ext/draft/undo.h"
#include "ext/draft/scratch-memory.h"
2 changes: 2 additions & 0 deletions include/clap/color.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ typedef struct clap_color {
uint8_t blue;
} clap_color_t;

static const CLAP_CONSTEXPR clap_color_t CLAP_COLOR_TRANSPARENT = { 0, 0, 0, 0 };

#ifdef __cplusplus
}
#endif
72 changes: 72 additions & 0 deletions include/clap/ext/draft/location.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#pragma once

#include "../../plugin.h"
#include "../../color.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_LOCATION[] = "clap.location/1";

#ifdef __cplusplus
extern "C" {
#endif

enum {
// Represents a document/project/session.
CLAP_PLUGIN_LOCATION_PROJECT,

// Represents a group of tracks.
// It can contain both 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_PLUGIN_LOCATION_TRACK_GROUP,

// Represents a single tracks. It contains devices (serial).
CLAP_PLUGIN_LOCATION_TRACK,

// Represents a single device.
// It contains other nested device chains.
CLAP_PLUGIN_LOCATION_DEVICE,

// Represents a nested device chain (serial).
// Its parent must be a device.
// It contains other devices.
CLAP_PLUGIN_LOCATION_NESTED_DEVICE_CHAIN,
};

typedef struct clap_plugin_location_element {
// Kind of the element, must be one of the CLAP_PLUGIN_LOCATION_* values.
uint32_t kind;

// Index within the parent element.
// Set to 0 if irrelevant.
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.
const char *id;

// User friendly name of the element.
const char *name;

// Color for this element, should be CLAP_COLOR_TRANSPARENT if no color is
// used for this element.
clap_color_t color;
} clap_plugin_location_element_t;

typedef struct clap_plugin_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.
// [main-thread]
void (*set_location)(clap_plugin_t *plugin,
clap_plugin_location_element_t *path,
int num_elements);
} clap_plugin_location_t;

#ifdef __cplusplus
}
#endif

0 comments on commit 221d366

Please sign in to comment.