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__*/ | 
