diff --git a/src/gtk/glmapview.cpp b/src/gtk/glmapview.cpp index 1bc83894..17249b76 100644 --- a/src/gtk/glmapview.cpp +++ b/src/gtk/glmapview.cpp @@ -141,6 +141,16 @@ gboolean GlMapView::Draw(GdkEventExpose *e) return TRUE; } +gboolean GlMapView::Scroll(double dx, double dy) +{ + gtk_adjustment_set_value(hadj, gtk_adjustment_get_value(hadj) + dx); + gtk_adjustment_set_value(vadj, gtk_adjustment_get_value(vadj) + dy); + + UpdateAdjustments(); + + return TRUE; +} + gboolean GlMapView::UpdateAdjustments() { float w = mapviewer ? mapviewer->GetWidth() : glarea->allocation.width; @@ -173,19 +183,6 @@ gboolean GlMapView::UpdateAdjustments() return TRUE; } -gboolean GlMapView::MoveAdjustments(double dx, double dy) -{ - if (dx) - gtk_adjustment_set_value(hadj, gtk_adjustment_get_value(hadj) + dx); - - if (dy) - gtk_adjustment_set_value(vadj, gtk_adjustment_get_value(vadj) + dy); - - UpdateAdjustments(); - - return TRUE; -} - gboolean GlMapView::MouseButton(GdkEventButton *e) { if (e->type == GDK_BUTTON_PRESS && e->button == 2) @@ -212,29 +209,9 @@ gboolean GlMapView::MouseMotion(GdkEventMotion *e) { if (panning) { - if (e->x != xpan) - { - double val = gtk_adjustment_get_value(hadj); - int map_width = mapviewer->GetWidth(); - val += xpan - e->x; - xpan = e->x; - if (val + glarea->allocation.width > map_width) - val = map_width - glarea->allocation.width; - gtk_adjustment_set_value(hadj, val); - gtk_adjustment_value_changed(hadj); - } - - if (e->y != ypan) - { - double val = gtk_adjustment_get_value(vadj); - int map_height = mapviewer->GetHeight(); - val += ypan - e->y; - ypan = e->y; - if (val + glarea->allocation.height > map_height) - val = map_height - glarea->allocation.height; - gtk_adjustment_set_value(vadj, val); - gtk_adjustment_value_changed(vadj); - } + Scroll(xpan - e->x, ypan - e->y); + xpan = e->x; + ypan = e->y; } return TRUE; @@ -244,10 +221,10 @@ gboolean GlMapView::KeyPress(GdkEventKey *e) { switch (e->keyval) { - case GDK_Up: MoveAdjustments( 0.0, -10.0); break; - case GDK_Down: MoveAdjustments( 0.0, 10.0); break; - case GDK_Left: MoveAdjustments(-10.0, 0.0); break; - case GDK_Right: MoveAdjustments( 10.0, 0.0); break; + case GDK_Up: Scroll( 0.0, -10.0); break; + case GDK_Down: Scroll( 0.0, 10.0); break; + case GDK_Left: Scroll(-10.0, 0.0); break; + case GDK_Right: Scroll( 10.0, 0.0); break; default: return FALSE; } diff --git a/src/gtk/glmapview.h b/src/gtk/glmapview.h index 49305ba2..49346796 100644 --- a/src/gtk/glmapview.h +++ b/src/gtk/glmapview.h @@ -21,8 +21,8 @@ private: gboolean Setup(); gboolean Destroy(); gboolean Draw(GdkEventExpose *e); + gboolean Scroll(double dx, double dy); gboolean UpdateAdjustments(); - gboolean MoveAdjustments(double dx, double dy); gboolean MouseButton(GdkEventButton *e); gboolean MouseMotion(GdkEventMotion *e); gboolean KeyPress(GdkEventKey *e);