r175 - trunk/src/target/OM-2007/applications/openmoko-chordmaster
mickey at gta01.hmw-consulting.de
mickey at gta01.hmw-consulting.de
Thu Nov 2 14:17:41 CET 2006
Author: mickey
Date: 2006-11-02 13:17:39 +0000 (Thu, 02 Nov 2006)
New Revision: 175
Added:
trunk/src/target/OM-2007/applications/openmoko-chordmaster/ball.png
trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.c
trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.h
trunk/src/target/OM-2007/applications/openmoko-chordmaster/wood.png
Modified:
trunk/src/target/OM-2007/applications/openmoko-chordmaster/callbacks.c
trunk/src/target/OM-2007/applications/openmoko-chordmaster/callbacks.h
trunk/src/target/OM-2007/applications/openmoko-chordmaster/main.c
trunk/src/target/OM-2007/applications/openmoko-chordmaster/main.h
trunk/src/target/OM-2007/applications/openmoko-chordmaster/openmoko-chordmaster.pro
Log:
chordmaster: show chords on fretboard
Added: trunk/src/target/OM-2007/applications/openmoko-chordmaster/ball.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-chordmaster/ball.png
___________________________________________________________________
Name: svn:mime-type
+ image/png
Modified: trunk/src/target/OM-2007/applications/openmoko-chordmaster/callbacks.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-chordmaster/callbacks.c 2006-11-01 22:36:36 UTC (rev 174)
+++ trunk/src/target/OM-2007/applications/openmoko-chordmaster/callbacks.c 2006-11-02 13:17:39 UTC (rev 175)
@@ -1,7 +1,10 @@
#include "callbacks.h"
+#include "fretboard-widget.h"
#include <gtk/gtkwidget.h>
#include <gtk/gtkbutton.h>
+#include <gtk/gtktreeview.h>
+#include <gtk/gtktreemodel.h>
gboolean cb_filter_changed(GtkWidget* widget, gchar* text, gpointer user_data)
{
@@ -28,3 +31,19 @@
{
g_debug( "openmoko-chordmaster: button4 clicked" );
}
+
+void cb_cursor_changed(GtkTreeSelection* selection, ChordMasterData* d)
+{
+ g_debug( "openmoko-chordmaster: selection changed" );
+ GtkTreeView* view = gtk_tree_selection_get_tree_view( selection );
+ GtkTreeModel* model;
+ GtkTreeIter iter;
+ gtk_tree_selection_get_selected( selection, &model, &iter );
+
+ gchar* frets;
+ gtk_tree_model_get( model, &iter, COLUMN_FRETS, &frets, -1 );
+
+ fretboard_widget_set_frets( d->fretboard, frets );
+ gtk_widget_queue_draw( GTK_WIDGET(d->fretboard) );
+}
+
Modified: trunk/src/target/OM-2007/applications/openmoko-chordmaster/callbacks.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-chordmaster/callbacks.h 2006-11-01 22:36:36 UTC (rev 174)
+++ trunk/src/target/OM-2007/applications/openmoko-chordmaster/callbacks.h 2006-11-02 13:17:39 UTC (rev 175)
@@ -1,8 +1,11 @@
#ifndef _CALLBACKS_H_
#define _CALLBACKS_H_
+#include "main.h"
+
#include <gtk/gtkbutton.h>
#include <gtk/gtkwidget.h>
+#include <gtk/gtktreeview.h>
#include <glib.h>
@@ -11,5 +14,6 @@
void cb_button2_clicked(GtkButton *button, gpointer user_data);
void cb_button3_clicked(GtkButton *button, gpointer user_data);
void cb_button4_clicked(GtkButton *button, gpointer user_data);
+void cb_cursor_changed(GtkTreeSelection* selection, ChordMasterData* d);
#endif
Added: trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.c 2006-11-01 22:36:36 UTC (rev 174)
+++ trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.c 2006-11-02 13:17:39 UTC (rev 175)
@@ -0,0 +1,196 @@
+/* fretboard-widget.c
+ *
+ * Authored By Michael 'Mickey' Lauer <mlauer at vanille-media.de>
+ *
+ * Copyright (C) 2006 Vanille-Media
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Public License as published by
+ * the Free Software Foundation; version 2.1 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Public License for more details.
+ *
+ * Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: mickey $]
+ */
+
+#include "fretboard-widget.h"
+
+#include <pango/pango.h>
+
+G_DEFINE_TYPE (FretboardWidget, fretboard_widget, GTK_TYPE_DRAWING_AREA);
+
+#define FRETBOARD_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CHORD_TYPE_FRETBOARD, FretboardWidgetPrivate))
+
+typedef struct _FretboardWidgetPrivate
+{
+} FretboardWidgetPrivate;
+
+/* forward declarations */
+gboolean
+_expose_event_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+ g_debug( "expose event callback" );
+ GError* error = NULL;
+
+ GdkGC* gc = gdk_gc_new( widget->window );
+
+ const gchar* frets = CHORD_FRETBOARD(widget)->frets;
+ gdk_gc_set_line_attributes(gc, 2, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_MITER );
+
+ // background
+ gdk_draw_pixbuf( widget->window, gc,
+ CHORD_FRETBOARD(widget)->texture,
+ 0,
+ 0,
+ 30,
+ 0,
+ -1,
+ -1,
+ GDK_RGB_DITHER_MAX,
+ 0,
+ 0);
+
+ // frets
+ for ( int i = 0; i < 6; ++i )
+ {
+ GdkColor fretcolor1 = { 0, 0xff <<8, 0xfb <<8, 0xf7 <<8 };
+ GdkColor fretcolor2 = { 0, 0xc6 <<8, 0xb7 <<8, 0xcd <<8 };
+ GdkColor fretcolor3 = { 0, 0x90 <<8, 0x81 <<8, 0x80 <<8 };
+
+ gdk_gc_set_rgb_fg_color( gc, &fretcolor1 );
+ gdk_draw_line( widget->window, gc, 30 + i*80, 0, 30 + i*80, 256 );
+ gdk_gc_set_rgb_fg_color( gc, &fretcolor2 );
+ gdk_draw_line( widget->window, gc, 32 + i*80, 0, 32 + i*80, 256 );
+ gdk_gc_set_rgb_fg_color( gc, &fretcolor3 );
+ gdk_draw_line( widget->window, gc, 34 + i*80, 0, 34 + i*80, 256 );
+ }
+
+ if ( !frets) return TRUE;
+
+ const gchar strings[] = "EBGDAE";
+
+ PangoContext* context = gtk_widget_get_pango_context( widget );
+ PangoLayout* layout = pango_layout_new( context );
+
+ // strings
+ for ( int i = 0; i < 6; ++i )
+ {
+ GdkColor labeloffcolor = { 0, 0xee <<8, 0xee <<8, 0xee <<8 };
+ GdkColor labeloncolor = { 0, 0x44 <<8, 0x44 <<8, 0x44 <<8 };
+ GdkColor stringcolor1 = { 0, 0xff <<8, 0xfb <<8, 0xa7 <<8 };
+ GdkColor stringcolor2 = { 0, 0xe6 <<8, 0xb7 <<8, 0x2d <<8 };
+ GdkColor stringcolor3 = { 0, 0x90 <<8, 0x41 <<8, 0x00 <<8 };
+
+ if ( frets[5-i] == 'x' || frets[5-i] == 'X' )
+ {
+ gdk_gc_set_rgb_fg_color( gc, &labeloffcolor );
+ pango_layout_set_text( layout, "x", 1 );
+ gdk_gc_set_line_attributes(gc, 2, GDK_LINE_ON_OFF_DASH, GDK_CAP_ROUND, GDK_JOIN_MITER );
+ }
+ else
+ {
+ gdk_gc_set_rgb_fg_color( gc, &labeloncolor );
+ pango_layout_set_text( layout, &strings[i], 1 );
+ gdk_gc_set_line_attributes(gc, 2, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_MITER );
+ }
+ //FIXME take font size into account
+ gdk_draw_layout( widget->window, gc, 0, 20 + 40*i, layout );
+
+ gdk_gc_set_rgb_fg_color( gc, &stringcolor1 );
+ gdk_draw_line( widget->window, gc, 30, 30 + i*40, 470, 30 + i*40 );
+ gdk_gc_set_rgb_fg_color( gc, &stringcolor2 );
+ gdk_draw_line( widget->window, gc, 30, 32 + i*40, 470, 32 + i*40 );
+ gdk_gc_set_rgb_fg_color( gc, &stringcolor3 );
+ gdk_draw_line( widget->window, gc, 30, 34 + i*40, 470, 34 + i*40 );
+ }
+
+ // barree
+ gint barree = 0;
+ gint max = 0;
+ for ( int i = 0; i < 6; ++i )
+ {
+
+
+ gint position = ( frets[5-i] - 0x30 );
+
+ gint position = ( frets[5-i] - 0x30 );
+
+
+ // finger positions
+ for ( int i = 0; i < 6; ++i )
+ {
+ if ( frets[5-i] == 'x' || frets[5-i] == 'X' ) continue;
+ gint position = ( frets[5-i] - 0x30 );
+
+ g_debug( "finger position '%d' = '%d'", i, position );
+
+ if ( position )
+ gdk_draw_pixbuf( widget->window, gc, CHORD_FRETBOARD(widget)->fingerpoint,
+ 0, 0,
+ 50 + 80*(position-1), 10+40*i,
+ -1, -1,
+ GDK_RGB_DITHER_MAX, 0, 0);
+ }
+ return TRUE;
+}
+
+static void
+fretboard_widget_dispose (GObject *object)
+{
+ if (G_OBJECT_CLASS (fretboard_widget_parent_class)->dispose)
+ G_OBJECT_CLASS (fretboard_widget_parent_class)->dispose (object);
+}
+
+static void
+fretboard_widget_finalize (GObject *object)
+{
+ G_OBJECT_CLASS (fretboard_widget_parent_class)->finalize (object);
+}
+
+static void
+fretboard_widget_class_init (FretboardWidgetClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ /* register private data */
+ g_type_class_add_private (klass, sizeof (FretboardWidgetPrivate));
+
+ /* hook virtual methods */
+ /* ... */
+
+ /* install properties */
+ /* ... */
+
+ object_class->dispose = fretboard_widget_dispose;
+ object_class->finalize = fretboard_widget_finalize;
+}
+
+static void
+fretboard_widget_init (FretboardWidget *self)
+{
+ GError* error = NULL;
+ self->texture = gdk_pixbuf_new_from_file( RESOURCE_PATH "wood.png", &error );
+ self->fingerpoint = gdk_pixbuf_new_from_file( RESOURCE_PATH "ball.png", &error );
+
+ gtk_widget_set_size_request(self, 450, 270);
+ g_signal_connect (G_OBJECT(self), "expose_event",
+ G_CALLBACK(_expose_event_callback), NULL);
+
+ //FIXME find out how to make the background of the GdkDrawingArea transparent...
+ gtk_widget_set_name( GTK_WIDGET(self), "mokopanedwindow-lower-enclosing" );
+}
+
+FretboardWidget*
+fretboard_widget_new (void)
+{
+ return g_object_new (CHORD_TYPE_FRETBOARD, NULL);
+}
+
+void fretboard_widget_set_frets(FretboardWidget* self, const gchar* frets)
+{
+ //g_free( self->frets ); self->frets = g_strdup( frets );
+ self->frets = frets;
+}
Property changes on: trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.c
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.h 2006-11-01 22:36:36 UTC (rev 174)
+++ trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.h 2006-11-02 13:17:39 UTC (rev 175)
@@ -0,0 +1,55 @@
+/* fretboard-widget.h
+ *
+ * Authored By Michael 'Mickey' Lauer <mlauer at vanille-media.de>
+ *
+ * Copyright (C) 2006 Vanille-Media
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Public License as published by
+ * the Free Software Foundation; version 2.1 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Public License for more details.
+ *
+ * Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: mickey $]
+ */
+
+#ifndef _CHORD_FRETBOARD_H_
+#define _CHORD_FRETBOARD_H_
+
+#include <gtk/gtkdrawingarea.h>
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define CHORD_TYPE_FRETBOARD fretboard_widget_get_type()
+#define CHORD_FRETBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CHORD_TYPE_FRETBOARD, FretboardWidget))
+#define CHORD_FRETBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CHORD_TYPE_FRETBOARD, FretboardWidgetClass))
+#define CHORD_IS_FRETBOARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CHORD_TYPE_FRETBOARD))
+#define CHORD_IS_FRETBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CHORD_TYPE_FRETBOARD))
+#define CHORD_FRETBOARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CHORD_TYPE_FRETBOARD, FretboardWidgetClass))
+
+typedef struct {
+ GtkDrawingArea parent;
+ GdkPixbuf* texture;
+ GdkPixbuf* fingerpoint;
+ gchar* frets;
+} FretboardWidget;
+
+typedef struct {
+ GtkDrawingAreaClass parent_class;
+} FretboardWidgetClass;
+
+GType fretboard_widget_get_type (void);
+
+FretboardWidget* fretboard_widget_new (void);
+
+void fretboard_widget_set_frets(FretboardWidget* self, const gchar* frets);
+
+G_END_DECLS
+
+#endif // _CHORD_FRETBOARD_H_
+
Property changes on: trunk/src/target/OM-2007/applications/openmoko-chordmaster/fretboard-widget.h
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: trunk/src/target/OM-2007/applications/openmoko-chordmaster/main.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-chordmaster/main.c 2006-11-01 22:36:36 UTC (rev 174)
+++ trunk/src/target/OM-2007/applications/openmoko-chordmaster/main.c 2006-11-02 13:17:39 UTC (rev 175)
@@ -19,6 +19,7 @@
#include "callbacks.h"
#include "chordsdb.h"
+#include "fretboard-widget.h"
#include "main.h"
#include <mokoui/moko-application.h>
@@ -34,12 +35,6 @@
#include <gtk/gtkscrolledwindow.h>
#include <gtk/gtktreeview.h>
-enum {
- COLUMN_NAME,
- COLUMN_FRETS,
- NUM_COLS,
-};
-
int main( int argc, char** argv )
{
g_debug( "openmoko-chordmaster starting up" );
@@ -108,11 +103,12 @@
/* tool bar */
MokoToolBox* toolbox;
toolbox = MOKO_TOOL_BOX(moko_tool_box_new_with_search());
+ gtk_widget_grab_focus( GTK_WIDGET(toolbox) );
button1 = moko_tool_box_add_action_button( toolbox );
- gtk_button_set_label( button1, "Action 1" );
+ gtk_button_set_label( button1, "Add" );
button2 = moko_tool_box_add_action_button( toolbox );
- gtk_button_set_label( button2, "Action 2" );
+ gtk_button_set_label( button2, "Remove" );
button3 = moko_tool_box_add_action_button( toolbox );
gtk_button_set_label( button3, "ActMenu" );
button4 = moko_tool_box_add_action_button( toolbox );
@@ -184,57 +180,20 @@
GtkScrolledWindow* scrollwin = gtk_scrolled_window_new( NULL, NULL );
//FIXME get from style or (even better) set as initial size hint in MokoPanedWindow (also via style sheet of course)
- gtk_widget_set_size_request( GTK_WIDGET(scrollwin), 0, 170 );
+ gtk_widget_set_size_request( GTK_WIDGET(scrollwin), 0, 230 );
gtk_scrolled_window_set_policy( scrollwin, GTK_POLICY_NEVER, GTK_POLICY_ALWAYS );
+ g_object_set( G_OBJECT(view), "can-focus", FALSE, NULL );
+
gtk_scrolled_window_add_with_viewport( scrollwin, GTK_WIDGET(view) );
moko_paned_window_set_upper_pane( d->window, GTK_WIDGET(scrollwin) );
+
+ GtkTreeSelection* selection = gtk_tree_view_get_selection( view );
+ g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(cb_cursor_changed), d );
}
-gboolean
- expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data);
-
void populate_details_area( ChordMasterData* d )
{
-/* GtkImage* image = gtk_image_new_from_file( RESOURCE_PATH "fretboard.png" );
- GdkPixbuf* pixbuf = gtk_image_get_pixbuf( image );*/
-
- GtkWidget* drawing_area = gtk_drawing_area_new ();
- gtk_widget_set_size_request (drawing_area, 450, 348);
- g_signal_connect (G_OBJECT (drawing_area), "expose_event",
- G_CALLBACK (expose_event_callback), NULL);
-
-
- moko_paned_window_set_lower_pane( d->window, GTK_WIDGET(drawing_area) );
+ d->fretboard = fretboard_widget_new();
+ moko_paned_window_set_lower_pane( d->window, GTK_WIDGET(d->fretboard) );
}
-
-/* fretboard widget */
-
-gboolean
- expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data)
-{
- g_debug( "expose event callback" );
- GError* error = NULL;
-
- GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file( RESOURCE_PATH "fretboard.png", &error );
- gdk_draw_pixbuf( widget->window,
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
- pixbuf,
- 0,
- 0,
- 20,
- 0,
- -1,
- -1,
- GDK_RGB_DITHER_MAX,
- 0,
- 0);
-
- /*gdk_draw_arc (widget->window,
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
- TRUE,
- 0, 0, widget->allocation.width, widget->allocation.height,
- 0, 64 * 360);*/
- return TRUE;
-}
-
Modified: trunk/src/target/OM-2007/applications/openmoko-chordmaster/main.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-chordmaster/main.h 2006-11-01 22:36:36 UTC (rev 174)
+++ trunk/src/target/OM-2007/applications/openmoko-chordmaster/main.h 2006-11-02 13:17:39 UTC (rev 175)
@@ -17,7 +17,11 @@
* Current Version: $Rev$ ($Date$) [$Author$]
*/
+#ifndef __MAIN__H_
+#define __MAIN__H_
+
#include "chordsdb.h"
+#include "fretboard-widget.h"
#include <mokoui/moko-application.h>
#include <mokoui/moko-paned-window.h>
@@ -29,8 +33,17 @@
GtkMenu* menu;
MokoToolBox* toolbox;
ChordsDB* chordsdb;
+ FretboardWidget* fretboard;
} ChordMasterData;
+enum {
+ COLUMN_NAME,
+ COLUMN_FRETS,
+ NUM_COLS,
+};
+
void setup_ui( ChordMasterData* );
void populate_navigation_area( ChordMasterData* d );
void populate_details_area( ChordMasterData* d );
+
+#endif
Modified: trunk/src/target/OM-2007/applications/openmoko-chordmaster/openmoko-chordmaster.pro
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-chordmaster/openmoko-chordmaster.pro 2006-11-01 22:36:36 UTC (rev 174)
+++ trunk/src/target/OM-2007/applications/openmoko-chordmaster/openmoko-chordmaster.pro 2006-11-02 13:17:39 UTC (rev 175)
@@ -1,6 +1,6 @@
MOKOCONFIG = mokoui
-HEADERS = callbacks.h chordsdb.h main.h
-SOURCES = callbacks.c chordsdb.c main.c
+HEADERS = callbacks.h chordsdb.h fretboard-widget.h main.h
+SOURCES = callbacks.c chordsdb.c fretboard-widget.c main.c
include ( $(OPENMOKODIR)/devel/qmake/openmoko-include.pro )
Added: trunk/src/target/OM-2007/applications/openmoko-chordmaster/wood.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-chordmaster/wood.png
___________________________________________________________________
Name: svn:mime-type
+ image/png
More information about the commitlog
mailing list