]> err.no Git - libchamplain/commitdiff
Seg fault fix when changing zoom levels on a view
authorEmmanuel Rodriguez <emmanuel.rodriguez@gmail.com>
Sat, 28 Mar 2009 09:18:29 +0000 (10:18 +0100)
committerPierre-Luc Beaudoin <pierre-luc@pierlux.com>
Sun, 29 Mar 2009 15:32:50 +0000 (18:32 +0300)
Zooming has no effect on a view that's not in a ClutterStage.

champlain/champlain-view.c

index 73c51e20ea1b992f05298b0c495469497bfff9dd..ca69f62d544067a650fecf748cdb732487099db1 100644 (file)
@@ -1220,16 +1220,19 @@ champlain_view_zoom_in (ChamplainView *view)
 
   ChamplainViewPrivate *priv = GET_PRIVATE (view);
 
+  if (priv->map == NULL)
+    return;
+
   if (ZOOM_LEVEL_OUT_OF_RANGE(priv, priv->zoom_level+1))
     return;
 
   ClutterActor *group = champlain_zoom_level_get_actor (priv->map->current_level);
-
   if (!map_zoom_in (priv->map, priv->map_source))
     return;
 
   priv->zoom_level++;
   resize_viewport (view);
+
   clutter_container_remove_actor (CLUTTER_CONTAINER (priv->map_layer),
       group);
   clutter_container_add_actor (CLUTTER_CONTAINER (priv->map_layer),
@@ -1254,16 +1257,19 @@ champlain_view_zoom_out (ChamplainView *view)
 
   ChamplainViewPrivate *priv = GET_PRIVATE (view);
 
+  if (priv->map == NULL)
+    return;
+
   if (ZOOM_LEVEL_OUT_OF_RANGE(priv, priv->zoom_level-1))
     return;
 
   ClutterActor *group = champlain_zoom_level_get_actor (priv->map->current_level);
-
   if (!map_zoom_out (priv->map, priv->map_source))
     return;
 
   priv->zoom_level--;
   resize_viewport (view);
+
   clutter_container_remove_actor (CLUTTER_CONTAINER (priv->map_layer),
       group);
   clutter_container_add_actor (CLUTTER_CONTAINER (priv->map_layer),
@@ -1289,21 +1295,20 @@ champlain_view_set_zoom_level (ChamplainView *view, gint zoom_level)
 
   ChamplainViewPrivate *priv = GET_PRIVATE (view);
 
-  if (zoom_level == priv->zoom_level || ZOOM_LEVEL_OUT_OF_RANGE(priv, zoom_level))
+  if (priv->map == NULL)
     return;
 
-  priv->zoom_level = zoom_level;
-
-  if (priv->map == NULL)
+  if (zoom_level == priv->zoom_level || ZOOM_LEVEL_OUT_OF_RANGE(priv, zoom_level))
     return;
 
   ClutterActor *group = champlain_zoom_level_get_actor (priv->map->current_level);
-
   if (!map_zoom_to (priv->map, priv->map_source, zoom_level))
     return;
 
-  ClutterActor *new_group = champlain_zoom_level_get_actor (priv->map->current_level);
+  priv->zoom_level = zoom_level;
   resize_viewport (view);
+
+  ClutterActor *new_group = champlain_zoom_level_get_actor (priv->map->current_level);
   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);