diff --git a/src/laybasic/laybasic/layLayoutCanvas.cc b/src/laybasic/laybasic/layLayoutCanvas.cc index 79d2eff06..13b7ac339 100644 --- a/src/laybasic/laybasic/layLayoutCanvas.cc +++ b/src/laybasic/laybasic/layLayoutCanvas.cc @@ -378,16 +378,28 @@ LayoutCanvas::~LayoutCanvas () } void -LayoutCanvas::key_event (unsigned int key, unsigned int /*buttons*/) +LayoutCanvas::key_event (unsigned int key, unsigned int buttons) { - if (int (key) == Qt::Key_Down) { - emit down_arrow_key_pressed (); - } else if (int (key) == Qt::Key_Up) { - emit up_arrow_key_pressed (); - } else if (int (key) == Qt::Key_Left) { - emit left_arrow_key_pressed (); - } else if (int (key) == Qt::Key_Right) { - emit right_arrow_key_pressed (); + if (! (buttons & lay::ShiftButton)) { + if (int (key) == Qt::Key_Down) { + emit down_arrow_key_pressed (); + } else if (int (key) == Qt::Key_Up) { + emit up_arrow_key_pressed (); + } else if (int (key) == Qt::Key_Left) { + emit left_arrow_key_pressed (); + } else if (int (key) == Qt::Key_Right) { + emit right_arrow_key_pressed (); + } + } else { + if (int (key) == Qt::Key_Down) { + emit down_arrow_key_pressed_with_shift (); + } else if (int (key) == Qt::Key_Up) { + emit up_arrow_key_pressed_with_shift (); + } else if (int (key) == Qt::Key_Left) { + emit left_arrow_key_pressed_with_shift (); + } else if (int (key) == Qt::Key_Right) { + emit right_arrow_key_pressed_with_shift (); + } } } diff --git a/src/laybasic/laybasic/layLayoutCanvas.h b/src/laybasic/laybasic/layLayoutCanvas.h index c4a5a0919..8551acac2 100644 --- a/src/laybasic/laybasic/layLayoutCanvas.h +++ b/src/laybasic/laybasic/layLayoutCanvas.h @@ -348,6 +348,10 @@ signals: void up_arrow_key_pressed (); void right_arrow_key_pressed (); void down_arrow_key_pressed (); + void left_arrow_key_pressed_with_shift (); + void up_arrow_key_pressed_with_shift (); + void right_arrow_key_pressed_with_shift (); + void down_arrow_key_pressed_with_shift (); private: lay::LayoutView *mp_view; diff --git a/src/laybasic/laybasic/layLayoutView.cc b/src/laybasic/laybasic/layLayoutView.cc index 2834f28f1..bf2285c7b 100644 --- a/src/laybasic/laybasic/layLayoutView.cc +++ b/src/laybasic/laybasic/layLayoutView.cc @@ -83,6 +83,9 @@ namespace lay // factor for "zoom in & out" const double zoom_factor = 0.7; +// factor by which panning is faster in "fast" (+Shift) mode +const double fast_factor = 3.0; + // ------------------------------------------------------------- struct OpHideShowCell @@ -482,6 +485,10 @@ LayoutView::init (db::Manager *mgr, lay::PluginRoot *root, QWidget * /*parent*/) connect (mp_canvas, SIGNAL (up_arrow_key_pressed ()), this, SLOT (pan_up ())); connect (mp_canvas, SIGNAL (right_arrow_key_pressed ()), this, SLOT (pan_right ())); connect (mp_canvas, SIGNAL (down_arrow_key_pressed ()), this, SLOT (pan_down ())); + connect (mp_canvas, SIGNAL (left_arrow_key_pressed_with_shift ()), this, SLOT (pan_left_fast ())); + connect (mp_canvas, SIGNAL (up_arrow_key_pressed_with_shift ()), this, SLOT (pan_up_fast ())); + connect (mp_canvas, SIGNAL (right_arrow_key_pressed_with_shift ()), this, SLOT (pan_right_fast ())); + connect (mp_canvas, SIGNAL (down_arrow_key_pressed_with_shift ()), this, SLOT (pan_down_fast ())); // occupy services and editables: // these services get deleted by the canvas destructor automatically: @@ -3509,6 +3516,30 @@ LayoutView::pan_down () shift_window (1.0, 0.0, -m_pan_distance); } +void +LayoutView::pan_left_fast () +{ + shift_window (1.0, -m_pan_distance * fast_factor, 0.0); +} + +void +LayoutView::pan_right_fast () +{ + shift_window (1.0, m_pan_distance * fast_factor, 0.0); +} + +void +LayoutView::pan_up_fast () +{ + shift_window (1.0, 0.0, m_pan_distance * fast_factor); +} + +void +LayoutView::pan_down_fast () +{ + shift_window (1.0, 0.0, -m_pan_distance * fast_factor); +} + void LayoutView::pan_center (const db::DPoint &p) { diff --git a/src/laybasic/laybasic/layLayoutView.h b/src/laybasic/laybasic/layLayoutView.h index e17097c91..a93b9968a 100644 --- a/src/laybasic/laybasic/layLayoutView.h +++ b/src/laybasic/laybasic/layLayoutView.h @@ -2425,6 +2425,10 @@ public slots: void pan_up (); void pan_right (); void pan_down (); + void pan_left_fast (); + void pan_up_fast (); + void pan_right_fast (); + void pan_down_fast (); // menu callbacks void cm_new_layer ();