X-Git-Url: http://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fview.cpp;fp=pv%2Fviews%2Ftrace%2Fview.cpp;h=33122047745048e341c155956e6f99076b73e136;hp=227fadfdb4197c334d084dd9a19edb37e4728181;hb=9a35b05d2f2e5329f1ecaddb04289d4adeea2752;hpb=d656b01007629b239b51ab34e5a0219ef4f2595a diff --git a/pv/views/trace/view.cpp b/pv/views/trace/view.cpp index 227fadfd..33122047 100644 --- a/pv/views/trace/view.cpp +++ b/pv/views/trace/view.cpp @@ -783,6 +783,26 @@ void View::zoom_fit(bool gui_state) set_scale_offset(scale.convert_to(), extents.first); } +void View::focus_on_range(uint64_t start_sample, uint64_t end_sample) +{ + assert(viewport_); + const int w = viewport_->width(); + if (w <= 0) + return; + + const double samplerate = session_.get_samplerate(); + + const uint64_t sample_delta = (end_sample - start_sample); + + // Note: We add 20% margin on the left and 5% on the right + const Timestamp delta = (sample_delta * 1.25) / samplerate; + + const Timestamp scale = max(min(delta / w, MaxScale), MinScale); + const Timestamp offset = (start_sample - sample_delta * 0.20) / samplerate; + + set_scale_offset(scale.convert_to(), offset); +} + void View::set_scale_offset(double scale, const Timestamp& offset) { // Disable sticky scrolling / always zoom to fit when acquisition runs