@@ -1154,44 +1154,32 @@ void QgsMapCanvas::keyPressEvent( QKeyEvent * e )
1154
1154
// Don't want to interfer with mouse events
1155
1155
1156
1156
QgsRectangle currentExtent = mapSettings ().visibleExtent ();
1157
- double dx = qAbs (( currentExtent.xMaximum () - currentExtent. xMinimum () ) / 4 );
1158
- double dy = qAbs (( currentExtent.yMaximum () - currentExtent. yMinimum () ) / 4 );
1157
+ double dx = qAbs ( currentExtent.width ( ) / 4 );
1158
+ double dy = qAbs ( currentExtent.height ( ) / 4 );
1159
1159
1160
1160
switch ( e->key () )
1161
1161
{
1162
1162
case Qt::Key_Left:
1163
1163
QgsDebugMsg ( " Pan left" );
1164
-
1165
- currentExtent.setXMinimum ( currentExtent.xMinimum () - dx );
1166
- currentExtent.setXMaximum ( currentExtent.xMaximum () - dx );
1167
- setExtent ( currentExtent );
1164
+ setCenter ( center () - QgsVector ( dx, 0 ).rotateBy ( rotation () * M_PI / 180.0 ) );
1168
1165
refresh ();
1169
1166
break ;
1170
1167
1171
1168
case Qt::Key_Right:
1172
1169
QgsDebugMsg ( " Pan right" );
1173
-
1174
- currentExtent.setXMinimum ( currentExtent.xMinimum () + dx );
1175
- currentExtent.setXMaximum ( currentExtent.xMaximum () + dx );
1176
- setExtent ( currentExtent );
1170
+ setCenter ( center () + QgsVector ( dx, 0 ).rotateBy ( rotation () * M_PI / 180.0 ) );
1177
1171
refresh ();
1178
1172
break ;
1179
1173
1180
1174
case Qt::Key_Up:
1181
1175
QgsDebugMsg ( " Pan up" );
1182
-
1183
- currentExtent.setYMaximum ( currentExtent.yMaximum () + dy );
1184
- currentExtent.setYMinimum ( currentExtent.yMinimum () + dy );
1185
- setExtent ( currentExtent );
1176
+ setCenter ( center () + QgsVector ( 0 , dy ).rotateBy ( rotation () * M_PI / 180.0 ) );
1186
1177
refresh ();
1187
1178
break ;
1188
1179
1189
1180
case Qt::Key_Down:
1190
1181
QgsDebugMsg ( " Pan down" );
1191
-
1192
- currentExtent.setYMaximum ( currentExtent.yMaximum () - dy );
1193
- currentExtent.setYMinimum ( currentExtent.yMinimum () - dy );
1194
- setExtent ( currentExtent );
1182
+ setCenter ( center () - QgsVector ( 0 , dy ).rotateBy ( rotation () * M_PI / 180.0 ) );
1195
1183
refresh ();
1196
1184
break ;
1197
1185
0 commit comments