r227 - in trunk/src/target/OM-2007: examples/openmoko-finger-demo openmoko-libs/libmokoui

mickey at gta01.hmw-consulting.de mickey at gta01.hmw-consulting.de
Wed Nov 15 19:33:00 CET 2006


Author: mickey
Date: 2006-11-15 18:32:59 +0000 (Wed, 15 Nov 2006)
New Revision: 227

Modified:
   trunk/src/target/OM-2007/examples/openmoko-finger-demo/demo-main.c
   trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.c
Log:
mokoui: more work on MokoFingerWheel


Modified: trunk/src/target/OM-2007/examples/openmoko-finger-demo/demo-main.c
===================================================================
--- trunk/src/target/OM-2007/examples/openmoko-finger-demo/demo-main.c	2006-11-15 14:25:09 UTC (rev 226)
+++ trunk/src/target/OM-2007/examples/openmoko-finger-demo/demo-main.c	2006-11-15 18:32:59 UTC (rev 227)
@@ -23,13 +23,12 @@
 
 #include <gtk/gtkalignment.h>
 #include <gtk/gtkbutton.h>
-#include <gtk/gtkfixed.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
 #include <gtk/gtkmain.h>
 #include <gtk/gtkmenu.h>
-#include <gtk/gtkstock.h>
-#include <gtk/gtkhbox.h>
+#include <gtk/gtktogglebutton.h>
 #include <gtk/gtkvbox.h>
-#include <gtk/gtkentry.h>
 
 void cb_orange_button_clicked( GtkButton* button, MokoFingerWindow* window )
 {
@@ -47,6 +46,24 @@
     show = !show;
 }
 
+void cb_black_button_clicked( GtkButton* button, MokoFingerWindow* window )
+{
+    g_debug( "openmoko-finger-demo: black button clicked" );
+#if 0
+    static gboolean show = TRUE;
+    static MokoFingerTools* tools = NULL;
+
+    if (!tools) tools = moko_finger_tools_new();
+
+    if ( show )
+        gtk_widget_show( GTK_WIDGET(tools) );
+    else
+        gtk_widget_hide( GTK_WIDGET(tools) );
+
+    show = !show;
+#endif
+}
+
 int main( int argc, char** argv )
 {
     g_debug( "openmoko-finger-demo starting up" );
@@ -72,9 +89,9 @@
 
     /* contents */
     GtkVBox* vbox = gtk_vbox_new( TRUE, 0 );
-    GtkEntry* label1 = gtk_label_new( "Populate this area with finger widgets\n \nThere are three types of finger buttons:" );
+    GtkLabel* label1 = gtk_label_new( "Populate this area with finger widgets\n \nThere are three types of finger buttons:" );
 
-    GtkEntry* label2 = gtk_label_new( "Orange button toggles finger scrolling wheel" );
+    GtkLabel* label2 = gtk_label_new( "Orange button toggles finger scrolling wheel\nBlack button toggles finger toolbar\nDialer Button does nothing :)" );
 
     GtkHBox* hbox = gtk_hbox_new( TRUE, 10 );
 
@@ -84,12 +101,13 @@
     gtk_box_pack_start( GTK_BOX(hbox), GTK_WIDGET(button1), TRUE, TRUE, 5 );
 
     GtkButton* button2 = gtk_button_new();
-    g_signal_connect( G_OBJECT(button2), "clicked", G_CALLBACK(cb_orange_button_clicked), window );
+    //FIXME toggle buttons look odd... needs working on styling
+    //gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button2), TRUE);
     gtk_widget_set_name( GTK_WIDGET(button2), "mokofingerbutton-dialer" );
     gtk_box_pack_start( GTK_BOX(hbox), GTK_WIDGET(button2), TRUE, TRUE, 5 );
 
     GtkButton* button3 = gtk_button_new();
-    g_signal_connect( G_OBJECT(button3), "clicked", G_CALLBACK(cb_orange_button_clicked), window );
+    g_signal_connect( G_OBJECT(button3), "clicked", G_CALLBACK(cb_black_button_clicked), window );
     gtk_widget_set_name( GTK_WIDGET(button3), "mokofingerbutton-black" );
     gtk_box_pack_start( GTK_BOX(hbox), GTK_WIDGET(button3), TRUE, TRUE, 5 );
 

Modified: trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.c
===================================================================
--- trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.c	2006-11-15 14:25:09 UTC (rev 226)
+++ trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.c	2006-11-15 18:32:59 UTC (rev 227)
@@ -34,11 +34,15 @@
 } MokoFingerWheelPrivate;
 
 /* forward declarations */
-static void moko_finger_wheel_show (GtkWidget* widget);
-static void moko_finger_wheel_hide (GtkWidget* widget);
+static void moko_finger_wheel_realize(GtkWidget* widget);
+static void moko_finger_wheel_show(GtkWidget* widget);
+static void moko_finger_wheel_hide(GtkWidget* widget);
+static gint moko_finger_wheel_button_press(GtkWidget* widget, GdkEventButton* event);
+static gint moko_finger_wheel_motion_notify(GtkWidget* widget, GdkEventMotion* event);
+static gint moko_finger_wheel_button_release(GtkWidget* widget, GdkEventButton* event);
 
 static void
