]> sigrok.org Git - pulseview.git/blobdiff - pv/view/viewport.cpp
DecodeTrace: Speed up annotation drawing
[pulseview.git] / pv / view / viewport.cpp
index 1b3d371748b844255e0f5ef8b29b311d8130a538..9e136664f5078b1510dbef92d57c972b61d981ba 100644 (file)
@@ -68,7 +68,7 @@ shared_ptr<ViewItem> Viewport::get_mouse_over_item(const QPoint &pt)
 
 void Viewport::item_hover(const shared_ptr<ViewItem> &item)
 {
-       if (item)
+       if (item && item->is_draggable())
                setCursor(dynamic_pointer_cast<RowItem>(item) ?
                        Qt::SizeVerCursor : Qt::SizeHorCursor);
        else
@@ -78,6 +78,7 @@ void Viewport::item_hover(const shared_ptr<ViewItem> &item)
 void Viewport::drag()
 {
        drag_offset_ = view_.offset();
+       drag_v_offset_ = view_.owner_visual_v_offset();
 }
 
 void Viewport::drag_by(const QPoint &delta)
@@ -87,6 +88,8 @@ void Viewport::drag_by(const QPoint &delta)
 
        view_.set_scale_offset(view_.scale(),
                (*drag_offset_ - delta.x() * view_.scale()));
+
+       view_.set_v_offset(-drag_v_offset_ - delta.y());
 }
 
 void Viewport::drag_release()
@@ -179,10 +182,10 @@ void Viewport::paintEvent(QPaintEvent*)
        for (const shared_ptr<RowItem> r : row_items)
                r->paint_mid(p, pp);
 
-       p.setRenderHint(QPainter::Antialiasing, false);
-
        for (const shared_ptr<RowItem> r : row_items)
                r->paint_fore(p, pp);
+
+       p.setRenderHint(QPainter::Antialiasing, false);
        for (const shared_ptr<TimeItem> t : time_items)
                t->paint_fore(p, pp);
 
@@ -203,8 +206,7 @@ void Viewport::wheelEvent(QWheelEvent *e)
 {
        assert(e);
 
-       if (e->orientation() == Qt::Vertical)
-       {
+       if (e->orientation() == Qt::Vertical) {
                if (e->modifiers() & Qt::ControlModifier) {
                        // Vertical scrolling with the control key pressed
                        // is intrepretted as vertical scrolling
@@ -214,9 +216,7 @@ void Viewport::wheelEvent(QWheelEvent *e)
                        // Vertical scrolling is interpreted as zooming in/out
                        view_.zoom(e->delta() / 120, e->x());
                }
-       }
-       else if (e->orientation() == Qt::Horizontal)
-       {
+       } else if (e->orientation() == Qt::Horizontal) {
                // Horizontal scrolling is interpreted as moving left/right
                view_.set_scale_offset(view_.scale(),
                        e->delta() * view_.scale() + view_.offset());