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
$(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 $@
#include "rotaryview.h"
#include "mainwindow.h"
+#define ROTARY_DRAWING_INTERVAL 100
+
RotaryView::RotaryView(QWidget *parent) :
QGraphicsView(new QGraphicsScene(parent), 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);
createItems();
}
+void RotaryView::rotateRotaryItem()
+{
+ rotaryItem->setRotation(rotaryDegree);
+}
+
/* override */
void RotaryView::resizeEvent(QResizeEvent *event)
{
grabAngle = 0;
}
+ rotateRotaryItem();
+
QGraphicsView::mouseReleaseEvent(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);
{
qDebug("destroy rotary view");
+ timer->stop();
+
scene()->clear();
}