From: GiWoong Kim Date: Thu, 7 May 2015 09:35:43 +0000 (+0900) Subject: rotary: reduce rotary drawing frequency X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.2~465^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=45f1021dbca3a4460204da636a7fcb43682c1350;p=sdk%2Femulator%2Fqemu.git rotary: reduce rotary drawing frequency Change-Id: Ifa6a21ca616cc53bbd298a42f7fc2a1494cff2d3 Signed-off-by: GiWoong Kim --- diff --git a/tizen/src/ui/Makefile.objs b/tizen/src/ui/Makefile.objs index 1ca3f7cf77..88d4b26fd1 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 e4596d5835..96dcf91e5f 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 713b8e7ead..e5f0030bf3 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