X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=scherzo.c;h=f6669edc3fda5194149cd72d88883c963b5cc076;hb=e8131140bc963d8f19e4d8691a6b9447bff94534;hp=c49584c2465e2c153f3f6690fa2df3045e829751;hpb=0261a9e510c766d7c8c69a8d66783bf050683c9f;p=scherzo diff --git a/scherzo.c b/scherzo.c index c49584c..f6669ed 100644 --- a/scherzo.c +++ b/scherzo.c @@ -17,6 +17,7 @@ */ #include +#include #include "score.h" @@ -41,8 +42,8 @@ on_delete_event_quit (unused (GtkWidget *widget), } static int -on_expose_event_draw (GtkWidget *widget, - unused (GdkEventExpose *event), +on_expose_event_draw (GtkWidget *widget, + unused (GdkEventExpose *expose), void * user_data) { scherzo_t *scherzo = user_data; @@ -63,6 +64,7 @@ on_expose_event_draw (GtkWidget *widget, /* Add some padding on the left/right */ cairo_translate (cr, pad, pad); + score_set_staff_height (score, scherzo->staff_height); score_set_width (score, widget_width - 2 * pad); score_draw (score, cr); @@ -70,6 +72,39 @@ on_expose_event_draw (GtkWidget *widget, return TRUE; } +static int +on_key_press_event (GtkWidget *widget, + GdkEventKey *key, + void *user_data) +{ + scherzo_t *scherzo = user_data; + + switch (key->keyval) { + case GDK_KEY_plus: + case GDK_KEY_KP_Add: + case GDK_KEY_equal: + case GDK_KEY_KP_Equal: + scherzo->staff_height += 4; + gtk_widget_queue_draw (widget); + return TRUE; + break; + case GDK_KEY_minus: + case GDK_KEY_KP_Subtract: + scherzo->staff_height -= 4; + gtk_widget_queue_draw (widget); + return TRUE; + break; + case GDK_KEY_q: + case GDK_KEY_Q: + case GDK_KEY_Escape: + gtk_main_quit (); + return FALSE; + } + + /* Allow the event to propagate to other handlers. */ + return FALSE; +} + int main (int argc, char *argv[]) { @@ -80,7 +115,7 @@ main (int argc, char *argv[]) gtk_init (&argc, &argv); scherzo.score = score_create (NULL); - scherzo.staff_height = 20; + scherzo.staff_height = 24; score_set_staff_height (scherzo.score, scherzo.staff_height); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); @@ -97,6 +132,10 @@ main (int argc, char *argv[]) g_signal_connect (drawing_area, "expose-event", G_CALLBACK (on_expose_event_draw), &scherzo); + + g_signal_connect (window, "key-press-event", + G_CALLBACK (on_key_press_event), + &scherzo); gtk_widget_show_all (window);