-moko_finger_wheel_dispose (GObject *object)
+moko_finger_wheel_dispose(GObject *object)
 {
     if (G_OBJECT_CLASS (moko_finger_wheel_parent_class)->dispose)
         G_OBJECT_CLASS (moko_finger_wheel_parent_class)->dispose (object);
@@ -51,7 +55,7 @@
 }
 
 static void
-moko_finger_wheel_class_init (MokoFingerWheelClass *klass)
+moko_finger_wheel_class_init(MokoFingerWheelClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS (klass);
     parent_class = g_type_class_peek_parent(klass);
@@ -61,10 +65,12 @@
 
     /* hook virtual methods */
     GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
+    widget_class->realize = moko_finger_wheel_realize;
     widget_class->show = moko_finger_wheel_show;
     widget_class->hide = moko_finger_wheel_hide;
-    //widget_class->show_all = moko_finger_wheel_show;
-    //widget_class->hide_all = moko_finger_wheel_hide;
+    widget_class->button_press_event = moko_finger_wheel_button_press;
+    widget_class->motion_notify_event = moko_finger_wheel_motion_notify;
+    widget_class->button_release_event = moko_finger_wheel_button_release;
 
     /* install properties */
     /* ... */
@@ -74,19 +80,47 @@
 }
 
 static void
-moko_finger_wheel_init (MokoFingerWheel *self)
+moko_finger_wheel_init(MokoFingerWheel *self)
 {
     gtk_widget_set_name( GTK_WIDGET(self), "mokofingerwheel" );
 }
 
 GtkWidget*
-moko_finger_wheel_new (void)
+moko_finger_wheel_new(void)
 {
     return GTK_WIDGET(g_object_new(moko_finger_wheel_get_type(), NULL));
 }
 
-static void moko_finger_wheel_show (GtkWidget* widget)
+static void
+moko_finger_wheel_realize(GtkWidget *widget)
 {
+    GdkWindowAttr attributes;
+    gint attributes_mask;
+
+    GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+
+    attributes.window_type = GDK_WINDOW_CHILD;
+    attributes.x = widget->allocation.x;
+    attributes.y = widget->allocation.y;
+    attributes.width = widget->allocation.width;
+    attributes.height = widget->allocation.height;
+    attributes.wclass = GDK_INPUT_OUTPUT;
+    attributes.visual = gtk_widget_get_visual (widget);
+    attributes.colormap = gtk_widget_get_colormap (widget);
+    attributes.event_mask = gtk_widget_get_events (widget);
+    attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK;
+
+    attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+
+    widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask);
+    gdk_window_set_user_data (widget->window, widget);
+
+    widget->style = gtk_style_attach (widget->style, widget->window);
+    gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
+}
+
+static void moko_finger_wheel_show(GtkWidget* widget)
+{
     gtk_widget_ensure_style( widget ); //FIXME needed here?
     g_debug( "moko_finger_wheel_show" );
     GTK_WIDGET_CLASS(parent_class)->show(widget);
@@ -94,7 +128,8 @@
     if ( !priv->popup )
     {
         priv->popup = gtk_window_new(GTK_WINDOW_POPUP);
-        gtk_widget_set_name( GTK_WIDGET(priv->popup), "transparent" );
+        //FIXME Setting it to transparent is probably not necessary since we issue a mask anyway, right?
+        //gtk_widget_set_name( GTK_WIDGET(priv->popup), "transparent" );
         gtk_container_add( GTK_CONTAINER(priv->popup), widget );
         MokoWindow* window = moko_application_get_main_window( moko_application_get_instance() );
         GtkRequisition req;
@@ -123,7 +158,7 @@
     gtk_widget_show( priv->popup );
 }
 
-static void moko_finger_wheel_hide (GtkWidget* widget)
+static void moko_finger_wheel_hide(GtkWidget* widget)
 {
     g_debug( "moko_finger_wheel_hide" );
     GTK_WIDGET_CLASS(parent_class)->hide(widget);
@@ -131,3 +166,42 @@
     gtk_widget_hide( priv->popup );
 }
 
+static gint moko_finger_wheel_button_press(GtkWidget* widget, GdkEventButton* event)
+{
+    g_debug( "moko_finger_wheel_button_press" );
+
+    gtk_grab_add( widget );
+    gtk_widget_set_state( widget, GTK_STATE_ACTIVE );
+    gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
+    return TRUE;
+}
+
+//FIXME Right now this is hardcoded to relative mode. Implement absolute mode as well
+static gint moko_finger_wheel_motion_notify(GtkWidget* widget, GdkEventMotion* event)
+{
+    int x, y;
+    GdkModifierType state;
+
+    if (event->is_hint)
+        gdk_window_get_pointer (event->window, &x, &y, &state);
+    else
+    {
+        x = event->x;
+        y = event->y;
+        state = event->state;
+    }
+
+    if (state & GDK_BUTTON1_MASK)
+        g_debug( "FIXME: emit scroll values here..." );
+
+    return TRUE;
+}
+
+static gint moko_finger_wheel_button_release(GtkWidget* widget, GdkEventButton* event)
+{
+    g_debug( "moko_finger_wheel_button_release" );
+    gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
+    gtk_widget_set_state( widget, GTK_STATE_NORMAL );
+    gtk_grab_remove( widget );
+    return TRUE;
+}





More information about the commitlog mailing list