]> err.no Git - libchamplain/commitdiff
Introduce champlain_view_set_zoom_level
authorPierre-Luc Beaudoin <pierre-luc@pierlux.com>
Tue, 3 Mar 2009 20:01:16 +0000 (22:01 +0200)
committerPierre-Luc Beaudoin <pierre-luc@pierlux.com>
Wed, 4 Mar 2009 21:05:38 +0000 (23:05 +0200)
champlain/champlain-view.c
champlain/champlain-view.h

index 41a7013411704f88d7a7c7e99c538cd966a87ccb..1c6dde38ba3cf153d60ef48773e0276d149044d2 100644 (file)
@@ -497,25 +497,7 @@ champlain_view_set_property (GObject *object,
     case PROP_ZOOM_LEVEL:
       {
         gint level = g_value_get_int (value);
-        if (priv->map)
-          {
-            if (level != priv->zoom_level)
-              {
-                ClutterActor *group = champlain_zoom_level_get_actor (priv->map->current_level);
-                if (map_zoom_to (priv->map, priv->map_source, level))
-                  {
-                    priv->zoom_level = level;
-                    ClutterActor *new_group = champlain_zoom_level_get_actor (priv->map->current_level);
-                    resize_viewport (view);
-                    clutter_container_remove_actor (
-                        CLUTTER_CONTAINER (priv->map_layer), group);
-                    clutter_container_add_actor (
-                        CLUTTER_CONTAINER (priv->map_layer), new_group);
-                    champlain_view_center_on (view, priv->latitude,
-                        priv->longitude);
-                  }
-              }
-          }
+        champlain_view_set_zoom_level (view, level);
         break;
       }
     case PROP_MAP_SOURCE:
@@ -1076,6 +1058,41 @@ champlain_view_zoom_out (ChamplainView *view)
     }
 }
 
+/**
+ * champlain_view_set_zoom_level:
+ * @view: a #ChamplainView
+ * @zoom_level: a gint
+ *
+ * Changes the current zoom level
+ *
+ * Since: 0.4
+ */
+void
+champlain_view_set_zoom_level (ChamplainView *view, gint zoom_level)
+{
+  g_return_if_fail (CHAMPLAIN_IS_VIEW (view));
+
+  ChamplainViewPrivate *priv = GET_PRIVATE (view);
+
+  if (priv->map && zoom_level != priv->zoom_level)
+    {
+      ClutterActor *group = champlain_zoom_level_get_actor (priv->map->current_level);
+      if (map_zoom_to (priv->map, priv->map_source, zoom_level))
+        {
+          priv->zoom_level = zoom_level;
+          ClutterActor *new_group = champlain_zoom_level_get_actor (priv->map->current_level);
+          resize_viewport (view);
+          clutter_container_remove_actor (CLUTTER_CONTAINER (priv->map_layer),
+              group);
+          clutter_container_add_actor (CLUTTER_CONTAINER (priv->map_layer),
+              new_group);
+          champlain_view_center_on (view, priv->latitude, priv->longitude);
+
+          g_object_notify (G_OBJECT (view), "zoom-level");
+        }
+    }
+}
+
 /**
  * champlain_view_add_layer:
  * @view: a #ChamplainView
index dc09bf56185aeecfa105381608f778d5ac4acd6a..3a213c783c7084330c3efa0c4c6a9ca5996541eb 100644 (file)
@@ -74,6 +74,8 @@ void champlain_view_zoom_in (ChamplainView *champlainView);
 
 void champlain_view_zoom_out (ChamplainView *champlainView);
 
+void champlain_view_set_zoom_level (ChamplainView *champlainView, gint zoom_level);
+
 void champlain_view_add_layer (ChamplainView *champlainView, ClutterActor *layer);
 
 void champlain_view_set_size (ChamplainView *view, guint width, guint height);