X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Fdecodetrace.cpp;h=cb455c5ae3c5246f7111f5fc455032e979688002;hb=d5d1f925b5480e4f7d40a8cbc67bd653fa89bd89;hp=fb4b7c29844fa5be0cc35b23fd45db6f50d8ea45;hpb=db1bf6bf5a76726631b521b1c6b3968d14d66b30;p=pulseview.git diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp index fb4b7c2..cb455c5 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 { @@ -178,7 +181,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 +330,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 +457,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 +491,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 +509,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 +517,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 +526,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);