[libchamplain] Make kinetic mode boolean property and add it to mx as well



commit 6fbb5eaed79b608ba1cc2bfd86789e8e0834893b
Author: JiÅ?í Techet <techet gmail com>
Date:   Thu Feb 3 23:11:06 2011 +0100

    Make kinetic mode boolean property and add it to mx as well

 champlain/champlain-view.c  |   67 ++++++++++++++++++++-----------------------
 champlain/champlain-view.h  |   19 ++----------
 demos/animated-marker.c     |    2 +-
 demos/launcher-gtk.c        |    2 +-
 demos/launcher.c            |    2 +-
 demos/local-rendering.c     |    2 +-
 demos/polygons.c            |    2 +-
 demos/url-marker.c          |    2 +-
 mx/mx-kinetic-scroll-view.c |   40 ++++++++++++++++++++++++-
 mx/mx-kinetic-scroll-view.h |    5 +++
 10 files changed, 83 insertions(+), 60 deletions(-)
---
diff --git a/champlain/champlain-view.c b/champlain/champlain-view.c
index e171f76..d0cb14f 100644
--- a/champlain/champlain-view.c
+++ b/champlain/champlain-view.c
@@ -96,7 +96,7 @@ enum
   PROP_MAX_ZOOM_LEVEL,
   PROP_MAP_SOURCE,
   PROP_DECEL_RATE,
-  PROP_SCROLL_MODE,
+  PROP_KINETIC_MODE,
   PROP_KEEP_CENTER_ON_RESIZE,
   PROP_ZOOM_ON_DOUBLE_CLICK,
   PROP_STATE,
@@ -138,7 +138,7 @@ struct _ChamplainViewPrivate
 
   ChamplainMapSourceFactory *factory; /* The map source factory */
   ChamplainMapSource *map_source; /* Current map tile source */
-  ChamplainScrollMode scroll_mode;
+  gboolean kinetic_mode;
   guint zoom_level; /* Holds the current zoom level number */
   guint min_zoom_level; /* Lowest allowed zoom level */
   guint max_zoom_level; /* Highest allowed zoom level */
@@ -397,8 +397,8 @@ champlain_view_get_property (GObject *object,
       g_value_set_object (value, priv->map_source);
       break;
 
-    case PROP_SCROLL_MODE:
-      g_value_set_enum (value, priv->scroll_mode);
+    case PROP_KINETIC_MODE:
+      g_value_set_boolean (value, priv->kinetic_mode);
       break;
 
     case PROP_DECEL_RATE:
@@ -466,8 +466,8 @@ champlain_view_set_property (GObject *object,
       champlain_view_set_map_source (view, g_value_get_object (value));
       break;
 
-    case PROP_SCROLL_MODE:
-      champlain_view_set_scroll_mode (view, g_value_get_enum (value));
+    case PROP_KINETIC_MODE:
+      champlain_view_set_kinetic_mode (view, g_value_get_boolean (value));
       break;
 
     case PROP_DECEL_RATE:
@@ -529,7 +529,6 @@ champlain_view_dispose (GObject *object)
 
   if (priv->viewport != NULL)
     {
-//      mx_viewport_stop (MX_VIEWPORT (priv->viewport));
       g_object_unref (priv->viewport);
       priv->viewport = NULL;
     }
@@ -792,20 +791,18 @@ champlain_view_class_init (ChamplainViewClass *champlainViewClass)
           CHAMPLAIN_PARAM_READWRITE));
 
   /**
-   * ChamplainView:scroll-mode:
+   * ChamplainView:kinetic-mode:
    *
-   * Determines the way the view reacts to scroll events.
+   * Determines whether the view should use kinetic mode.
    *
-   * Since: 0.4
+   * Since: 0.10
    */
   g_object_class_install_property (object_class,
-      PROP_SCROLL_MODE,
-      g_param_spec_enum ("scroll-mode",
-          "Scroll Mode",
-          "Determines the way the view reacts to scroll events.",
-          CHAMPLAIN_TYPE_SCROLL_MODE,
-          CHAMPLAIN_SCROLL_MODE_KINETIC,
-          CHAMPLAIN_PARAM_READWRITE));
+      PROP_KINETIC_MODE,
+      g_param_spec_boolean ("kinetic-mode",
+          "Kinetic Mode",
+          "Determines whether the view should use kinetic mode.",
+          FALSE, CHAMPLAIN_PARAM_READWRITE));
 
   /**
    * ChamplainView:decel-rate:
@@ -914,7 +911,7 @@ champlain_view_init (ChamplainView *view)
   priv->zoom_on_double_click = TRUE;
   priv->license_actor = NULL;
   priv->stage = NULL;
-  priv->scroll_mode = CHAMPLAIN_SCROLL_MODE_PUSH;
+  priv->kinetic_mode = FALSE;
   priv->viewport_x = 0;
   priv->viewport_y = 0;
   priv->viewport_width = 0;
@@ -1078,9 +1075,9 @@ scroll_to (ChamplainView *view,
   lat = champlain_map_source_get_latitude (priv->map_source, priv->zoom_level, y);
   lon = champlain_map_source_get_longitude (priv->map_source, priv->zoom_level, x);
 
-  if (priv->scroll_mode == CHAMPLAIN_SCROLL_MODE_KINETIC)
+  if (priv->kinetic_mode)
     champlain_view_go_to_with_duration (view, lat, lon, 300);
-  else if (priv->scroll_mode == CHAMPLAIN_SCROLL_MODE_PUSH)
+  else 
     champlain_view_center_on (view, lat, lon);
 }
 
@@ -2045,17 +2042,17 @@ champlain_view_set_decel_rate (ChamplainView *view,
 
 
 /**
- * champlain_view_set_scroll_mode:
+ * champlain_view_set_kinetic_mode:
  * @view: a #ChamplainView
- * @mode: a #ChamplainScrollMode value
+ * @kinetic: TRUE for kinetic mode, FALSE for push mode
  *
  * Determines the way the view reacts to scroll events.
  *
- * Since: 0.4
+ * Since: 0.10
  */
 void
