RowItem: Split appart visual and layout v offsets
[pulseview.git] / pv / view / analogsignal.cpp
index a64cf70f430dc4fd7c8d8d47432c24f593aa63ed..a8d7b3e8113d6c514e9955fc9c897a65175977a3 100644 (file)
 
 #include <extdef.h>
 
-#include <math.h>
+#include <cassert>
+#include <cmath>
 
 #include "analogsignal.h"
 #include "pv/data/analog.h"
 #include "pv/data/analogsnapshot.h"
 #include "pv/view/view.h"
 
-using boost::shared_ptr;
+#include <libsigrok/libsigrok.hpp>
+
 using std::max;
+using std::make_pair;
 using std::min;
+using std::shared_ptr;
 using std::deque;
 
+using sigrok::Channel;
+
 namespace pv {
 namespace view {
 
+const int AnalogSignal::NominalHeight = 80;
+
 const QColor AnalogSignal::SignalColours[4] = {
        QColor(0xC4, 0xA0, 0x00),       // Yellow
        QColor(0x87, 0x20, 0x7A),       // Magenta
@@ -44,13 +52,15 @@ const QColor AnalogSignal::SignalColours[4] = {
 
 const float AnalogSignal::EnvelopeThreshold = 256.0f;
 
-AnalogSignal::AnalogSignal(shared_ptr<pv::DevInst> dev_inst,
-       const sr_probe *const probe, shared_ptr<data::Analog> data) :
-       Signal(dev_inst, probe),
+AnalogSignal::AnalogSignal(
+       pv::SigSession &session,
+       shared_ptr<Channel> channel,
+       shared_ptr<data::Analog> data) :
+       Signal(session, channel),
        _data(data),
        _scale(1.0f)
 {
-       _colour = SignalColours[probe->index % countof(SignalColours)];
+       _colour = SignalColours[_channel->index() % countof(SignalColours)];
 }
 
 AnalogSignal::~AnalogSignal()
@@ -72,26 +82,34 @@ void AnalogSignal::set_scale(float scale)
        _scale = scale;
 }
 
+std::pair<int, int> AnalogSignal::v_extents() const
+{
+       return make_pair(-NominalHeight / 2, NominalHeight / 2);
+}
+
 void AnalogSignal::paint_back(QPainter &p, int left, int right)
 {
-       if (_probe->enabled)
-               paint_axis(p, get_y(), left, right);
+       if (_channel->enabled())
+               paint_axis(p, get_visual_y(), left, right);
 }
 
 void AnalogSignal::paint_mid(QPainter &p, int left, int right)
 {
        assert(_data);
        assert(right >= left);
+       assert(_owner);
+
+       const int y = get_visual_y();
 
-       assert(_view);
-       const int y = _v_offset - _view->v_offset();
+       const View *const view = _owner->view();
+       assert(view);
 
-       const double scale = _view->scale();
+       const double scale = view->scale();
        assert(scale > 0);
 
-       const double offset = _view->offset();
+       const double offset = view->offset();
 
-       if (!_probe->enabled)
+       if (!_channel->enabled())
                return;
 
        const deque< shared_ptr<pv::data::AnalogSnapshot> > &snapshots =