diff options
Diffstat (limited to 'dgedit/canvastoollisten.cc')
-rw-r--r-- | dgedit/canvastoollisten.cc | 25 |
1 files changed, 22 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; +} |