diff options
Diffstat (limited to 'dgedit')
-rw-r--r-- | dgedit/canvastoollisten.cc | 25 | ||||
-rw-r--r-- | dgedit/canvastoollisten.h | 6 |
2 files changed, 28 insertions, 3 deletions
diff --git a/dgedit/canvastoollisten.cc b/dgedit/canvastoollisten.cc index 0734cf5..74bf176 100644 --- a/dgedit/canvastoollisten.cc +++ b/dgedit/canvastoollisten.cc @@ -26,7 +26,7 @@ */ #include "canvastoollisten.h" -#define BUFSZ 1024 +#define BUFSZ 1024 * 2 Player::Player(Canvas *c) { @@ -65,12 +65,12 @@ void Player::run() } ao_play(dev, (char*)s, BUFSZ * sizeof(short)); - canvas->update(); + // canvas->update(); pos += BUFSZ; } else { - msleep(100); + msleep(22); } } } @@ -78,20 +78,27 @@ void Player::run() CanvasToolListen::CanvasToolListen(Canvas *c) : player(c) { + lastpos = 0; canvas = c ; player.start(); + QObject::connect(&timer, SIGNAL(timeout()), this, SLOT(update())); } bool CanvasToolListen::mousePressEvent(QMouseEvent *event) { player.pos = canvas->unmapX(event->x()); player.playing = true; + canvas->update(); + timer.start(50); return true; } bool CanvasToolListen::mouseReleaseEvent(QMouseEvent *event) { player.playing = false; + timer.stop(); + lastpos = 0; + canvas->update(); return true; } @@ -105,3 +112,15 @@ void CanvasToolListen::paintEvent(QPaintEvent *event, QPainter &painter) event->rect().y() + event->rect().height()); } } + +void CanvasToolListen::update() +{ + size_t pos = player.pos; + size_t last = canvas->mapX(lastpos); + size_t x = canvas->mapX(player.pos); + QRect r(last, 0, + x - last + 2, canvas->height()); + + canvas->update(r); + lastpos = pos; +} diff --git a/dgedit/canvastoollisten.h b/dgedit/canvastoollisten.h index dfbea97..22daafd 100644 --- a/dgedit/canvastoollisten.h +++ b/dgedit/canvastoollisten.h @@ -30,6 +30,7 @@ #include "canvastool.h" #include <QThread> +#include <QTimer> #include <ao/ao.h> @@ -59,10 +60,15 @@ public: bool mouseReleaseEvent(QMouseEvent *event); void paintEvent(QPaintEvent *event, QPainter &painter); +public slots: + void update(); + private: Canvas *canvas; Player player; + QTimer timer; + size_t lastpos; }; #endif/*__DRUMGIZMO_CANVASTOOLLISTEN_H__*/ |