X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=scherzo.c;h=ae8ea3284760ba900b6dfdb07f8ba72a2c01fd4b;hb=82d0481012c66ad272598b337e062310f3adc174;hp=c49584c2465e2c153f3f6690fa2df3045e829751;hpb=0261a9e510c766d7c8c69a8d66783bf050683c9f;p=scherzo diff --git a/scherzo.c b/scherzo.c index c49584c..ae8ea32 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; @@ -61,8 +62,9 @@ on_expose_event_draw (GtkWidget *widget, cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); cairo_paint (cr); - /* Add some padding on the left/right */ - cairo_translate (cr, pad, pad); + /* Add some padding on the sides and top */ + cairo_translate (cr, pad, (int) scherzo->staff_height / 2); + 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);