X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/ac33062d9929ae582fc08d18af301184f79304cd..64d557a287f0e695856d6bc579293b399b8a07ea:/src/vikwindow.c diff --git a/src/vikwindow.c b/src/vikwindow.c index 065e76aa..8f214574 100644 --- a/src/vikwindow.c +++ b/src/vikwindow.c @@ -148,6 +148,7 @@ struct _VikWindow { GtkActionGroup *action_group; + gboolean pan_move; gint pan_x, pan_y; guint draw_image_width, draw_image_height; @@ -284,7 +285,8 @@ static void window_init ( VikWindow *vw ) vw->modified = FALSE; vw->only_updating_coord_mode_ui = FALSE; - + + vw->pan_move = FALSE; vw->pan_x = vw->pan_y = -1; vw->draw_image_width = DRAW_IMAGE_DEFAULT_WIDTH; vw->draw_image_height = DRAW_IMAGE_DEFAULT_HEIGHT; @@ -436,7 +438,7 @@ static void draw_redraw ( VikWindow *vw ) if ( ! new_trigger ) ; /* do nothing -- have to redraw everything. */ - else if ( (old_trigger != new_trigger) || !vik_coord_equals(&old_center, &vw->trigger_center) ) + else if ( (old_trigger != new_trigger) || !vik_coord_equals(&old_center, &vw->trigger_center) || (new_trigger->type == VIK_LAYER_AGGREGATE) ) vik_viewport_set_trigger ( vw->viking_vvp, new_trigger ); /* todo: set to half_drawn mode if new trigger is above old */ else vik_viewport_set_half_drawn ( vw->viking_vvp, TRUE ); @@ -469,6 +471,7 @@ static gboolean draw_buf(gpointer data) static void vik_window_pan_click (VikWindow *vw, GdkEventButton *event) { /* set panning origin */ + vw->pan_move = FALSE; vw->pan_x = (gint) event->x; vw->pan_y = (gint) event->y; } @@ -491,7 +494,12 @@ static void draw_click (VikWindow *vw, GdkEventButton *event) static void vik_window_pan_move (VikWindow *vw, GdkEventMotion *event) { if ( vw->pan_x != -1 ) { - vik_viewport_pan_sync ( vw->viking_vvp, event->x - vw->pan_x, event->y - vw->pan_y ); + vik_viewport_set_center_screen ( vw->viking_vvp, vik_viewport_get_width(vw->viking_vvp)/2 - event->x + vw->pan_x, + vik_viewport_get_height(vw->viking_vvp)/2 - event->y + vw->pan_y ); + draw_update ( vw ); + vw->pan_move = TRUE; + vw->pan_x = event->x; + vw->pan_y = event->y; } } @@ -549,7 +557,7 @@ static void draw_mouse_motion (VikWindow *vw, GdkEventMotion *event) static void vik_window_pan_release ( VikWindow *vw, GdkEventButton *event ) { - if ( ABS(vw->pan_x - event->x) <= 1 && ABS(vw->pan_y - event->y) <= 1 ) + if ( vw->pan_move == FALSE ) vik_viewport_set_center_screen ( vw->viking_vvp, vw->pan_x, vw->pan_y ); else vik_viewport_set_center_screen ( vw->viking_vvp, vik_viewport_get_width(vw->viking_vvp)/2 - event->x + vw->pan_x, @@ -1408,7 +1416,7 @@ static void on_activate_recent_item (GtkRecentChooser *chooser, g_signal_emit ( G_OBJECT(self), window_signals[VW_OPENWINDOW_SIGNAL], 0, filenames ); } else - vik_window_open_file ( self, filename, TRUE ); + vik_window_open_file ( self, path, TRUE ); g_free ( path ); }