X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Fview.cpp;h=032546dba034eda4cea63cc3f60489127cd28d9d;hb=d40f4db76fc8120fcd54ace8c6fce63387e025ca;hp=0844b6a47e6fd13c16d34ba85eddfc7850ec3974;hpb=ac98198803da204ae26da8592c6e81a912b4a1af;p=pulseview.git diff --git a/pv/view/view.cpp b/pv/view/view.cpp index 0844b6a..032546d 100644 --- a/pv/view/view.cpp +++ b/pv/view/view.cpp @@ -104,6 +104,7 @@ View::View(Session &session, QWidget *parent) : always_zoom_to_fit_(false), tick_period_(0.0), tick_prefix_(0), + tick_precision_(0), time_unit_(util::Time), show_cursors_(false), cursors_(new CursorPair(*this)), @@ -236,6 +237,11 @@ unsigned int View::tick_prefix() const return tick_prefix_; } +unsigned int View::tick_precision() const +{ + return tick_precision_; +} + double View::tick_period() const { return tick_period_; @@ -490,7 +496,8 @@ void View::calculate_tick_spacing() const double SpacingIncrement = 32.0f; const double MinValueSpacing = 32.0f; - double min_width = SpacingIncrement, typical_width; + double min_width = SpacingIncrement; + double label_width, tick_period_width; QFontMetrics m(QApplication::font()); @@ -509,14 +516,22 @@ void View::calculate_tick_spacing() tick_prefix_ = (order - pv::util::FirstSIPrefixPower) / 3; - typical_width = m.boundingRect(0, 0, INT_MAX, INT_MAX, - Qt::AlignLeft | Qt::AlignTop, - format_time(offset_, tick_prefix_, time_unit_)).width() + + // Precision is the number of fractional digits required, not + // taking the prefix into account (and it must never be negative) + tick_precision_ = std::max((int)ceil(log10f(1 / tick_period_)), 0); + + tick_period_width = tick_period_ / scale_; + + const QString label_text = + format_time(offset_, tick_prefix_, time_unit_, tick_precision_); + + label_width = m.boundingRect(0, 0, INT_MAX, INT_MAX, + Qt::AlignLeft | Qt::AlignTop, label_text).width() + MinValueSpacing; min_width += SpacingIncrement; - } while (typical_width > tick_period_ / scale_); + } while (tick_period_width < label_width); } void View::update_scroll()