]> git.cworth.org Git - scherzo/blobdiff - scherzo.c
Make the brace and clef symbols scale with the staff.
[scherzo] / scherzo.c
index c49584c2465e2c153f3f6690fa2df3045e829751..ae8ea3284760ba900b6dfdb07f8ba72a2c01fd4b 100644 (file)
--- a/scherzo.c
+++ b/scherzo.c
@@ -17,6 +17,7 @@
  */
 
 #include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
 
 #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);