X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=scherzo.c;h=329884da93764973e0d595265d85dd5e2ac9b061;hb=f6b8f7f23bb8a4a5b30bfde8242578cca90ddacf;hp=c49584c2465e2c153f3f6690fa2df3045e829751;hpb=0261a9e510c766d7c8c69a8d66783bf050683c9f;p=scherzo diff --git a/scherzo.c b/scherzo.c index c49584c..329884d 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,19 +72,76 @@ 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[]) { GtkWidget *window; GtkWidget *drawing_area; scherzo_t scherzo; + score_staff_t *treble; + score_staff_t *bass; gtk_init (&argc, &argv); scherzo.score = score_create (NULL); - scherzo.staff_height = 20; + scherzo.staff_height = 48; score_set_staff_height (scherzo.score, scherzo.staff_height); + score_add_brace (scherzo.score, 2); + treble = score_add_staff (scherzo.score, SCORE_CLEF_G); + bass = score_add_staff (scherzo.score, SCORE_CLEF_F); + + score_staff_add_note (treble, SCORE_BUILD_NOTE (D, 4, WHOLE)); + score_staff_add_note (treble, SCORE_BUILD_NOTE (E, 4, WHOLE)); + score_staff_add_note (treble, SCORE_BUILD_NOTE (F, 4, WHOLE)); + score_staff_add_note (treble, SCORE_BUILD_NOTE (G, 4, WHOLE)); + score_staff_add_note (treble, SCORE_BUILD_NOTE (A, 4, WHOLE)); + score_staff_add_note (treble, SCORE_BUILD_NOTE (B, 4, WHOLE)); + score_staff_add_note (treble, SCORE_BUILD_NOTE (C, 5, WHOLE)); + score_staff_add_note (treble, SCORE_BUILD_NOTE (D, 5, WHOLE)); + + score_staff_add_note (bass, SCORE_BUILD_NOTE (B, 2, WHOLE)); + score_staff_add_note (bass, SCORE_BUILD_NOTE (C, 3, WHOLE)); + score_staff_add_note (bass, SCORE_BUILD_NOTE (D, 3, WHOLE)); + score_staff_add_note (bass, SCORE_BUILD_NOTE (E, 3, WHOLE)); + score_staff_add_note (bass, SCORE_BUILD_NOTE (F, 3, WHOLE)); + score_staff_add_note (bass, SCORE_BUILD_NOTE (G, 3, WHOLE)); + score_staff_add_note (bass, SCORE_BUILD_NOTE (A, 3, WHOLE)); + score_staff_add_note (bass, SCORE_BUILD_NOTE (B, 3, WHOLE)); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (window), 600, 400); @@ -97,6 +156,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);