/*
- * This file is part of the sigrok project.
+ * This file is part of the PulseView project.
*
* Copyright (C) 2012 Joel Holdsworth <joel@airwebreathe.org.uk>
*
#include "view.h"
#include "viewport.h"
-#include "../../sigsession.h"
-#include "../../signal.h"
+#include "../sigsession.h"
+#include "../signal.h"
#include <QMouseEvent>
namespace view {
Viewport::Viewport(View &parent) :
- QGLWidget(&parent),
+ QWidget(&parent),
_view(parent)
{
setMouseTracking(true);
- setAutoFillBackground(false);
+ setAutoFillBackground(true);
+ setBackgroundRole(QPalette::Base);
}
int Viewport::get_total_height() const
return height;
}
-void Viewport::initializeGL()
-{
-}
-
-void Viewport::resizeGL(int width, int height)
-{
- setup_viewport(width, height);
-}
-
void Viewport::paintEvent(QPaintEvent *event)
{
- int offset;
-
const vector< shared_ptr<Signal> > &sigs =
_view.session().get_signals();
- // Prepare for OpenGL rendering
- makeCurrent();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
-
- setup_viewport(width(), height());
+ QPainter p(this);
+ p.setRenderHint(QPainter::Antialiasing);
- qglClearColor(Qt::white);
- glClear(GL_COLOR_BUFFER_BIT);
+ draw_cursors_background(p);
// Plot the signal
- glEnable(GL_SCISSOR_TEST);
- glScissor(0, 0, width(), height());
- offset = -_view.v_offset();
+ int offset = -_view.v_offset();
BOOST_FOREACH(const shared_ptr<Signal> s, sigs)
{
assert(s);
const QRect signal_rect(0, offset,
width(), View::SignalHeight);
- s->paint(*this, signal_rect, _view.scale(), _view.offset());
+ s->paint(p, signal_rect, _view.scale(), _view.offset());
offset += View::SignalHeight;
}
- glDisable(GL_SCISSOR_TEST);
+ draw_cursors_foreground(p);
- // Prepare for QPainter rendering
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
-
- QPainter painter(this);
- painter.end();
+ p.end();
}
void Viewport::mousePressEvent(QMouseEvent *event)
_view.zoom(event->delta() / 120, event->x());
}
-void Viewport::setup_viewport(int width, int height)
+void Viewport::draw_cursors_background(QPainter &p)
+{
+ if(!_view.cursors_shown())
+ return;
+
+ p.setPen(Qt::NoPen);
+ p.setBrush(QBrush(View::CursorAreaColour));
+
+ const pair<Cursor, Cursor> &c = _view.cursors();
+ const float x1 = (c.first.time() - _view.offset()) / _view.scale();
+ const float x2 = (c.second.time() - _view.offset()) / _view.scale();
+ const int l = (int)max(min(x1, x2), 0.0f);
+ const int r = (int)min(max(x1, x2), (float)width());
+
+ p.drawRect(l, 0, r - l, height());
+}
+
+void Viewport::draw_cursors_foreground(QPainter &p)
{
- glViewport(0, 0, (GLint)width, (GLint)height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(0, width, height, 0, -1, 1);
- glMatrixMode(GL_MODELVIEW);
+ if(!_view.cursors_shown())
+ return;
+
+ const QRect r = rect();
+ pair<Cursor, Cursor> &cursors = _view.cursors();
+ cursors.first.paint(p, r);
+ cursors.second.paint(p, r);
}
} // namespace view