aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/defines.h3
-rw-r--r--src/main.c21
-rw-r--r--src/ui.c63
3 files changed, 69 insertions, 18 deletions
diff --git a/src/defines.h b/src/defines.h
index 3d4bc31..98ba6d6 100644
--- a/src/defines.h
+++ b/src/defines.h
@@ -13,5 +13,8 @@ static const int FONT_ID = 0;
#define DEFAULT_DIMENSIONS_HEIGHT 720
#define DEFAULT_DIMENSIONS_WIDTH 1280
+#define DEFAULT_FONT_SIZE 12
+
+#define USE_LABELS
#endif // DEFINES_H_
diff --git a/src/main.c b/src/main.c
index b922d3e..c356cac 100644
--- a/src/main.c
+++ b/src/main.c
@@ -41,10 +41,10 @@ typedef struct {
typedef struct {
Arena frame_arena;
PointerState pointer;
+ sclay_font_t fonts[1];
KeyState *keys;
size_t keys_amount;
-
KnobSettings knob_settings;
snd_pcm_t *sound_device;
@@ -171,7 +171,7 @@ void HandleClayErrors(Clay_ErrorData errorData) {
printf("%s", errorData.errorText.chars);
}
-int init_ui() {
+int init_ui(AppState *state) {
sg_setup(&(sg_desc){
.environment = sglue_environment(),
.logger.func = slog_func,
@@ -181,7 +181,13 @@ int init_ui() {
});
sclay_setup();
- sclay_add_font("resources/Roboto-Regular.ttf");
+ int font = sclay_add_font("resources/Roboto-Regular.ttf");
+ if (font == FONS_INVALID) {
+ printf("Could not load font");
+ return 1;
+ }
+ state->fonts[0] = font;
+
sclay_set_custom_element_cb(handle_custom);
size_t totalMemorySize = Clay_MinMemorySize();
@@ -191,7 +197,8 @@ int init_ui() {
};
Clay_Initialize(clayMemory, (Clay_Dimensions) { (float) sapp_width(), (float) sapp_height() }, (Clay_ErrorHandler) { HandleClayErrors, 0});
- Clay_SetMeasureTextFunction(sclay_measure_text, NULL);
+ Clay_SetMeasureTextFunction(sclay_measure_text, state->fonts);
+ Clay_SetDebugModeEnabled(true);
return 0;
}
@@ -219,7 +226,7 @@ static void init(void *app_state) {
state->keys = keys;
state->keys_amount = sizeof(keys)/sizeof(keys[0]);
- if (init_ui() != 0) {
+ if (init_ui(state) != 0) {
printf("Couldn't initialize UI");
sapp_quit();
}
@@ -262,7 +269,7 @@ void fill_ui_data(UIData *ui_data, AppState *state) {
ui_data->keys_amount = state->keys_amount;
ui_data->knob_settings = &state->knob_settings;
- ui_data->scale = dimensions.width / DEFAULT_DIMENSIONS_WIDTH;
+ ui_data->scale = dimensions.width / DEFAULT_DIMENSIONS_WIDTH;
}
static void frame(void *app_state) {
@@ -287,7 +294,7 @@ static void frame(void *app_state) {
sgl_matrix_mode_modelview();
sgl_load_identity();
- sclay_render(render_commands, NULL);
+ sclay_render(render_commands, state->fonts);
sgl_draw();
sg_end_pass();
diff --git a/src/ui.c b/src/ui.c
index e797251..4a75863 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -1,5 +1,22 @@
#include "ui.h"
+#ifdef USE_LABELS
+#define CLAY_ADD_LABEL(label, scale, component) \
+ CLAY(CLAY_ID(label"_label_container"), { \
+ .layout = { \
+ .layoutDirection = CLAY_TOP_TO_BOTTOM, \
+ .childAlignment = { CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER }, \
+ .childGap = 2 * scale, \
+ }, \
+ }) { \
+ component; \
+ CLAY_TEXT(CLAY_STRING(label), CLAY_TEXT_CONFIG({ .fontSize = DEFAULT_FONT_SIZE * scale, .textColor = COLOR_FG })); \
+ }
+#else
+#define CLAY_ADD_LABEL(label, scale, component) \
+ component;
+#endif
+
bool point_is_inside_circle(Clay_Vector2 point, Clay_BoundingBox circle) {
float center_x = circle.x + circle.width / 2;
float center_y = circle.y + circle.height / 2;
@@ -312,9 +329,6 @@ void draw_screen(UIData *ui_data) {
.custom = {
.customData = wave,
},
- /* .clip = { */
- /* .horizontal = true, */
- /* }, */
});
}
}
@@ -327,10 +341,13 @@ void draw_panel(UIData *ui_data) {
.childAlignment = {CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER},
},
}) {
- CLAY(CLAY_ID("volume_knob_container")) {
- draw_knob(CLAY_ID("volume_knob"), ui_data, &ui_data->knob_settings->volume, CLAY_SIZING_FIXED(85 * ui_data->scale), CLAY_SIZING_FIXED(45 * ui_data->scale));
- }
-
+ CLAY_ADD_LABEL("Volume",
+ ui_data->scale,
+ draw_knob(CLAY_ID("volume_knob"),
+ ui_data,
+ &ui_data->knob_settings->volume,
+ CLAY_SIZING_FIXED(85 * ui_data->scale),
+ CLAY_SIZING_FIXED(45 * ui_data->scale)));
draw_screen(ui_data);
CLAY(CLAY_ID("envelope_knobs_container"), {
@@ -344,16 +361,40 @@ void draw_panel(UIData *ui_data) {
.childGap = 5,
},
}) {
- draw_knob(CLAY_ID("attack_knob"), ui_data, &ui_data->knob_settings->attack, CLAY_SIZING_FIXED(40 * ui_data->scale), CLAY_SIZING_FIXED(21 * ui_data->scale));
- draw_knob(CLAY_ID("decay_knob"), ui_data, &ui_data->knob_settings->decay, CLAY_SIZING_FIXED(40 * ui_data->scale), CLAY_SIZING_FIXED(21 * ui_data->scale));
+ CLAY_ADD_LABEL("Attack",
+ ui_data->scale,
+ draw_knob(CLAY_ID("attack_knob"),
+ ui_data,
+ &ui_data->knob_settings->attack,
+ CLAY_SIZING_FIXED(40 * ui_data->scale),
+ CLAY_SIZING_FIXED(21 * ui_data->scale)));
+ CLAY_ADD_LABEL("Decay",
+ ui_data->scale,
+ draw_knob(CLAY_ID("decay_knob"),
+ ui_data,
+ &ui_data->knob_settings->decay,
+ CLAY_SIZING_FIXED(40 * ui_data->scale),
+ CLAY_SIZING_FIXED(21 * ui_data->scale)));
}
CLAY(CLAY_ID("envelope_knobs_lower"), {
.layout = {
.childGap = 5,
},
}) {
- draw_knob(CLAY_ID("sustain_knob"), ui_data, &ui_data->knob_settings->sustain, CLAY_SIZING_FIXED(40 * ui_data->scale), CLAY_SIZING_FIXED(21 * ui_data->scale));
- draw_knob(CLAY_ID("release_knob"), ui_data, &ui_data->knob_settings->release, CLAY_SIZING_FIXED(40 * ui_data->scale), CLAY_SIZING_FIXED(21 * ui_data->scale));
+ CLAY_ADD_LABEL("Sustain",
+ ui_data->scale,
+ draw_knob(CLAY_ID("sustain_knob"),
+ ui_data,
+ &ui_data->knob_settings->sustain,
+ CLAY_SIZING_FIXED(40 * ui_data->scale),
+ CLAY_SIZING_FIXED(21 * ui_data->scale)));
+ CLAY_ADD_LABEL("Release",
+ ui_data->scale,
+ draw_knob(CLAY_ID("release_knob"),
+ ui_data,
+ &ui_data->knob_settings->release,
+ CLAY_SIZING_FIXED(40 * ui_data->scale),
+ CLAY_SIZING_FIXED(21 * ui_data->scale)));
}
}
};