]> sigrok.org Git - pulseview.git/blobdiff - pv/view/cursorheader.cpp
View: Store CursorPair in a shared_ptr
[pulseview.git] / pv / view / cursorheader.cpp
index 3fa0b0c58793410cb579bba9136b0fe0e934d841..076b2a7fc2ecd677ea12b99e16d08f7f3f1c2910 100644 (file)
@@ -30,6 +30,7 @@
 #include <pv/widgets/popup.hpp>
 
 using std::shared_ptr;
+using std::vector;
 
 namespace pv {
 namespace view {
@@ -59,9 +60,9 @@ QSize CursorHeader::sizeHint() const
 
 void CursorHeader::clear_selection()
 {
-       CursorPair &cursors = view_.cursors();
-       cursors.first()->select(false);
-       cursors.second()->select(false);
+       const vector< shared_ptr<TimeItem> > items(view_.time_items());
+       for (auto &i : items)
+               i->select(false);
        update();
 }
 
@@ -70,17 +71,14 @@ void CursorHeader::paintEvent(QPaintEvent*)
        QPainter p(this);
        p.setRenderHint(QPainter::Antialiasing);
 
-       unsigned int prefix = pv::view::Ruler::calculate_tick_spacing(
-               p, view_.scale(), view_.offset()).second;
+       // The cursor labels are not drawn with the arrows exactly on the
+       // bottom line of the widget, because then the selection shadow
+       // would be clipped away.
+       const QRect r = rect().adjusted(0, 0, 0, -BaselineOffset);
 
        // Draw the cursors
-       if (view_.cursors_shown()) {
-               // The cursor labels are not drawn with the arrows exactly on the
-               // bottom line of the widget, because then the selection shadow
-               // would be clipped away.
-               const QRect r = rect().adjusted(0, 0, 0, -BaselineOffset);
-               view_.cursors().draw_markers(p, r, prefix);
-       }
+       if (view_.cursors_shown())
+               view_.cursors()->draw_markers(p, r);
 }
 
 void CursorHeader::mouseMoveEvent(QMouseEvent *e)
@@ -109,13 +107,13 @@ void CursorHeader::mousePressEvent(QMouseEvent *e)
                clear_selection();
 
                if (view_.cursors_shown()) {
-                       CursorPair &cursors = view_.cursors();
-                       if (cursors.first()->get_label_rect(
+                       shared_ptr<CursorPair> cursors(view_.cursors());
+                       if (cursors->first()->get_label_rect(
                                rect()).contains(e->pos()))
-                               grabbed_marker_ = cursors.first();
-                       else if (cursors.second()->get_label_rect(
+                               grabbed_marker_ = cursors->first();
+                       else if (cursors->second()->get_label_rect(
                                rect()).contains(e->pos()))
-                               grabbed_marker_ = cursors.second();
+                               grabbed_marker_ = cursors->second();
                }
 
                if (shared_ptr<TimeMarker> m = grabbed_marker_.lock())