X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=sigview.cpp;h=cf0983d90ba2b0cefbb798f1edcc9dda697f4f39;hb=3e46726aaf1cfe749c8f3fced7b455cf01a03c86;hp=4097ae5c25fe1f316b4cd9359dbe44b79bd8a8cf;hpb=e5335d4f0973a90ef7f7f69095e9db36e3feb0cb;p=pulseview.git diff --git a/sigview.cpp b/sigview.cpp index 4097ae5..cf0983d 100644 --- a/sigview.cpp +++ b/sigview.cpp @@ -31,6 +31,7 @@ using namespace boost; using namespace std; const int SigView::SignalHeight = 50; +const int SigView::LabelMarginWidth = 70; SigView::SigView(SigSession &session, QWidget *parent) : QGLWidget(parent), @@ -42,41 +43,70 @@ SigView::SigView(SigSession &session, QWidget *parent) : this, SLOT(dataUpdated())); setMouseTracking(true); + setAutoFillBackground(false); } void SigView::initializeGL() { - glDisable(GL_TEXTURE_2D); - glDisable(GL_DEPTH_TEST); - glDisable(GL_COLOR_MATERIAL); - glEnable(GL_BLEND); - glEnable(GL_POLYGON_SMOOTH); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glClearColor(1.0, 1.0, 1.0, 0); } void SigView::resizeGL(int width, int height) { - glViewport(0, 0, (GLint)width, (GLint)height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0, width, height, 0, -1, 1); - glMatrixMode(GL_MODELVIEW); + setupViewport(width, height); } -void SigView::paintGL() +void SigView::paintEvent(QPaintEvent *event) { - glClear(GL_COLOR_BUFFER_BIT); + int offset; - QRect rect(0, 0, width(), SignalHeight); const vector< shared_ptr > &sigs = _session.get_signals(); + + // Prepare for OpenGL rendering + makeCurrent(); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + + setupViewport(width(), height()); + + qglClearColor(Qt::white); + glClear(GL_COLOR_BUFFER_BIT); + + // Plot the signal + offset = 0; + BOOST_FOREACH(const shared_ptr s, sigs) + { + assert(s); + + const QRect signal_rect(LabelMarginWidth, offset, + width() - LabelMarginWidth, SignalHeight); + + s->paint(*this, signal_rect, _scale, _offset); + + offset += SignalHeight; + } + + // Prepare for QPainter rendering + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + + // Paint the label + offset = 0; BOOST_FOREACH(const shared_ptr s, sigs) { assert(s); - s->paint(*this, rect, _scale, _offset); - rect.translate(0, SignalHeight); + + const QRect label_rect(0, offset, + LabelMarginWidth, SignalHeight); + s->paint_label(painter, label_rect); + + offset += SignalHeight; } + + painter.end(); } void SigView::dataUpdated() @@ -113,6 +143,14 @@ void SigView::mouseReleaseEvent(QMouseEvent *event) _offset = cursor_offset - _scale * (double)event->x(); - updateGL(); + update(); } +void SigView::setupViewport(int width, int height) +{ + glViewport(0, 0, (GLint)width, (GLint)height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0, width, height, 0, -1, 1); + glMatrixMode(GL_MODELVIEW); +}