r176 - trunk/src/target/OM-2007/applications/openmoko-chordmaster

mickey at gta01.hmw-consulting.de mickey at gta01.hmw-consulting.de
Thu Nov 2 14:32:03 CET 2006


Author: mickey
Date: 2006-11-02 13:32:02 +0000 (Thu, 02 Nov 2006)
New Revision: 176

Modified:
   trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.c
Log:
chordmaster: calculate and show barree


Modified: trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.c	2006-11-02 13:17:39 UTC (rev 175)
+++ trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.c	2006-11-02 13:32:02 UTC (rev 176)
@@ -37,7 +37,10 @@
 
     GdkGC* gc = gdk_gc_new( widget->window );
 
-    const gchar* frets = CHORD_FRETBOARD(widget)->frets;
+    gchar* frets = NULL;
+    if ( CHORD_FRETBOARD(widget)->frets )
+        frets = g_strdup( CHORD_FRETBOARD(widget)->frets );
+
     gdk_gc_set_line_attributes(gc, 2, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_MITER );
 
     // background
@@ -108,17 +111,31 @@
     }
 
     // barree
-    gint barree = 0;
-    gint max = 0;
+    gint maxfinger = 0;
+    gint minfinger = 10;
+
     for ( int i = 0; i < 6; ++i )
     {
+        if ( frets[i] == 'x' || frets[i] == 'X' || frets[i] == '0' ) continue;
+        gint position = frets[i] - 0x30;
+        if ( position > maxfinger ) maxfinger = position;
+        if ( position < minfinger ) minfinger = position;
+    }
+    if ( maxfinger > 5 )
+    {
+        for ( int i = 0; i < 6; ++i )
+        {
+            if ( frets[i] == 'x' || frets[i] == 'X' || frets[i] == '0' ) continue;
+            frets[i] = ( frets[i]-= minfinger);
+        }
+        gchar barree = 0x30 + minfinger;
+        GdkColor barreecolor = { 0, 0xee <<8, 0x22 <<8, 0x44 <<8 };
+        pango_layout_set_text( layout, &barree, 1 );
+        gdk_gc_set_rgb_fg_color( gc, &barreecolor );
+        //FIXME take font size into account
+        gdk_draw_layout( widget->window, gc, 25, 260, layout );
+    }
 
-
-    gint position = ( frets[5-i] - 0x30 );
-
-            gint position = ( frets[5-i] - 0x30 );
-
-
     // finger positions
     for ( int i = 0; i < 6; ++i )
     {
@@ -134,6 +151,7 @@
                 -1, -1,
                 GDK_RGB_DITHER_MAX, 0, 0);
     }
+    g_free( frets );
     return TRUE;
 }
 





More information about the commitlog mailing list