Mercurial > hg > dmlib
view edwaveform.cpp @ 357:1b8362a26692
Work towards Qt based editor.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 16 Oct 2012 20:09:11 +0300 |
parents | |
children | 40e33ad0d153 |
line wrap: on
line source
#include <QtGui> #include "edwaveform.h" WaveformView::WaveformView(QWidget *parent) : QWidget(parent) { track = NULL; time = offs = 0; scale = 1.0f; } void WaveformView::setTrack(DMWaveform *mtrack) { track = mtrack; update(); } DMWaveform * WaveformView::getTrack() { return track; } void WaveformView::setTime(const int mtime) { time = mtime; update(); } void WaveformView::setOffset(const int moffs) { offs = moffs; update(); } void WaveformView::setScale(const float mscale) { if (mscale > 0.05) scale = mscale; update(); } void WaveformView::paintEvent(QPaintEvent *) { QColor waveColor(0, 150, 0); QColor markerColor(255,255,255); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.save(); painter.translate(0, height() / 2); painter.scale(scale, height() / 32768.0f); painter.setPen(waveColor); int prevY = 0, prevX = 0; for (int xc = 0; xc < width(); xc++) { qint16 value = data[(offs + xc) * scale]; painter.drawLine(prevX, prevY, xc, value); prevY = value; prevX = xc; } painter.restore(); if (time >= offs * scale && time - offs <= width() * scale) { int xc = time - offs; painter.scale(scale, 1); painter.setPen(markerColor); painter.drawLine(xc, 0, xc, height()); } } void WaveformView::mousePressEvent(QMouseEvent *ev) { /* if (ev->button() == Qt::LeftButton) { lastPoint = ev->pos(); scribbling = true; } */ } void WaveformView::mouseMoveEvent(QMouseEvent *ev) { /* if ((ev->buttons() & Qt::LeftButton) && scribbling) drawLineTo(ev->pos()); */ } void WaveformView::mouseReleaseEvent(QMouseEvent *ev) { /* if (ev->button() == Qt::LeftButton && scribbling) { drawLineTo(ev->pos()); scribbling = false; } */ }