From: Jens Steinhauser Date: Wed, 2 Sep 2015 11:37:56 +0000 (+0200) Subject: View: Do not emit superfluous signals in a loop X-Git-Tag: pulseview-0.3.0~118 X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=commitdiff_plain;h=adb3831eeae71b69bb035c9af713ea1f8623407f View: Do not emit superfluous signals in a loop --- diff --git a/pv/view/view.cpp b/pv/view/view.cpp index e00917f6..37cc9430 100644 --- a/pv/view/view.cpp +++ b/pv/view/view.cpp @@ -557,6 +557,13 @@ void View::calculate_tick_spacing() QFontMetrics m(QApplication::font()); + // Copies of the member variables with the same name, used in the calculation + // and written back afterwards, so that we don't emit signals all the time + // during the calculation. + pv::util::Timestamp tick_period = tick_period_; + pv::util::SIPrefix tick_prefix = tick_prefix_; + unsigned tick_precision = tick_precision_; + do { const double min_period = scale_ * min_width; @@ -577,19 +584,18 @@ void View::calculate_tick_spacing() (ScaleUnits[unit++] + tp_margin); } while (tp_with_margin < min_period && unit < countof(ScaleUnits)); - set_tick_period(order_decimal * ScaleUnits[unit - 1]); - set_tick_prefix(static_cast( - (order - pv::util::exponent(pv::util::SIPrefix::yocto)) / 3)); + tick_period = order_decimal * ScaleUnits[unit - 1]; + tick_prefix = static_cast( + (order - pv::util::exponent(pv::util::SIPrefix::yocto)) / 3); // Precision is the number of fractional digits required, not // taking the prefix into account (and it must never be negative) - set_tick_precision(std::max( - ceil(log10(1 / tick_period_)).convert_to(), 0)); + tick_precision = std::max(ceil(log10(1 / tick_period)).convert_to(), 0); - tick_period_width = (tick_period_ / scale_).convert_to(); + tick_period_width = (tick_period / scale_).convert_to(); const QString label_text = - format_time(max_time, tick_prefix_, time_unit_, tick_precision_); + format_time(max_time, tick_prefix, time_unit_, tick_precision); label_width = m.boundingRect(0, 0, INT_MAX, INT_MAX, Qt::AlignLeft | Qt::AlignTop, label_text).width() + @@ -597,6 +603,10 @@ void View::calculate_tick_spacing() min_width += SpacingIncrement; } while (tick_period_width < label_width); + + set_tick_period(tick_period); + set_tick_prefix(tick_prefix); + set_tick_precision(tick_precision); } void View::update_scroll()