From 07eb061a3dc3350e7f5db26b184bbbf6c3ac029d Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sat, 11 Jun 2022 14:46:02 +0200 Subject: Fixture display: Clearer indication when a cue is running --- guile/starlet/playback.scm | 9 +++++++-- src/starlet-fixture-display.c | 21 ++++++++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/guile/starlet/playback.scm b/guile/starlet/playback.scm index 747dee7..5e6038e 100644 --- a/guile/starlet/playback.scm +++ b/guile/starlet/playback.scm @@ -46,7 +46,8 @@ back! reload-cue-list! reassert-current-cue! - state-change-hook)) + state-change-hook + playback-state)) ;; A "playback" is a state which knows how to run cues @@ -366,10 +367,14 @@ 'no-more-cues-in-list))) +(define (playback-state pb) + (atomic-box-ref (state-box pb))) + + (define-method (write (pb ) port) (format port "#< state: ~a current-cue: ~a next-cue: ~a>" - (atomic-box-ref (state-box pb)) + (playback-state pb) (exact->inexact (get-playback-cue-number pb)) (next-cue-number pb))) diff --git a/src/starlet-fixture-display.c b/src/starlet-fixture-display.c index e8fb4d6..48e2f15 100644 --- a/src/starlet-fixture-display.c +++ b/src/starlet-fixture-display.c @@ -60,6 +60,7 @@ struct fixture_display struct fixture *fixtures; int n_fixtures; double current_cue_number; + int cue_running; double scanout_rate; char *playback_name; GtkWidget *da; @@ -232,14 +233,23 @@ static gboolean draw_sig(GtkWidget *widget, cairo_t *cr, struct fixture_display /* Playback status */ cairo_save(cr); + if ( fixd->cue_running ) { + cairo_rectangle(cr, 0.0, 0.0, w, 18.0); + cairo_set_source_rgb(cr, 0.5, 0.0, 0.0); + cairo_fill(cr); + } + if ( fixd->current_cue_number < 0.0 ) { - snprintf(tmp, 128, "Current cue doesn't exist! " + snprintf(tmp, 128, "Playback %s: Current cue doesn't exist! " "Scanout %.2f per second", + fixd->playback_name, fixd->scanout_rate); } else { - snprintf(tmp, 128, "Current cue number: %.2f " + snprintf(tmp, 128, "Playback %s: Current cue number: %.2f " "Scanout %.2f per second", - fixd->current_cue_number, fixd->scanout_rate); + fixd->playback_name, + fixd->current_cue_number, + fixd->scanout_rate); } plot_text(cr, tmp, pc, fontdesc, 0.0, 0.0); cairo_restore(cr); @@ -296,7 +306,9 @@ static void request_playback_status(struct fixture_display *fixd) snprintf(tmp, 256, "(list 'playback-status (list " "(get-playback-cue-number %s)" "scanout-freq" + "(playback-state %s)" "))", + fixd->playback_name, fixd->playback_name); repl_send(fixd->repl, tmp); } @@ -606,6 +618,8 @@ static void handle_playback_status(struct fixture_display *fixd, SCM list) fixd->current_cue_number = scm_to_double(cue_number); } fixd->scanout_rate = scm_to_double(scm_list_ref(list, scm_from_int(1))); + fixd->cue_running = symbol_eq(scm_list_ref(list, scm_from_int(2)), + "running"); } @@ -748,6 +762,7 @@ int main(int argc, char *argv[]) fixd.verbose = verbose; fixd.repl = NULL; fixd.playback_name = strdup("pb"); + fixd.cue_running = 0; gtk_container_add(GTK_CONTAINER(mainwindow), GTK_WIDGET(da)); gtk_widget_set_can_focus(GTK_WIDGET(da), TRUE); -- cgit v1.2.3