summaryrefslogtreecommitdiffstats
path: root/pacman-c++/mainwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pacman-c++/mainwidget.cpp')
-rw-r--r--pacman-c++/mainwidget.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/pacman-c++/mainwidget.cpp b/pacman-c++/mainwidget.cpp
index 9d7fb14..743b57e 100644
--- a/pacman-c++/mainwidget.cpp
+++ b/pacman-c++/mainwidget.cpp
@@ -6,7 +6,10 @@
6#include "constants.h" 6#include "constants.h"
7 7
8MainWidget::MainWidget() 8MainWidget::MainWidget()
9 : currentKey(0)
9{ 10{
11 setFocusPolicy(Qt::StrongFocus);
12
10 QVBoxLayout *layout = new QVBoxLayout(this); 13 QVBoxLayout *layout = new QVBoxLayout(this);
11 14
12 QHBoxLayout *m_scoreLayout = new QHBoxLayout(); 15 QHBoxLayout *m_scoreLayout = new QHBoxLayout();
@@ -172,3 +175,40 @@ QPoint MainWidget::mapPositionToCoord(unsigned int x, unsigned int y)
172 return QPoint(x * field_size[0], y * field_size[1]); 175 return QPoint(x * field_size[0], y * field_size[1]);
173} 176}
174 177
178transmission::field_t MainWidget::translateKey(int key)
179{
180 switch(key) {
181 case Qt::Key_Up:
182 return transmission::direction_up;
183 break;
184 case Qt::Key_Down:
185 return transmission::direction_down;
186 break;
187 case Qt::Key_Left:
188 return transmission::direction_left;
189 break;
190 case Qt::Key_Right:
191 return transmission::direction_right;
192 break;
193 default:
194 return 0;
195 }
196}
197
198void MainWidget::keyPressEvent(QKeyEvent* event)
199{
200 QWidget::keyPressEvent(event);
201 currentKey = translateKey( event->key() );
202}
203
204void MainWidget::keyReleaseEvent(QKeyEvent* event)
205{
206 QWidget::keyReleaseEvent(event);
207 transmission::field_t releasedKey = translateKey(event->key());
208 if (releasedKey == currentKey) {
209 // current key got released
210 // if this is false, a key got released which has already
211 // been replaced by a different key, so this case is disregarded
212 currentKey = 0;
213 }
214}