Skip to content

Commit 5fe451a

Browse files
authored
Merge pull request #3 from Larpon/feature/rotate-canvas-with-numpad
Add canvas rotation using NumPad + KeyPad numbers
2 parents b9e72ff + 0f2d2e4 commit 5fe451a

File tree

9 files changed

+64
-12
lines changed

9 files changed

+64
-12
lines changed

src/ctrl/KeyBinding.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ KeyBinding::KeyBinding(int aKeyCode, Qt::KeyboardModifiers aModifiers, int aSubK
4242
, mSubKeyCode(aSubKeyCode)
4343
, mModifiers()
4444
{
45-
mModifiers = aModifiers & (Qt::ControlModifier | Qt::ShiftModifier | Qt::AltModifier | Qt::MetaModifier);
45+
mModifiers = aModifiers & (Qt::ControlModifier | Qt::ShiftModifier | Qt::AltModifier | Qt::MetaModifier | Qt::KeypadModifier);
4646
}
4747

4848
void KeyBinding::setSubKeyCode(int aSubKeyCode)
@@ -53,7 +53,12 @@ void KeyBinding::setSubKeyCode(int aSubKeyCode)
5353
bool KeyBinding::isValidBinding() const
5454
{
5555
return getKeyValidity(mKeyCode) &&
56-
(mSubKeyCode == -1 || getKeyValidity(mSubKeyCode));
56+
(mSubKeyCode == -1 || getKeyValidity(mSubKeyCode));
57+
}
58+
59+
bool KeyBinding::hasKeypadModifier() const
60+
{
61+
return mModifiers & Qt::KeypadModifier;
5762
}
5863

5964
bool KeyBinding::hasControlModifier() const
@@ -97,6 +102,8 @@ QString KeyBinding::text() const
97102
if (hasShiftModifier()) t += "Shift + ";
98103
if (hasAltModifier()) t += "Alt + ";
99104

105+
if (hasKeypadModifier()) t += "Keypad + ";
106+
100107
if (mKeyCode != -1)
101108
{
102109
t += QKeySequence(mKeyCode).toString();
@@ -148,6 +155,7 @@ void KeyBinding::setSerialValue(const QString& aValue)
148155
if (mod & 0x01) mModifiers |= Qt::ControlModifier;
149156
if (mod & 0x02) mModifiers |= Qt::ShiftModifier;
150157
if (mod & 0x04) mModifiers |= Qt::AltModifier;
158+
if (mod & 0x06) mModifiers |= Qt::KeypadModifier;
151159
if (mod & 0x08) mModifiers |= Qt::MetaModifier;
152160

153161
if (!isValidBinding())
@@ -164,6 +172,7 @@ QString KeyBinding::serialValue() const
164172
mod |= mModifiers.testFlag(Qt::ControlModifier) ? 0x01 : 0x00;
165173
mod |= mModifiers.testFlag(Qt::ShiftModifier) ? 0x02 : 0x00;
166174
mod |= mModifiers.testFlag(Qt::AltModifier) ? 0x04 : 0x00;
175+
mod |= mModifiers.testFlag(Qt::KeypadModifier) ? 0x06 : 0x00;
167176
mod |= mModifiers.testFlag(Qt::MetaModifier) ? 0x08 : 0x00;
168177
return QString::number(mKeyCode) + "," + QString::number(mod) + "," + QString::number(mSubKeyCode);
169178
}

src/ctrl/KeyBinding.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class KeyBinding
2323
int subKeyCode() const { return mSubKeyCode; }
2424
bool hasSubKeyCode() const { return mSubKeyCode != -1; }
2525
bool isValidBinding() const;
26+
bool hasKeypadModifier() const;
2627
bool hasControlModifier() const;
2728
bool hasShiftModifier() const;
2829
bool hasAltModifier() const;

src/gui/KeyCommandMap.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ KeyCommandMap::KeyCommandMap(QWidget& aParent)
5555
addNewKey("RotateCanvas", view, tr("Rotate canvas"),
5656
ctrl::KeyBinding(Qt::Key_Space, Qt::ShiftModifier));
5757

58+
addNewKey("RotateCanvas15Clockwise", view, tr("Rotate canvas 15° clockwise"),
59+
ctrl::KeyBinding(Qt::Key_6, Qt::KeypadModifier));
60+
61+
addNewKey("RotateCanvas15AntiClockwise", view, tr("Rotate canvas 15° anti clockwise"),
62+
ctrl::KeyBinding(Qt::Key_4, Qt::KeypadModifier));
63+
5864
addNewKey("ResetCanvasAngle", view, tr("Reset canvas angle"),
5965
ctrl::KeyBinding(Qt::Key_Space, Qt::NoModifier, Qt::Key_F1));
6066

src/gui/MainDisplayWidget.cpp

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,34 @@ MainDisplayWidget::MainDisplayWidget(ViaPoint& aViaPoint, QWidget* aParent)
9797
}
9898
}
9999