-champlain_view_set_scroll_mode (ChamplainView *view,
-    ChamplainScrollMode mode)
+champlain_view_set_kinetic_mode (ChamplainView *view,
+    gboolean kinetic)
 {
   DEBUG_LOG ()
 
@@ -2063,10 +2060,8 @@ champlain_view_set_scroll_mode (ChamplainView *view,
 
   ChamplainViewPrivate *priv = view->priv;
 
-  priv->scroll_mode = mode;
-
-//  g_object_set (G_OBJECT (priv->finger_scroll), "mode",
-//      priv->scroll_mode, NULL);
+  priv->kinetic_mode = kinetic;
+  mx_kinetic_scroll_view_set_kinetic_mode (MX_KINETIC_SCROLL_VIEW (priv->finger_scroll), kinetic);
 }
 
 
@@ -2330,23 +2325,23 @@ champlain_view_get_decel_rate (ChamplainView *view)
 
 
 /**
- * champlain_view_get_scroll_mode:
+ * champlain_view_get_kinetic_mode:
  * @view: The view
  *
  * Gets the view's scroll mode behaviour.
  *
- * Returns: the view's scroll mode behaviour.
+ * Returns: TRUE for kinetic mode, FALSE for push mode.
  *
- * Since: 0.4
+ * Since: 0.10
  */
-ChamplainScrollMode
-champlain_view_get_scroll_mode (ChamplainView *view)
+gboolean
+champlain_view_get_kinetic_mode (ChamplainView *view)
 {
   DEBUG_LOG ()
 
-  g_return_val_if_fail (CHAMPLAIN_IS_VIEW (view), CHAMPLAIN_SCROLL_MODE_PUSH);
+  g_return_val_if_fail (CHAMPLAIN_IS_VIEW (view), FALSE);
 
-  return view->priv->scroll_mode;
+  return view->priv->kinetic_mode;
 }
 
 
diff --git a/champlain/champlain-view.h b/champlain/champlain-view.h
index 9de0e12..258e611 100644
--- a/champlain/champlain-view.h
+++ b/champlain/champlain-view.h
@@ -55,19 +55,6 @@ G_BEGIN_DECLS
 
 typedef struct _ChamplainViewPrivate ChamplainViewPrivate;
 
-/**
- * ChamplainScrollMode:
- * @CHAMPLAIN_SCROLL_MODE_PUSH: Non-kinetic scrolling
- * @CHAMPLAIN_SCROLL_MODE_KINETIC: Kinetic scrolling
- *
- * Type of scrolling.
- */
-typedef enum
-{
-  CHAMPLAIN_SCROLL_MODE_PUSH,
-  CHAMPLAIN_SCROLL_MODE_KINETIC
-} ChamplainScrollMode;
-
 
 struct _ChamplainView
 {
@@ -110,8 +97,8 @@ void champlain_view_set_map_source (ChamplainView *view,
     ChamplainMapSource *map_source);
 void champlain_view_set_decel_rate (ChamplainView *view,
     gdouble rate);
-void champlain_view_set_scroll_mode (ChamplainView *view,
-    ChamplainScrollMode mode);
+void champlain_view_set_kinetic_mode (ChamplainView *view,
+    gboolean kinetic);
 void champlain_view_set_keep_center_on_resize (ChamplainView *view,
     gboolean value);
 void champlain_view_set_zoom_on_double_click (ChamplainView *view,
@@ -127,7 +114,7 @@ guint champlain_view_get_min_zoom_level (ChamplainView *view);
 guint champlain_view_get_max_zoom_level (ChamplainView *view);
 ChamplainMapSource *champlain_view_get_map_source (ChamplainView *view);
 gdouble champlain_view_get_decel_rate (ChamplainView *view);
-ChamplainScrollMode champlain_view_get_scroll_mode (ChamplainView *view);
+gboolean champlain_view_get_kinetic_mode (ChamplainView *view);
 gboolean champlain_view_get_keep_center_on_resize (ChamplainView *view);
 const gchar *champlain_view_get_license_text (ChamplainView *view);
 gboolean champlain_view_get_zoom_on_double_click (ChamplainView *view);
diff --git a/demos/animated-marker.c b/demos/animated-marker.c
index b79a47c..69ada0b 100644
--- a/demos/animated-marker.c
+++ b/demos/animated-marker.c
@@ -145,7 +145,7 @@ main (int argc, char *argv[])
 
   /* Finish initialising the map view */
   g_object_set (G_OBJECT (actor), "zoom-level", 12,
-      "scroll-mode", CHAMPLAIN_SCROLL_MODE_KINETIC, NULL);
+      "kinetic-mode", TRUE, NULL);
   champlain_view_center_on (CHAMPLAIN_VIEW (actor), lat, lon);
 
   /* Create callback that updates the map periodically */
diff --git a/demos/launcher-gtk.c b/demos/launcher-gtk.c
index 6149d4d..a791859 100644
--- a/demos/launcher-gtk.c
+++ b/demos/launcher-gtk.c
@@ -253,7 +253,7 @@ main (int argc,
 
 
   g_object_set (G_OBJECT (view),
-      "scroll-mode", CHAMPLAIN_SCROLL_MODE_KINETIC,
+      "kinetic-mode", TRUE,
       "zoom-level", 5,
       NULL);
       
diff --git a/demos/launcher.c b/demos/launcher.c
index 2f31734..ef52b2f 100644
--- a/demos/launcher.c
+++ b/demos/launcher.c
@@ -141,7 +141,7 @@ main (int argc,
 
   /* Finish initialising the map view */
   g_object_set (G_OBJECT (actor), "zoom-level", 12,
-      "scroll-mode", CHAMPLAIN_SCROLL_MODE_KINETIC, NULL);
+      "kinetic-mode", TRUE, NULL);
   champlain_view_center_on (CHAMPLAIN_VIEW (actor), 45.466, -73.75);
 
   clutter_actor_show (stage);
diff --git a/demos/local-rendering.c b/demos/local-rendering.c
index 7e8e00f..9cc1808 100644
--- a/demos/local-rendering.c
+++ b/demos/local-rendering.c
@@ -761,7 +761,7 @@ main (int argc,
   widget = gtk_champlain_embed_new ();
   champlain_view = gtk_champlain_embed_get_view (GTK_CHAMPLAIN_EMBED (widget));
 
-  g_object_set (G_OBJECT (champlain_view), "scroll-mode", CHAMPLAIN_SCROLL_MODE_KINETIC,
+  g_object_set (G_OBJECT (champlain_view), "kinetic-mode", TRUE,
       "zoom-level", 9, NULL);
 
   gtk_widget_set_size_request (widget, 640, 480);
diff --git a/demos/polygons.c b/demos/polygons.c
index 11c1ce1..662ecef 100644
--- a/demos/polygons.c
+++ b/demos/polygons.c
@@ -153,7 +153,7 @@ main (int argc,
 
   /* Finish initialising the map view */
   g_object_set (G_OBJECT (actor), "zoom-level", 8,
-      "scroll-mode", CHAMPLAIN_SCROLL_MODE_KINETIC, NULL);
+      "kinetic-mode", TRUE, NULL);
   champlain_view_center_on (CHAMPLAIN_VIEW (actor), 45.466, -73.75);
 
   clutter_actor_show (stage);
diff --git a/demos/url-marker.c b/demos/url-marker.c
index 1cf6bc4..bf7fafa 100644
--- a/demos/url-marker.c
+++ b/demos/url-marker.c
@@ -268,7 +268,7 @@ main (int argc, char *argv[])
 
   /* Finish initialising the map view */
   g_object_set (G_OBJECT (view), "zoom-level", 10,
-      "scroll-mode", CHAMPLAIN_SCROLL_MODE_KINETIC, NULL);
+      "kinetic-mode", TRUE, NULL);
   champlain_view_center_on (CHAMPLAIN_VIEW (view), 48.22, 16.8);
 
   clutter_actor_show_all (stage);
diff --git a/mx/mx-kinetic-scroll-view.c b/mx/mx-kinetic-scroll-view.c
index 8fb1910..50cc3cd 100644
--- a/mx/mx-kinetic-scroll-view.c
+++ b/mx/mx-kinetic-scroll-view.c
@@ -81,6 +81,7 @@ struct _MxKineticScrollViewPrivate
   gdouble                decel_rate;
   gdouble                overshoot;
   gdouble                accumulated_delta;
+  gboolean               kinetic_mode;
 };
 
 enum {
@@ -92,7 +93,8 @@ enum {
   PROP_VADJUST,
   PROP_BUTTON,
   PROP_USE_CAPTURED,
-  PROP_OVERSHOOT
+  PROP_OVERSHOOT,
+  PROP_KINETIC_MODE,
 };
 
 enum
@@ -194,6 +196,10 @@ mx_kinetic_scroll_view_get_property (GObject    *object,
     case PROP_OVERSHOOT:
       g_value_set_double (value, priv->overshoot);
       break;
+      
+    case PROP_KINETIC_MODE:
+      g_value_set_boolean (value, priv->kinetic_mode);
+      break;
 
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -252,6 +258,10 @@ mx_kinetic_scroll_view_set_property (GObject      *object,
       mx_kinetic_scroll_view_set_overshoot (self, g_value_get_double (value));
       break;
 
+    case PROP_KINETIC_MODE:
+      mx_kinetic_scroll_view_set_kinetic_mode (self, g_value_get_boolean (value));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
     }
@@ -389,6 +399,13 @@ mx_kinetic_scroll_view_class_init (MxKineticScrollViewClass *klass)
                                MX_PARAM_READWRITE);
   g_object_class_install_property (object_class, PROP_OVERSHOOT, pspec);
 
+  pspec = g_param_spec_boolean ("kinetic-mode",
+                                "Kinetic Mode",
+                                "Determines whether the view should use kinetic mode.",
+                                FALSE, 
+                                MX_PARAM_READWRITE);
+  g_object_class_install_property (object_class, PROP_KINETIC_MODE, pspec);
+
   /* MxScrollable properties */
   g_object_class_override_property (object_class,
                                     PROP_HADJUST,
@@ -660,7 +677,7 @@ button_release_event_cb (ClutterActor        *stage,
 
   clutter_set_motion_events_enabled (TRUE);
 
-  if (child)
+  if (child && priv->kinetic_mode)
     {
       gfloat event_x, event_y;
 
@@ -945,6 +962,7 @@ mx_kinetic_scroll_view_init (MxKineticScrollView *self)
   g_array_set_size (priv->motion_buffer, 3);
   priv->decel_rate = 1.1f;
   priv->button = 1;
+  priv->kinetic_mode = FALSE;
 
   clutter_actor_set_reactive (CLUTTER_ACTOR (self), TRUE);
   g_signal_connect (self, "button-press-event",
@@ -1194,3 +1212,21 @@ mx_kinetic_scroll_view_get_overshoot (MxKineticScrollView *scroll)
   g_return_val_if_fail (MX_IS_KINETIC_SCROLL_VIEW (scroll), 0.0);
   return scroll->priv->overshoot;
 }
+
+void
+mx_kinetic_scroll_view_set_kinetic_mode (MxKineticScrollView *scroll,
+    gboolean kinetic)
+{
+  MxKineticScrollViewPrivate *priv;
+
+  priv = scroll->priv;
+  priv->kinetic_mode = kinetic;
+}
+
+gboolean
+mx_kinetic_scroll_view_get_kinetic_mode (MxKineticScrollView *scroll)
+{
+  g_return_val_if_fail (MX_IS_KINETIC_SCROLL_VIEW (scroll), FALSE);
+
+  return scroll->priv->kinetic_mode;
+}
diff --git a/mx/mx-kinetic-scroll-view.h b/mx/mx-kinetic-scroll-view.h
index b8efe28..7263c43 100644
--- a/mx/mx-kinetic-scroll-view.h
+++ b/mx/mx-kinetic-scroll-view.h
@@ -87,6 +87,11 @@ void mx_kinetic_scroll_view_set_overshoot (MxKineticScrollView *scroll,
                                            gdouble              overshoot);
 gdouble mx_kinetic_scroll_view_get_overshoot (MxKineticScrollView *scroll);
 
+void mx_kinetic_scroll_view_set_kinetic_mode (MxKineticScrollView *scroll,
+    gboolean kinetic);
+
+gboolean mx_kinetic_scroll_view_get_kinetic_mode (MxKineticScrollView *scroll);
+
 G_END_DECLS
 
 #endif /* __MX_KINETIC_SCROLL_VIEW_H__ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]