From: GiWoong Kim Date: Wed, 30 Jul 2014 08:12:53 +0000 (+0900) Subject: touch: added mouse move handler for Qt UI X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fc2eb41df9ecfaaedbf48d4d97446a34cb5b89e2;p=sdk%2Femulator%2Fqemu.git touch: added mouse move handler for Qt UI support a dragging emulation based on coordinate system of skin Change-Id: I44b56a8f284157586b75d0a32be86cd773271d19 Signed-off-by: GiWoong Kim --- diff --git a/tizen/src/ui/displaywidget.cpp b/tizen/src/ui/displaywidget.cpp index 953dd52897..9a54674dbe 100644 --- a/tizen/src/ui/displaywidget.cpp +++ b/tizen/src/ui/displaywidget.cpp @@ -22,7 +22,6 @@ DisplayWidget::DisplayWidget(QSize resolution, QGLContext *context, QWidget *par MainWindow *win = ((MainWindow *)this->parent()->parent()); rotateAngle = win->getUIState()->layoutAngle; scaleFactor = win->getUIState()->getScaleFactor(); - elapsed = 0; //setAutoFillBackground(false); @@ -88,21 +87,84 @@ void DisplayWidget::resizeEvent(QResizeEvent *event) qt5_window_height = height(); } +void DisplayWidget::sendTouchEvent(int eventType, int clientX, int clientY) +{ + int xx = clientX / scaleFactor; + int yy = clientY / scaleFactor; + int absX = xx; + int absY = yy; + + /* TODO: x*cos(rad)-y*sin(rad) */ + switch(rotateAngle) { + case 90: /* Reverse Landscape */ + absX = yy; + absY = resolution.height() - xx; + break; + case 180: /* Reverse Portrait */ + absX = resolution.width() - xx; + absY = resolution.height() - yy; + break; + case 270: /* Landscape */ + absX = resolution.width() - yy; + absY = xx; + break; + case 0: + default: + break; + } + + do_mouse_event(0, eventType, clientX, clientY, absX, absY, 0); +} + void DisplayWidget::mousePressEvent(QMouseEvent *event) { - do_mouse_event(0, 1, event->x(), event->y(), - event->x() / scaleFactor, event->y() / scaleFactor, 0); + if (event->button() == Qt::LeftButton) { + isDragging = true; + + sendTouchEvent(TOUCH_PRESS, event->x(), event->y()); + } } void DisplayWidget::mouseReleaseEvent(QMouseEvent *event) { - do_mouse_event(0, 2, event->x(), event->y(), - event->x() / scaleFactor, event->y() / scaleFactor, 0); + if (event->button() == Qt::LeftButton) { + if (isDragging) { + isDragging = false; + } + + sendTouchEvent(TOUCH_RELEASE, event->x(), event->y()); + } } void DisplayWidget::mouseMoveEvent(QMouseEvent *event) { - /* do nothing */ + if (isDragging == true) { + int event_type = TOUCH_PRESS; + int clientX = event->x(); + int clientY = event->y(); + + if (clientX < 0) { + event_type = TOUCH_RELEASE; + clientX = 0; + isDragging = false; + } else if (clientX >= width()) { + event_type = TOUCH_RELEASE; + clientX = width() - 1; + isDragging = false; + } + + if (clientY < 0) { + event_type = TOUCH_RELEASE; + clientY = 0; + isDragging = false; + } else if (clientY >= height()) { + event_type = TOUCH_RELEASE; + clientY = height() - 1; + isDragging = false; + } + + sendTouchEvent(event_type, clientX, clientY); + } } /* diff --git a/tizen/src/ui/displaywidget.h b/tizen/src/ui/displaywidget.h index 312643181d..745a0b54b7 100644 --- a/tizen/src/ui/displaywidget.h +++ b/tizen/src/ui/displaywidget.h @@ -3,6 +3,11 @@ #include +enum { + TOUCH_PRESS = 1, + TOUCH_RELEASE = 2, +}; + class DisplayWidget : public QGLWidget { Q_OBJECT @@ -26,12 +31,14 @@ protected: //void keyPressEvent(QKeyEvent *event); //void keyReleaseEvent(QKeyEvent *event); + void sendTouchEvent(int eventType, int clientX, int clientY); + private: QSize resolution; int rotateAngle; qreal scaleFactor; - int elapsed; + bool isDragging; }; #endif // DISPLAYWIDGET_H diff --git a/tizen/src/ui/uistate.cpp b/tizen/src/ui/uistate.cpp index 8d40a67349..c7f1acbb99 100644 --- a/tizen/src/ui/uistate.cpp +++ b/tizen/src/ui/uistate.cpp @@ -12,13 +12,13 @@ int UIState::getLayoutIndex(int angle) int index = 0; switch(angle) { - case 90: + case 90: /* Reverse Landscape */ index = 3; break; - case 180: + case 180: /* Reverse Portrait */ index = 2; break; - case 270: + case 270: /* Landscape */ index = 1; break; case 0: