]> sigrok.org Git - pulseview.git/blobdiff - pv/view/view.cpp
pv::view::View::zoom_fit: clamp the scale between MaxScale and MinScale
[pulseview.git] / pv / view / view.cpp
index a437918d9f2a88f3001f35ae9eb33b854530924c..b0e97cb8e04e7df2d5ae558fe92ddcac0ed6c7f7 100644 (file)
@@ -154,9 +154,7 @@ void View::zoom(double steps)
 
 void View::zoom(double steps, int offset)
 {
-       const double new_scale = max(min(_scale * pow(3.0/2.0, -steps),
-               MaxScale), MinScale);
-       set_zoom(new_scale, offset);
+       set_zoom(_scale * pow(3.0/2.0, -steps), offset);
 }
 
 void View::zoom_fit()
@@ -171,7 +169,8 @@ void View::zoom_fit()
        if (w <= 0)
                return;
 
-       set_scale_offset(delta / w, extents.first);
+       const double scale = max(min(delta / w, MaxScale), MinScale);
+       set_scale_offset(scale, extents.first);
 }
 
 void View::zoom_one_to_one()
@@ -286,9 +285,12 @@ pair<double, double> View::get_time_extents() const
        BOOST_FOREACH(const shared_ptr<SignalData> d, visible_data)
        {
                const double start_time = d->get_start_time();
+               double samplerate = d->samplerate();
+               samplerate = (samplerate <= 0.0) ? 1.0 : samplerate;
+
                left_time = min(left_time, start_time);
                right_time = max(right_time, start_time +
-                       d->get_max_sample_count() / d->samplerate());
+                       d->get_max_sample_count() / samplerate);
        }
 
        assert(left_time < right_time);