touch: added mouse move handler for Qt UI 41/25141/1
authorGiWoong Kim <giwoong.kim@samsung.com>
Wed, 30 Jul 2014 08:12:53 +0000 (17:12 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Wed, 30 Jul 2014 08:12:53 +0000 (17:12 +0900)
support a dragging emulation based on coordinate system of skin

Change-Id: I44b56a8f284157586b75d0a32be86cd773271d19
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/ui/displaywidget.cpp
tizen/src/ui/displaywidget.h
tizen/src/ui/uistate.cpp

index 953dd52897bc574cb594fe2e926172b3f49b5530..9a54674dbe4e52cf0df9b73ac14c83814a1979d3 100644 (file)
@@ -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);
+    }
 }
 
 /*
index 312643181d23c9febb8bc9f119644022f725252c..745a0b54b7d6cb73d356ef1402169640f0dab5c2 100644 (file)
@@ -3,6 +3,11 @@
 
 #include <QGLWidget>
 
+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
index 8d40a6734945995ffa4b0c5aa5e05819e0c52219..c7f1acbb99add4d1f3872a223fa36bb8ee8d973f 100644 (file)
@@ -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: