]> sigrok.org Git - pulseview.git/blobdiff - pv/view/viewport.cpp
Added ViewWidget as a common ancestor of all view widgets
[pulseview.git] / pv / view / viewport.cpp
index 220a10aada3adebb151df3f0970c7417f7649dea..0c33fe2c4a00685976320634315c26b8ffd90185 100644 (file)
 #include <cmath>
 #include <algorithm>
 
-#include "view.h"
-#include "viewport.h"
+#include "signal.hpp"
+#include "view.hpp"
+#include "viewitempaintparams.hpp"
+#include "viewport.hpp"
 
-#include "signal.h"
-#include "../sigsession.h"
+#include <pv/session.hpp>
 
 #include <QMouseEvent>
 
 using std::abs;
 using std::max;
 using std::min;
+using std::none_of;
 using std::shared_ptr;
 using std::stable_sort;
 using std::vector;
@@ -41,14 +43,12 @@ namespace pv {
 namespace view {
 
 Viewport::Viewport(View &parent) :
-       QWidget(&parent),
-       view_(parent),
+       ViewWidget(parent),
        mouse_down_valid_(false),
        pinch_zoom_active_(false)
 {
        setAttribute(Qt::WA_AcceptTouchEvents, true);
 
-       setMouseTracking(true);
        setAutoFillBackground(true);
        setBackgroundRole(QPalette::Base);
 
@@ -59,31 +59,36 @@ Viewport::Viewport(View &parent) :
 void Viewport::paintEvent(QPaintEvent*)
 {
        vector< shared_ptr<RowItem> > row_items(view_.begin(), view_.end());
+       assert(none_of(row_items.begin(), row_items.end(),
+               [](const shared_ptr<RowItem> &r) { return !r; }));
+
        stable_sort(row_items.begin(), row_items.end(),
                [](const shared_ptr<RowItem> &a, const shared_ptr<RowItem> &b) {
                        return a->visual_v_offset() < b->visual_v_offset(); });
 
+       const vector< shared_ptr<TimeItem> > time_items(view_.time_items());
+       assert(none_of(time_items.begin(), time_items.end(),
+               [](const shared_ptr<TimeItem> &t) { return !t; }));
+
        QPainter p(this);
        p.setRenderHint(QPainter::Antialiasing);
 
-       if (view_.cursors_shown())
-               view_.cursors().draw_viewport_background(p, rect());
+       const ViewItemPaintParams pp(rect(), view_.scale(), view_.offset());
 
-       // Plot the signal
+       for (const shared_ptr<TimeItem> t : time_items)
+               t->paint_back(p, pp);
        for (const shared_ptr<RowItem> r : row_items)
-       {
-               assert(r);
-               r->paint_back(p, 0, width());
-       }
+               r->paint_back(p, pp);
 
+       for (const shared_ptr<TimeItem> t : time_items)
+               t->paint_mid(p, pp);
        for (const shared_ptr<RowItem> r : row_items)
-               r->paint_mid(p, 0, width());
+               r->paint_mid(p, pp);
 
        for (const shared_ptr<RowItem> r : row_items)
-               r->paint_fore(p, 0, width());
-
-       if (view_.cursors_shown())
-               view_.cursors().draw_viewport_foreground(p, rect());
+               r->paint_fore(p, pp);
+       for (const shared_ptr<TimeItem> t : time_items)
+               t->paint_fore(p, pp);
 
        p.end();
 }