X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fview%2Fdecodetrace.cpp;h=ae2ec16287b561e775b595e35a622ab17e105fbd;hb=18f7104f875a71bceeb152398b682737528a4ad7;hp=fb4b7c29844fa5be0cc35b23fd45db6f50d8ea45;hpb=db1bf6bf5a76726631b521b1c6b3968d14d66b30;p=pulseview.git diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp index fb4b7c29..ae2ec162 100644 --- a/pv/view/decodetrace.cpp +++ b/pv/view/decodetrace.cpp @@ -24,6 +24,8 @@ extern "C" { #include +#include + #include #include @@ -57,6 +59,7 @@ using std::map; using std::min; using std::pair; using std::shared_ptr; +using std::tie; using std::vector; namespace pv { @@ -147,12 +150,6 @@ const std::shared_ptr& DecodeTrace::decoder() const return _decoder_stack; } -void DecodeTrace::set_view(pv::view::View *view) -{ - assert(view); - Trace::set_view(view); -} - void DecodeTrace::paint_back(QPainter &p, int left, int right) { Trace::paint_back(p, left, right); @@ -178,7 +175,6 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right) } // Iterate through the rows - assert(_view); int y = get_y(); pair sample_range = get_sample_range(left, right); @@ -328,8 +324,9 @@ void DecodeTrace::draw_annotation(const pv::data::decode::Annotation &a, QPainter &p, QColor text_color, int h, int left, int right, int y, size_t base_colour) const { - const double samples_per_pixel = get_samples_per_pixel(); - const double pixels_offset = get_pixels_offset(); + double samples_per_pixel, pixels_offset; + tie(pixels_offset, samples_per_pixel) = + get_pixels_offset_samples_per_pixel(); const double start = a.start_sample() / samples_per_pixel - pixels_offset; @@ -454,6 +451,8 @@ void DecodeTrace::draw_unresolved_period(QPainter &p, int h, int left, using namespace pv::data; using pv::data::decode::Decoder; + double samples_per_pixel, pixels_offset; + assert(_decoder_stack); shared_ptr data; @@ -486,8 +485,8 @@ void DecodeTrace::draw_unresolved_period(QPainter &p, int h, int left, const int y = get_y(); - const double samples_per_pixel = get_samples_per_pixel(); - const double pixels_offset = get_pixels_offset(); + tie(pixels_offset, samples_per_pixel) = + get_pixels_offset_samples_per_pixel(); const double start = max(samples_decoded / samples_per_pixel - pixels_offset, left - 1.0); @@ -504,7 +503,7 @@ void DecodeTrace::draw_unresolved_period(QPainter &p, int h, int left, p.drawRect(no_decode_rect); } -double DecodeTrace::get_pixels_offset() const +pair DecodeTrace::get_pixels_offset_samples_per_pixel() const { assert(_view); assert(_decoder_stack); @@ -512,16 +511,8 @@ double DecodeTrace::get_pixels_offset() const const double scale = _view->scale(); assert(scale > 0); - return (_view->offset() - _decoder_stack->get_start_time()) / scale; -} - -double DecodeTrace::get_samples_per_pixel() const -{ - assert(_view); - assert(_decoder_stack); - - const double scale = _view->scale(); - assert(scale > 0); + const double pixels_offset = + (_view->offset() - _decoder_stack->get_start_time()) / scale; double samplerate = _decoder_stack->samplerate(); @@ -529,14 +520,15 @@ double DecodeTrace::get_samples_per_pixel() const if (samplerate == 0.0) samplerate = 1.0; - return samplerate * scale; + return make_pair(pixels_offset, samplerate * scale); } pair DecodeTrace::get_sample_range( int x_start, int x_end) const { - const double samples_per_pixel = get_samples_per_pixel(); - const double pixels_offset = get_pixels_offset(); + double samples_per_pixel, pixels_offset; + tie(pixels_offset, samples_per_pixel) = + get_pixels_offset_samples_per_pixel(); const uint64_t start = (uint64_t)max( (x_start + pixels_offset) * samples_per_pixel, 0.0); @@ -710,7 +702,7 @@ QComboBox* DecodeTrace::create_channel_selector( if (dynamic_pointer_cast(s) && s->enabled()) { - selector->addItem(s->get_name(), + selector->addItem(s->name(), qVariantFromValue((void*)s.get())); if ((*channel_iter).second == s) selector->setCurrentIndex(i + 1);