r3922 - in trunk/src/target/OM-2007.2/libraries/libmokoui2: . libmokoui
chris at sita.openmoko.org
chris at sita.openmoko.org
Tue Jan 22 17:30:54 CET 2008
Author: chris
Date: 2008-01-22 17:30:52 +0100 (Tue, 22 Jan 2008)
New Revision: 3922
Modified:
trunk/src/target/OM-2007.2/libraries/libmokoui2/ChangeLog
trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-finger-scroll.c
trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-finger-scroll.h
trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-type.h
Log:
Patch by: Frank Li <frank.li at intel.com>
* libmokoui/moko-finger-scroll.c: (moko_get_time_delta),
(moko_finger_scroll_button_press_cb), (moko_finger_scroll_refresh),
(moko_finger_scroll_timeout),
(moko_finger_scroll_motion_notify_cb),
(moko_finger_scroll_button_release_cb), (parent_set_cb),
(moko_finger_scroll_get_property),
(moko_finger_scroll_set_property), (moko_finger_scroll_class_init),
(moko_finger_scroll_mode_get_type),
(moko_finger_scroll_indicator_mode_get_type):
* libmokoui/moko-finger-scroll.h:
* libmokoui/moko-type.h:
Add indicator display modes and new 'auto' scrolling mode
Modified: trunk/src/target/OM-2007.2/libraries/libmokoui2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokoui2/ChangeLog 2008-01-22 16:28:04 UTC (rev 3921)
+++ trunk/src/target/OM-2007.2/libraries/libmokoui2/ChangeLog 2008-01-22 16:30:52 UTC (rev 3922)
@@ -1,5 +1,22 @@
2008-01-22 Chris Lord <chris at openedhand.com>
+ Patch by: Frank Li <frank.li at intel.com>
+
+ * libmokoui/moko-finger-scroll.c: (moko_get_time_delta),
+ (moko_finger_scroll_button_press_cb), (moko_finger_scroll_refresh),
+ (moko_finger_scroll_timeout),
+ (moko_finger_scroll_motion_notify_cb),
+ (moko_finger_scroll_button_release_cb), (parent_set_cb),
+ (moko_finger_scroll_get_property),
+ (moko_finger_scroll_set_property), (moko_finger_scroll_class_init),
+ (moko_finger_scroll_mode_get_type),
+ (moko_finger_scroll_indicator_mode_get_type):
+ * libmokoui/moko-finger-scroll.h:
+ * libmokoui/moko-type.h:
+ Add indicator display modes and new 'auto' scrolling mode
+
+2008-01-22 Chris Lord <chris at openedhand.com>
+
* configure.ac:
python bindings disabled by default
Modified: trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-finger-scroll.c
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-finger-scroll.c 2008-01-22 16:28:04 UTC (rev 3921)
+++ trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-finger-scroll.c 2008-01-22 16:30:52 UTC (rev 3922)
@@ -56,6 +56,7 @@
guint32 last_time; /* infinite loops */
gboolean moved;
GTimeVal click_start;
+ GTimeVal last_click;
gdouble vmin;
gdouble vmax;
gdouble decel;
@@ -78,6 +79,15 @@
GtkAdjustment *hadjust;
GtkAdjustment *vadjust;
+
+ gdouble click_x;
+ gdouble click_y;
+
+ guint event_mode;
+
+ MokoFingerScrollIndicatorMode vindicator_mode;
+ MokoFingerScrollIndicatorMode hindicator_mode;
+
};
enum {
@@ -87,8 +97,28 @@
PROP_VELOCITY_MAX,
PROP_DECELERATION,
PROP_SPS,
+ PROP_VINDICATOR,
+ PROP_HINDICATOR,
+
};
+static gdouble
+moko_get_time_delta (GTimeVal *start, GTimeVal *end)
+{
+ gdouble x, y;
+
+ x = start->tv_sec;
+ x *= 1000000;
+ x += start->tv_usec;
+
+ y = end->tv_sec;
+ y *= 1000000;
+ y += end->tv_usec;
+
+ return y-x;
+
+}
+
/* Following function inherited from libhildondesktop */
static GList *
get_ordered_children (GdkWindow *window)
@@ -205,6 +235,9 @@
((event->time == priv->last_time) &&
(event->type == priv->last_type))) return TRUE;
+ priv->click_x = event->x;
+ priv->click_y = event->y;
+
if (priv->clicked && priv->child) {
/* Widget stole focus on last click, send crossing-out event */
synth_crossing (priv->child, 0, 0, event->x_root, event->y_root,
@@ -257,6 +290,7 @@
} else
priv->child = NULL;
+
return TRUE;
}
@@ -291,11 +325,31 @@
/* Calculate if we need scroll indicators */
gtk_widget_size_request (widget, NULL);
- hscroll = (priv->hadjust->upper - priv->hadjust->lower >
- priv->hadjust->page_size) ? TRUE : FALSE;
- vscroll = (priv->vadjust->upper - priv->vadjust->lower >
- priv->vadjust->page_size) ? TRUE : FALSE;
+ switch (priv->hindicator_mode) {
+ case MOKO_FINGER_SCROLL_INDICATOR_MODE_SHOW :
+ hscroll = TRUE;
+ break;
+ case MOKO_FINGER_SCROLL_INDICATOR_MODE_HIDE :
+ hscroll = FALSE;
+ break;
+ default :
+ hscroll = (priv->hadjust->upper - priv->hadjust->lower >
+ priv->hadjust->page_size) ? TRUE : FALSE;
+ }
+
+ switch (priv->vindicator_mode) {
+ case MOKO_FINGER_SCROLL_INDICATOR_MODE_SHOW :
+ vscroll = TRUE;
+ break;
+ case MOKO_FINGER_SCROLL_INDICATOR_MODE_HIDE :
+ vscroll = FALSE;
+ break;
+ default :
+ vscroll = (priv->vadjust->upper - priv->vadjust->lower >
+ priv->vadjust->page_size) ? TRUE : FALSE;
+ }
+
/* TODO: Read ltr settings to decide which corner gets scroll
* indicators?
*/
@@ -379,7 +433,7 @@
MokoFingerScrollPrivate *priv = FINGER_SCROLL_PRIVATE (scroll);
if ((!priv->enabled) ||
- (priv->mode != MOKO_FINGER_SCROLL_MODE_ACCEL)) {
+ (priv->mode == MOKO_FINGER_SCROLL_MODE_PUSH)) {
priv->idle_id = 0;
return FALSE;
}
@@ -391,6 +445,8 @@
priv->idle_id = 0;
return FALSE;
}
+ } else if (priv->mode == MOKO_FINGER_SCROLL_MODE_AUTO) {
+ return TRUE;
}
moko_finger_scroll_scroll (scroll, priv->vel_x, priv->vel_y, &sx, &sy);
@@ -432,7 +488,7 @@
if ((!priv->moved) && (
(ABS (x) > dnd_threshold) || (ABS (y) > dnd_threshold))) {
priv->moved = TRUE;
- if (priv->mode == MOKO_FINGER_SCROLL_MODE_ACCEL) {
+ if (priv->mode != MOKO_FINGER_SCROLL_MODE_PUSH) {
priv->idle_id = g_timeout_add (
(gint)(1000.0/(gdouble)priv->sps),
(GSourceFunc)moko_finger_scroll_timeout,
@@ -465,6 +521,13 @@
allocation.height) *
(priv->vmax-priv->vmin)) + priv->vmin);
break;
+ case MOKO_FINGER_SCROLL_MODE_AUTO:
+ moko_finger_scroll_scroll (scroll, x, y, NULL, NULL);
+ priv->x = event->x;
+ priv->y = event->y;
+
+ break;
+
default :
break;
}
@@ -496,6 +559,7 @@
GTimeVal current;
gint x, y;
GdkWindow *child;
+ gdouble delta, speed_x, speed_y;
if ((!priv->clicked) || (!priv->enabled) || (event->button != 1) ||
((event->time == priv->last_time) &&
@@ -503,11 +567,33 @@
return TRUE;
priv->last_type = event->type;
+
priv->last_time = event->time;
g_get_current_time (¤t);
priv->clicked = FALSE;
-
+
+ if (priv->mode == MOKO_FINGER_SCROLL_MODE_AUTO) {
+ delta = moko_get_time_delta (&priv->click_start, ¤t);
+ speed_x = event->x - priv->click_x;
+ speed_y = event->y - priv->click_y;
+
+ speed_x = speed_x * 1000000 / delta;
+ speed_y = speed_y * 1000000 / delta;
+
+ priv->vel_x = speed_x * (gdouble)priv->sps / 1000;
+ priv->vel_y = speed_y * (gdouble)priv->sps / 1000;
+
+ /*if( ABS(priv->vel_x )<20)
+ {
+ priv->vel_x = 0;
+ }
+ if(ABS(priv->vel_y )<20)
+ {
+ priv->vel_y = 0;
+ }*/
+ }
+
child = moko_finger_scroll_get_topmost (
GTK_BIN (priv->align)->child->window,
event->x, event->y, &x, &y);
@@ -634,8 +720,6 @@
static void
parent_set_cb (GtkWidget *widget, GtkObject *parent, MokoFingerScroll *scroll)
{
- MokoFingerScrollPrivate *priv = FINGER_SCROLL_PRIVATE (scroll);
-
if (!parent) {
g_signal_handlers_disconnect_by_func (widget,
moko_finger_scroll_refresh, scroll);
@@ -678,7 +762,7 @@
g_value_set_boolean (value, priv->enabled);
break;
case PROP_MODE :
- g_value_set_int (value, priv->mode);
+ g_value_set_enum (value, priv->mode);
break;
case PROP_VELOCITY_MIN :
g_value_set_double (value, priv->vmin);
@@ -692,6 +776,13 @@
case PROP_SPS :
g_value_set_uint (value, priv->sps);
break;
+ case PROP_VINDICATOR:
+ g_value_set_enum (value, priv->vindicator_mode);
+ break;
+ case PROP_HINDICATOR:
+ g_value_set_enum (value, priv->hindicator_mode);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
@@ -710,7 +801,7 @@
GTK_EVENT_BOX (object), priv->enabled);
break;
case PROP_MODE :
- priv->mode = g_value_get_int (value);
+ priv->mode = g_value_get_enum (value);
break;
case PROP_VELOCITY_MIN :
priv->vmin = g_value_get_double (value);
@@ -724,6 +815,13 @@
case PROP_SPS :
priv->sps = g_value_get_uint (value);
break;
+ case PROP_VINDICATOR:
+ priv->vindicator_mode = g_value_get_enum (value);
+ break;
+ case PROP_HINDICATOR:
+ priv->hindicator_mode = g_value_get_enum (value);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
@@ -810,14 +908,35 @@
g_object_class_install_property (
object_class,
+ PROP_VINDICATOR,
+ g_param_spec_enum (
+ "vindicator_mode",
+ "vindicator mode",
+ "Mode of the vertical scrolling indicator",
+ MOKO_TYPE_FINGER_SCROLL_INDICATOR_MODE,
+ MOKO_FINGER_SCROLL_INDICATOR_MODE_AUTO,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_HINDICATOR,
+ g_param_spec_enum (
+ "hindicator_mode",
+ "hindicator mode",
+ "Mode of the horizontal scrolling indicator",
+ MOKO_TYPE_FINGER_SCROLL_INDICATOR_MODE,
+ MOKO_FINGER_SCROLL_INDICATOR_MODE_AUTO,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (
+ object_class,
PROP_MODE,
- g_param_spec_int (
+ g_param_spec_enum (
"mode",
"Scroll mode",
"Change the finger-scrolling mode.",
- MOKO_FINGER_SCROLL_MODE_PUSH,
+ MOKO_TYPE_FINGER_SCROLL_MODE,
MOKO_FINGER_SCROLL_MODE_ACCEL,
- MOKO_FINGER_SCROLL_MODE_ACCEL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (
@@ -986,23 +1105,49 @@
}
GType
-moko_finger_scroll_mode_get_type(void)
+moko_finger_scroll_mode_get_type (void)
{
static GType etype = 0;
if (etype == 0) {
- static const GFlagsValue values[] = {
+ static const GEnumValue values[] = {
{ MOKO_FINGER_SCROLL_MODE_PUSH,
"MOKO_FINGER_SCROLL_MODE_PUSH", "" },
{ MOKO_FINGER_SCROLL_MODE_ACCEL,
"MOKO_FINGER_SCROLL_MODE_ACCEL", "" },
- {0, NULL, NULL}
+ { MOKO_FINGER_SCROLL_MODE_AUTO,
+ "MOKO_FINGER_SCROLL_MODE_AUTO", "" },
+ { 0, NULL, NULL }
};
- etype = g_flags_register_static (
+ etype = g_enum_register_static (
g_intern_static_string ("MokoFingerScrollMode"),
values);
}
return etype;
}
+
+GType
+moko_finger_scroll_indicator_mode_get_type (void)
+{
+ static GType etype = 0;
+
+ if (etype == 0) {
+ static const GEnumValue values[] = {
+ { MOKO_FINGER_SCROLL_INDICATOR_MODE_AUTO,
+ "MOKO_FINGER_SCROLL_INDICATOR_MODE_AUTO", "" },
+ { MOKO_FINGER_SCROLL_INDICATOR_MODE_SHOW,
+ "MOKO_FINGER_SCROLL_INDICATOR_MODE_SHOW", "" },
+ { MOKO_FINGER_SCROLL_INDICATOR_MODE_HIDE,
+ "MOKO_FINGER_SCROLL_INDICATOR_MODE_HIDE", "" },
+ { 0, NULL, NULL }
+ };
+
+ etype = g_enum_register_static (g_intern_static_string (
+ "MokoFingerScrollIndicatorMode"), values);
+ }
+
+ return etype;
+}
+
Modified: trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-finger-scroll.h
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-finger-scroll.h 2008-01-22 16:28:04 UTC (rev 3921)
+++ trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-finger-scroll.h 2008-01-22 16:30:52 UTC (rev 3922)
@@ -22,15 +22,21 @@
#include <glib-object.h>
#include <gtk/gtk.h>
+#include "moko-type.h"
G_BEGIN_DECLS
#define MOKO_TYPE_FINGER_SCROLL moko_finger_scroll_get_type()
-#define MOKO_FINGER_SCROLL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOKO_TYPE_FINGER_SCROLL, MokoFingerScroll))
-#define MOKO_FINGER_SCROLL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOKO_TYPE_FINGER_SCROLL, MokoFingerScrollClass))
-#define MOKO_IS_FINGER_SCROLL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MOKO_TYPE_FINGER_SCROLL))
-#define MOKO_IS_FINGER_SCROLL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOKO_TYPE_FINGER_SCROLL))
-#define MOKO_FINGER_SCROLL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOKO_TYPE_FINGER_SCROLL, MokoFingerScrollClass))
+#define MOKO_FINGER_SCROLL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ MOKO_TYPE_FINGER_SCROLL, MokoFingerScroll))
+#define MOKO_FINGER_SCROLL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ MOKO_TYPE_FINGER_SCROLL, MokoFingerScrollClass))
+#define MOKO_IS_FINGER_SCROLL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ MOKO_TYPE_FINGER_SCROLL))
+#define MOKO_IS_FINGER_SCROLL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ MOKO_TYPE_FINGER_SCROLL))
+#define MOKO_FINGER_SCROLL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ MOKO_TYPE_FINGER_SCROLL, MokoFingerScrollClass))
/**
* MokoFingerScroll:
@@ -52,14 +58,23 @@
* MokoFingerScrollMode:
* @MOKO_FINGER_SCROLL_MODE_PUSH: Scrolling follows pointer
* @MOKO_FINGER_SCROLL_MODE_ACCEL: Scrolling uses physics to "spin" the widget
+ * @MOKO_FINGER_SCROLL_MODE_AUTO: Automatically chooses between push and accel
+ * modes, depending on input.
*
* Used to change the behaviour of the finger scrolling
*/
typedef enum {
MOKO_FINGER_SCROLL_MODE_PUSH,
MOKO_FINGER_SCROLL_MODE_ACCEL,
+ MOKO_FINGER_SCROLL_MODE_AUTO
} MokoFingerScrollMode;
+typedef enum {
+ MOKO_FINGER_SCROLL_INDICATOR_MODE_AUTO,
+ MOKO_FINGER_SCROLL_INDICATOR_MODE_SHOW,
+ MOKO_FINGER_SCROLL_INDICATOR_MODE_HIDE
+} MokoFingerScrollIndicatorMode;
+
GType moko_finger_scroll_get_type (void);
GtkWidget* moko_finger_scroll_new (void);
Modified: trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-type.h
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-type.h 2008-01-22 16:28:04 UTC (rev 3921)
+++ trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-type.h 2008-01-22 16:30:52 UTC (rev 3922)
@@ -32,3 +32,4 @@
G_END_DECLS
#endif
+
More information about the commitlog
mailing list