rotary: reduce rotary drawing frequency
authorGiWoong Kim <giwoong.kim@samsung.com>
Thu, 7 May 2015 09:35:43 +0000 (18:35 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Thu, 7 May 2015 09:35:43 +0000 (18:35 +0900)
Change-Id: Ifa6a21ca616cc53bbd298a42f7fc2a1494cff2d3
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/ui/Makefile.objs
tizen/src/ui/rotaryview.cpp
tizen/src/ui/rotaryview.h

index 1ca3f7c..88d4b26 100644 (file)
@@ -12,7 +12,7 @@ obj-$(CONFIG_QT) += mainwindow.o moc_mainwindow.o
 obj-$(CONFIG_QT) += skinbezelitem.o
 obj-$(CONFIG_QT) += skinkeyitem.o moc_skinkeyitem.o
 obj-$(CONFIG_QT) += skinview.o
-obj-$(CONFIG_QT) += rotaryview.o
+obj-$(CONFIG_QT) += rotaryview.o moc_rotaryview.o
 obj-$(CONFIG_QT) += skinpainter.o
 obj-$(CONFIG_QT) += uiinformation.o
 obj-$(CONFIG_QT) += uistate.o
@@ -36,3 +36,6 @@ $(obj)/moc_mainwindow.cpp: $(obj)/mainwindow.h
 $(obj)/moc_skinkeyitem.o: $(obj)/moc_skinkeyitem.cpp
 $(obj)/moc_skinkeyitem.cpp: $(obj)/skinkeyitem.h
        moc $< -o $@
+$(obj)/moc_rotaryview.o: $(obj)/moc_rotaryview.cpp
+$(obj)/moc_rotaryview.cpp: $(obj)/rotaryview.h
+       moc $< -o $@
index e4596d5..96dcf91 100644 (file)
@@ -32,6 +32,8 @@
 #include "rotaryview.h"
 #include "mainwindow.h"
 
+#define ROTARY_DRAWING_INTERVAL 100
+
 RotaryView::RotaryView(QWidget *parent) :
     QGraphicsView(new QGraphicsScene(parent), parent)
 {
@@ -40,6 +42,11 @@ RotaryView::RotaryView(QWidget *parent) :
     this->grabPos = QPoint(-1, -1);
     this->grabAngle = 0;
     this->rotaryDegree = 0;
+    this->lastTimestamp = 0;
+
+    timer = new QTimer(this);
+    timer->setSingleShot(true);
+    connect(timer, SIGNAL(timeout()), this, SLOT(rotateRotaryItem()));
 
     setStyleSheet("background-color: rgb(189, 189, 189); border-style: none");
     setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@@ -78,6 +85,11 @@ void RotaryView::update()
     createItems();
 }
 
+void RotaryView::rotateRotaryItem()
+{
+    rotaryItem->setRotation(rotaryDegree);
+}
+
 /* override */
 void RotaryView::resizeEvent(QResizeEvent *event)
 {
@@ -128,6 +140,8 @@ void RotaryView::mouseReleaseEvent(QMouseEvent *event)
         grabAngle = 0;
     }
 
+    rotateRotaryItem();
+
     QGraphicsView::mouseReleaseEvent(event);
 }
 
@@ -143,15 +157,21 @@ void RotaryView::mouseMoveEvent(QMouseEvent *event)
         } else if (deltaAngle > 180) {
             deltaAngle -= 360; /* 0 -> 359 */
         }
-        qDebug() << "rotary delta :" << deltaAngle;
 
-        rotaryDegree += deltaAngle;
-
-        /* TODO: too many heavy calls over here
-        move to thread or paintEvent handler */
-        rotaryItem->setRotation(rotaryDegree);
+        /* convert to device event */
+        do_rotary_event(deltaAngle, 0);
 
+        rotaryDegree += deltaAngle;
         grabAngle = moveAngle;
+
+        /* drawing */
+        if ((event->timestamp() - lastTimestamp) > ROTARY_DRAWING_INTERVAL) {
+            timer->stop();
+            rotateRotaryItem();
+            lastTimestamp = event->timestamp();
+        } else {
+            timer->start(ROTARY_DRAWING_INTERVAL * 3);
+        }
     }
 
     QGraphicsView::mouseMoveEvent(event);
@@ -161,5 +181,7 @@ RotaryView::~RotaryView()
 {
     qDebug("destroy rotary view");
 
+    timer->stop();
+
     scene()->clear();
 }
index 713b8e7..e5f0030 100644 (file)
@@ -36,6 +36,8 @@ class MainWindow;
 
 class RotaryView : public QGraphicsView
 {
+    Q_OBJECT
+
 public:
     RotaryView(QWidget *parent);
     ~RotaryView();
@@ -62,6 +64,11 @@ private:
     int grabAngle;
     int rotaryDegree; /* absolute */
 
+    ulong lastTimestamp;
+    QTimer *timer;
+
+private slots:
+    void rotateRotaryItem();
 };
 
 #endif // ROTARYVIEW_H