X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Fview.cpp;h=f727cc33b540b4fddc18b77f154a08051d3a78d4;hb=d1e7d82c6327c15f38d66602e65c4d3abe114df7;hp=f8b0fc4537ef71b83d0be751fbd6ddee564bd198;hpb=935cef6f47d4e0c844a0103536ddac638dc5f465;p=pulseview.git diff --git a/pv/view/view.cpp b/pv/view/view.cpp index f8b0fc4..f727cc3 100644 --- a/pv/view/view.cpp +++ b/pv/view/view.cpp @@ -148,11 +148,9 @@ void View::zoom(double steps) void View::zoom(double steps, int offset) { - const double cursor_offset = _offset + _scale * offset; const double new_scale = max(min(_scale * pow(3.0/2.0, -steps), MaxScale), MinScale); - const double new_offset = cursor_offset - new_scale * offset; - set_scale_offset(new_scale, new_offset); + set_zoom(new_scale, offset); } void View::zoom_fit() @@ -192,6 +190,39 @@ void View::zoom_fit() set_scale_offset((right_time - left_time) / w, left_time); } +void View::zoom_one_to_one() +{ + using pv::data::SignalData; + + const vector< shared_ptr > sigs( + session().get_signals()); + + // Make a set of all the visible data objects + set< shared_ptr > visible_data; + BOOST_FOREACH(const shared_ptr sig, sigs) + if (sig->enabled()) + visible_data.insert(sig->data()); + + if (visible_data.empty()) + return; + + double samplerate = 0.0; + BOOST_FOREACH(const shared_ptr d, visible_data) { + assert(d); + samplerate = max(samplerate, d->samplerate()); + } + + if (samplerate == 0.0) + return; + + assert(_viewport); + const int w = _viewport->width(); + if (w <= 0) + return; + + set_zoom(1.0 / samplerate, w / 2); +} + void View::set_scale_offset(double scale, double offset) { _scale = scale; @@ -309,6 +340,14 @@ void View::get_scroll_layout(double &length, double &offset) const offset = _offset / _scale; } +void View::set_zoom(double scale, int offset) +{ + const double cursor_offset = _offset + _scale * offset; + const double new_scale = max(min(scale, MaxScale), MinScale); + const double new_offset = cursor_offset - new_scale * offset; + set_scale_offset(new_scale, new_offset); +} + void View::update_scroll() { assert(_viewport);