]> sigrok.org Git - pulseview.git/commitdiff
Change the number of minor ticks to be either 4 or 5
authorCenkron <redacted>
Wed, 10 Jan 2018 15:10:58 +0000 (09:10 -0600)
committerSoeren Apel <redacted>
Wed, 7 Feb 2018 18:41:56 +0000 (19:41 +0100)
Depends on the current tick interval size, in the sense of the 1, 2, 5
sequence. It was originally always 4.

pv/views/trace/ruler.cpp
pv/views/trace/ruler.hpp
pv/views/trace/view.cpp
pv/views/trace/view.hpp

index fe08cb06ceaa56cd874b77ec35a836c89cdfd323..0c2b6592cf3eb90f05f18a6ca95aadb2418acfb4 100644 (file)
@@ -37,7 +37,6 @@ namespace views {
 namespace trace {
 
 const float Ruler::RulerHeight = 2.5f; // x Text Height
-const int Ruler::MinorTickSubdivision = 4;
 
 const float Ruler::HoverArrowSize = 0.5f; // x Text Height
 
@@ -143,6 +142,7 @@ void Ruler::paintEvent(QPaintEvent*)
                        view_.ruler_offset(),
                        view_.scale(),
                        width(),
+                       view_.minor_tick_count(),
                        ffunc);
        }
 
@@ -194,17 +194,18 @@ Ruler::TickPositions Ruler::calculate_tick_positions(
        const pv::util::Timestamp& offset,
        const double scale,
        const int width,
+       const unsigned int minor_tick_count,
        function<QString(const pv::util::Timestamp&)> format_function)
 {
        TickPositions tp;
 
-       const pv::util::Timestamp minor_period = major_period / MinorTickSubdivision;
+       const pv::util::Timestamp minor_period = major_period / minor_tick_count;
        const pv::util::Timestamp first_major_division = floor(offset / major_period);
        const pv::util::Timestamp first_minor_division = ceil(offset / minor_period);
        const pv::util::Timestamp t0 = first_major_division * major_period;
 
        int division = (round(first_minor_division -
-               first_major_division * MinorTickSubdivision)).convert_to<int>() - 1;
+               first_major_division * minor_tick_count)).convert_to<int>() - 1;
 
        double x;
 
@@ -212,9 +213,9 @@ Ruler::TickPositions Ruler::calculate_tick_positions(
                pv::util::Timestamp t = t0 + division * minor_period;
                x = ((t - offset) / scale).convert_to<double>();
 
-               if (division % MinorTickSubdivision == 0) {
+               if (division % minor_tick_count == 0) {
                        // Recalculate 't' without using 'minor_period' which is a fraction
-                       t = t0 + division / MinorTickSubdivision * major_period;
+                       t = t0 + division / minor_tick_count * major_period;
                        tp.major.emplace_back(x, format_function(t));
                } else {
                        tp.minor.emplace_back(x);
index 0c614c6c8bad27360b4cca6ada99dbe91320d709..448204b2410410bb7e78c7f635c2392d49937603 100644 (file)
@@ -63,8 +63,6 @@ private:
        /// Height of the ruler in multipes of the text height
        static const float RulerHeight;
 
-       static const int MinorTickSubdivision;
-
        /// Height of the hover arrow in multiples of the text height
        static const float HoverArrowSize;
 
@@ -170,6 +168,7 @@ private:
                const pv::util::Timestamp& offset,
                const double scale,
                const int width,
+               const unsigned int minor_tick_count,
                function<QString(const pv::util::Timestamp&)> format_function);
 
 protected:
index 292933e7eefa70abb5753a0a3e66f9614292415a..9cd90be83015bafd4f709dc9d7a376418d11e56c 100644 (file)
@@ -506,6 +506,11 @@ const pv::util::Timestamp& View::tick_period() const
        return tick_period_;
 }
 
+unsigned int View::minor_tick_count() const
+{
+       return minor_tick_count_;
+}
+
 void View::set_tick_period(const pv::util::Timestamp& tick_period)
 {
        if (tick_period_ != tick_period) {
@@ -896,6 +901,7 @@ void View::calculate_tick_spacing()
                                (ScaleUnits[unit++] + tp_margin);
                } while (tp_with_margin < min_period && unit < countof(ScaleUnits));
 
+               minor_tick_count_ = (unit == 2) ? (4) : (5);
                tick_period = order_decimal * ScaleUnits[unit - 1];
                tick_prefix = static_cast<pv::util::SIPrefix>(
                        (order - pv::util::exponent(pv::util::SIPrefix::yocto)) / 3);
index 28c94e5285d1dfc6cc21c06daa618138f3723bc8..4514989765b9603d4b8809c1eaa0c3a209fc3783 100644 (file)
@@ -187,6 +187,11 @@ public:
         */
        const pv::util::Timestamp& tick_period() const;
 
+       /**
+        * Returns number of minor division ticks per time marking.
+        */
+       unsigned int minor_tick_count() const;
+
        /**
         * Returns the unit of time currently used.
         */
@@ -479,6 +484,7 @@ private:
 
        pv::util::Timestamp tick_period_;
        pv::util::SIPrefix tick_prefix_;
+       unsigned int minor_tick_count_;
        unsigned int tick_precision_;
        util::TimeUnit time_unit_;