X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Fviewport.cpp;h=0c33fe2c4a00685976320634315c26b8ffd90185;hb=40aca27ed83559f7f79873e353f64d2c36a18fce;hp=220a10aada3adebb151df3f0970c7417f7649dea;hpb=8dbbc7f0b9ea59d0f0d62225772f8a56eee125f5;p=pulseview.git diff --git a/pv/view/viewport.cpp b/pv/view/viewport.cpp index 220a10a..0c33fe2 100644 --- a/pv/view/viewport.cpp +++ b/pv/view/viewport.cpp @@ -22,17 +22,19 @@ #include #include -#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 #include 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 > row_items(view_.begin(), view_.end()); + assert(none_of(row_items.begin(), row_items.end(), + [](const shared_ptr &r) { return !r; })); + stable_sort(row_items.begin(), row_items.end(), [](const shared_ptr &a, const shared_ptr &b) { return a->visual_v_offset() < b->visual_v_offset(); }); + const vector< shared_ptr > time_items(view_.time_items()); + assert(none_of(time_items.begin(), time_items.end(), + [](const shared_ptr &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 t : time_items) + t->paint_back(p, pp); for (const shared_ptr r : row_items) - { - assert(r); - r->paint_back(p, 0, width()); - } + r->paint_back(p, pp); + for (const shared_ptr t : time_items) + t->paint_mid(p, pp); for (const shared_ptr r : row_items) - r->paint_mid(p, 0, width()); + r->paint_mid(p, pp); for (const shared_ptr 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 t : time_items) + t->paint_fore(p, pp); p.end(); }