From 45f1021dbca3a4460204da636a7fcb43682c1350 Mon Sep 17 00:00:00 2001 From: GiWoong Kim Date: Thu, 7 May 2015 18:35:43 +0900 Subject: [PATCH] rotary: reduce rotary drawing frequency Change-Id: Ifa6a21ca616cc53bbd298a42f7fc2a1494cff2d3 Signed-off-by: GiWoong Kim --- tizen/src/ui/Makefile.objs | 5 ++++- tizen/src/ui/rotaryview.cpp | 34 ++++++++++++++++++++++++++++------ tizen/src/ui/rotaryview.h | 7 +++++++ 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/tizen/src/ui/Makefile.objs b/tizen/src/ui/Makefile.objs index 1ca3f7c..88d4b26 100644 --- a/tizen/src/ui/Makefile.objs +++ b/tizen/src/ui/Makefile.objs @@ -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 $@ diff --git a/tizen/src/ui/rotaryview.cpp b/tizen/src/ui/rotaryview.cpp index e4596d5..96dcf91 100644 --- a/tizen/src/ui/rotaryview.cpp +++ b/tizen/src/ui/rotaryview.cpp @@ -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(); } diff --git a/tizen/src/ui/rotaryview.h b/tizen/src/ui/rotaryview.h index 713b8e7..e5f0030 100644 --- a/tizen/src/ui/rotaryview.h +++ b/tizen/src/ui/rotaryview.h @@ -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 -- 2.7.4