X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Fview.cpp;h=12c277d5434582a5e4b63ada3b85e4324154ff46;hb=dae21ebcf60d6a5d7c194736b1dc792a5cbf06a5;hp=e6be30e0680b48670a885fb0630d25209b9953b7;hpb=1e124d4b75b7b6b6a87b93a4e175d669909c2e04;p=pulseview.git diff --git a/pv/view/view.cpp b/pv/view/view.cpp index e6be30e..12c277d 100644 --- a/pv/view/view.cpp +++ b/pv/view/view.cpp @@ -84,7 +84,7 @@ namespace pv { namespace view { const double View::MaxScale = 1e9; -const double View::MinScale = 1e-15; +const double View::MinScale = 1e-12; const int View::MaxScrollValue = INT_MAX / 2; const int View::MaxViewAutoUpdateRate = 25; // No more than 25 Hz with sticky scrolling @@ -493,8 +493,8 @@ void View::set_zoom(double scale, int offset) void View::calculate_tick_spacing() { - const double SpacingIncrement = 32.0f; - const double MinValueSpacing = 32.0f; + const double SpacingIncrement = 10.0f; + const double MinValueSpacing = 40.0f; // Figure out the highest numeric value visible on a label const QSize areaSize = viewport_->size(); @@ -512,13 +512,19 @@ void View::calculate_tick_spacing() const int order = (int)floorf(log10f(min_period)); const double order_decimal = pow(10.0, order); + // Allow for a margin of error so that a scale unit of 1 can be used. + // Otherwise, for a SU of 1 the tick period will almost always be below + // the min_period by a small amount - and thus skipped in favor of 2. + // Note: margin assumes that SU[0] and SU[1] contain the smallest values + double tp_margin = (ScaleUnits[0] + ScaleUnits[1]) / 2.0; + double tp_with_margin; unsigned int unit = 0; do { - tick_period_ = order_decimal * ScaleUnits[unit++]; - } while (tick_period_ < min_period && - unit < countof(ScaleUnits)); + tp_with_margin = order_decimal * (ScaleUnits[unit++] + tp_margin); + } while (tp_with_margin < min_period && unit < countof(ScaleUnits)); + tick_period_ = order_decimal * ScaleUnits[unit - 1]; tick_prefix_ = (order - pv::util::FirstSIPrefixPower) / 3; // Precision is the number of fractional digits required, not @@ -919,14 +925,20 @@ void View::signals_changed() void View::capture_state_updated(int state) { - // Reset "always zoom to fit" when we change to the stopped state - if (always_zoom_to_fit_ && (state == Session::Stopped)) { - always_zoom_to_fit_ = false; - always_zoom_to_fit_changed(false); - } - if (state == Session::Running) time_unit_ = util::Samples; + + if (state == Session::Stopped) { + // After acquisition has stopped we need to re-calculate the ticks once + // as it's otherwise done when the user pans or zooms, which is too late + calculate_tick_spacing(); + + // Reset "always zoom to fit", the acquisition has stopped + if (always_zoom_to_fit_) { + always_zoom_to_fit_ = false; + always_zoom_to_fit_changed(false); + } + } } void View::data_updated()