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