summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
inline | side by side (from parent 1:
d001f41)
Prior to this change, due to floating point errors the loop that
calculates the tick mark positions could loop thousands of iterations
while zooming in at high time values, blocking the whole UI and leading
to distorted text in the end.
p.setPen(palette().color(foregroundRole()));
const double minor_tick_period = tick_period / MinorTickSubdivision;
p.setPen(palette().color(foregroundRole()));
const double minor_tick_period = tick_period / MinorTickSubdivision;
- const double first_major_division =
- floor(view_.offset() / tick_period).convert_to<double>();
- const double first_minor_division =
- ceil(view_.offset() / minor_tick_period).convert_to<double>();
- const double t0 = first_major_division * tick_period;
+ const pv::util::Timestamp first_major_division =
+ floor(view_.offset() / tick_period);
+ const pv::util::Timestamp first_minor_division =
+ ceil(view_.offset() / minor_tick_period);
+ const pv::util::Timestamp t0 = first_major_division * tick_period;
- int division = (int)round(first_minor_division -
- first_major_division * MinorTickSubdivision) - 1;
+ int division = (round(first_minor_division -
+ first_major_division * MinorTickSubdivision)).convert_to<int>() - 1;
const int text_height = calculate_text_height();
const int ruler_height = RulerHeight * text_height;
const int text_height = calculate_text_height();
const int ruler_height = RulerHeight * text_height;
- const double t = t0 + division * minor_tick_period;
+ const pv::util::Timestamp t = t0 + division * minor_tick_period;
x = ((t - view_.offset()) / view_.scale()).convert_to<double>();
if (division % MinorTickSubdivision == 0)
x = ((t - view_.offset()) / view_.scale()).convert_to<double>();
if (division % MinorTickSubdivision == 0)
} while (x < width());
// Draw the hover mark
} while (x < width());
// Draw the hover mark