100+
// rotate canvas clockwise
101+
{
102+
auto key = mViaPoint.keyCommandMap()->get("RotateCanvas15Clockwise");
103+
if (key)
104+
{
105+
106+
key->invoker = [=]()
107+
{
108+
mCanvasMover.rotate(qDegreesToRadians(15.0f));
109+
updateRender();
110+
};
111+
}
112+
}
113+
114+
// rotate canvas anti-clockwise
115+
{
116+
auto key = mViaPoint.keyCommandMap()->get("RotateCanvas15AntiClockwise");
117+
if (key)
118+
{
119+
120+
key->invoker = [=]()
121+
{
122+
mCanvasMover.rotate(qDegreesToRadians(-15.0f));
123+
updateRender();
124+
};
125+
}
126+
}
127+
100128
// reset canvas angle
101129
{
102130
auto key = mViaPoint.keyCommandMap()->get("ResetCanvasAngle");
@@ -161,7 +189,7 @@ void MainDisplayWidget::resetCamera()
161189
camera.setCenter(QVector2D(scrSize.width() * 0.5f, scrSize.height() * 0.5f));
162190
if (scrSize.width() > 0 && scrSize.height() > 0 && imgSize.width() > 0 && imgSize.height() > 0)
163191
{
164-
auto scaleX = (float)scrSize.width() / imgSize.width();
192+
auto scaleX = (float)scrSize.width() / imgSize.width();
165193
auto scaleY = (float)scrSize.height() / imgSize.height();
166194
auto minScale = scaleX < scaleY ? scaleX : scaleY;
167195
camera.setScale(minScale);
@@ -490,11 +518,11 @@ void MainDisplayWidget::onViewSettingChanged(const MainViewSetting& aSetting)
490518
}
491519
else if (mViewSetting.rotateViewACW)
492520
{
493-
mCanvasMover.rotate((float)(-M_PI / 18.0));
521+
mCanvasMover.rotate(qDegreesToRadians(-15.0f));
494522
}
495523
else if (mViewSetting.rotateViewCW)
496524
{
497-
mCanvasMover.rotate((float)(M_PI / 18.0));
525+
mCanvasMover.rotate(qDegreesToRadians(15.0f));
498526
}
499527

500528
updateRender();

src/gui/MainDisplayWidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <QScopedPointer>
77
#include <QTabBar>
88
#include <QReadWriteLock>
9+
#include <QtMath>
910
#include "util/LinkPointer.h"
1011
#include "gl/Global.h"
1112
#include "gl/Root.h"

src/gui/MainWindow.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ MainWindow::MainWindow(ctrl::System& aSystem, GUIResources& aResources, const Lo
212212
{
213213
dockWidget->setStyleSheet(QTextStream(&stylesheet).readAll());
214214
}
215-
mTool = new ToolWidget(mViaPoint, mGUIResources, QSize(192, 136), dockWidget);
215+
mTool = new ToolWidget(mViaPoint, mGUIResources, *mKeyCommandMap, QSize(192, 136), dockWidget);
216216
dockWidget->setWidget(mTool);
217217
}
218218

src/gui/MainWindow.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class MainWindow : public QMainWindow
6666
ctrl::System& mSystem;
6767
GUIResources& mGUIResources;
6868
ViaPoint mViaPoint;
69-
QScopedPointer<KeyCommandMap> mKeyCommandMap;
69+
QScopedPointer<KeyCommandMap> mKeyCommandMap;
7070
QScopedPointer<KeyCommandInvoker> mKeyCommandInvoker;
7171
MouseSetting mMouseSetting;
7272
MainMenuBar* mMainMenuBar;

src/gui/ToolWidget.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55
namespace gui
66
{
77

8-
ToolWidget::ToolWidget(ViaPoint& aViaPoint, GUIResources& aResources,
9-
const QSize& aSizeHint, QWidget* aParent)
8+
ToolWidget::ToolWidget(ViaPoint& aViaPoint, GUIResources& aResources, KeyCommandMap &aKeyCommandMap,
9+
const QSize& aSizeHint, QWidget* aParent)
1010
: QWidget(aParent)
1111
, mViaPoint(aViaPoint)
1212
, mResources(aResources)
13+
, mKeyCommandMap(aKeyCommandMap)
1314
, mSizeHint(aSizeHint)
1415
, mViewPanel()
1516
, mModePanel()
@@ -108,19 +109,24 @@ void ToolWidget::createViewPanel()
108109
this->viewSetting().cutImagesByTheFrame = aChecked;
109110
this->onViewSettingChanged(this->viewSetting());
110111
});
111-
mViewPanel->addButton("rotateac", false, tr("Rotate the View Anticlockwise"), [=](bool)
112+
113+
QString _rotateViewAntiClockwiseText = this->mKeyCommandMap.get("RotateCanvas15AntiClockwise")->binding.text();
114+
mViewPanel->addButton("rotateac", false, tr("Rotate the View Anticlockwise (%1").arg(_rotateViewAntiClockwiseText), [=](bool)
112115
{
113116
this->viewSetting().rotateViewACW = true;
114117
this->onViewSettingChanged(this->viewSetting());
115118
this->viewSetting().rotateViewACW = false;
116119
});
120+
117121
mViewPanel->addButton("resetrot", false, tr("Reset Rotation of the View"), [=](bool)
118122
{
119123
this->viewSetting().resetRotateView = true;
120124
this->onViewSettingChanged(this->viewSetting());
121125
this->viewSetting().resetRotateView = false;
122126
});
123-
mViewPanel->addButton("rotatecw", false, tr("Rotate the View Clockwise"), [=](bool)
127+
128+
QString _rotateViewClockwiseText = this->mKeyCommandMap.get("RotateCanvas15Clockwise")->binding.text();
129+
mViewPanel->addButton("rotatecw", false, tr("Rotate the View Clockwise (%1)").arg(_rotateViewClockwiseText), [=](bool)
124130
{
125131
this->viewSetting().rotateViewCW = true;
126132
this->onViewSettingChanged(this->viewSetting());

src/gui/ToolWidget.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class ToolWidget : public QWidget
2525
{
2626
Q_OBJECT
2727
public:
28-
ToolWidget(ViaPoint& aViaPoint, GUIResources& aResources,
28+
ToolWidget(ViaPoint& aViaPoint, GUIResources& aResources, KeyCommandMap& aKeyCommandMap,
2929
const QSize& aSizeHint, QWidget* aParent);
3030

3131
void setDriver(ctrl::Driver* aDriver);
@@ -51,6 +51,7 @@ class ToolWidget : public QWidget
5151

5252
ViaPoint& mViaPoint;
5353
GUIResources& mResources;
54+
KeyCommandMap& mKeyCommandMap;
5455
const QSize mSizeHint;
5556
tool::ViewPanel* mViewPanel;
5657
tool::ModePanel* mModePanel;

0 commit comments

Comments
 (0)