aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2022-06-11 14:46:02 +0200
committerThomas White <taw@physics.org>2022-06-11 14:46:14 +0200
commit07eb061a3dc3350e7f5db26b184bbbf6c3ac029d (patch)
tree0f669104c47c6d0b14746769f822aaed5ad8fc50
parentca7a9e2650c825b49ee8801e84b7711c5fb51342 (diff)
Fixture display: Clearer indication when a cue is running
-rw-r--r--guile/starlet/playback.scm9
-rw-r--r--src/starlet-fixture-display.c21
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 <starlet-playback>) port)
(format port
"#<<starlet-playback> 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);