X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=sigview.cpp;h=df1eefec2745fec15041766a4777d086d6e114eb;hp=ac7e76c8fe5185bd7fcd33bd75b7957ecb70e086;hb=7cd5faf8cfed1871195aed7a4c325342172944b3;hpb=6fa02541c670ebdd8a1985a29aba798823469f64 diff --git a/sigview.cpp b/sigview.cpp index ac7e76c8..df1eefec 100644 --- a/sigview.cpp +++ b/sigview.cpp @@ -20,7 +20,95 @@ #include "sigview.h" -SigView::SigView(QWidget *parent) : - QAbstractScrollArea(parent) +#include "sigsession.h" +#include "signal.h" + +#include + +#include + +using namespace boost; +using namespace std; + +const int SigView::SignalHeight = 50; + +SigView::SigView(SigSession &session, QWidget *parent) : + QGLWidget(parent), + _session(session), + _scale(1000000000ULL), + _offset(0) +{ + connect(&_session, SIGNAL(dataUpdated()), + this, SLOT(dataUpdated())); + + setMouseTracking(true); +} + +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); +} + +void SigView::paintGL() +{ + glClear(GL_COLOR_BUFFER_BIT); + + QRect rect(0, 0, width(), SignalHeight); + const vector< shared_ptr > &sigs = + _session.get_signals(); + BOOST_FOREACH(const shared_ptr s, sigs) + { + assert(s); + s->paint(*this, rect, _scale, _offset); + rect.translate(0, SignalHeight); + } +} + +void SigView::dataUpdated() +{ + update(); +} + +void SigView::mouseMoveEvent(QMouseEvent *event) +{ + assert(event); +} + +void SigView::mousePressEvent(QMouseEvent *event) +{ + assert(event); +} + +void SigView::mouseReleaseEvent(QMouseEvent *event) { + assert(event); + + switch(event->button()) + { + case Qt::LeftButton: + _scale = (_scale * 2) / 3; + break; + + case Qt::RightButton: + _scale = (_scale * 3) / 2; + break; + } + + updateGL(); } +