From 04d19bbbcdd265113caa988e8d20fb318a5dd0bd Mon Sep 17 00:00:00 2001 From: Emmanuel Rodriguez Date: Sat, 28 Mar 2009 10:18:29 +0100 Subject: [PATCH] Seg fault fix when changing zoom levels on a view Zooming has no effect on a view that's not in a ClutterStage. --- champlain/champlain-view.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/champlain/champlain-view.c b/champlain/champlain-view.c index 73c51e2..ca69f62 100644 --- a/champlain/champlain-view.c +++ b/champlain/champlain-view.c @@ -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); -- 2.39.5