Fix crash in TimeLineWidget when setStepValues() is passed an empty list.

This commit is contained in:
sa666666 2018-01-30 08:18:20 -03:30
parent eb96e1ca49
commit 1ce528ff99
1 changed files with 12 additions and 7 deletions

View File

@ -81,16 +81,21 @@ void TimeLineWidget::setMaxValue(int value)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void TimeLineWidget::setStepValues(const IntArray& steps) void TimeLineWidget::setStepValues(const IntArray& steps)
{ {
// Try to allocate as infrequently as possible
if(steps.size() > _stepValue.capacity())
_stepValue.reserve(2 * steps.size());
_stepValue.clear(); _stepValue.clear();
double scale = (_w - _labelWidth - 4) / double(steps.back()); // If no steps are defined, just use the maximum value
if(steps.size() > 0)
{
// Try to allocate as infrequently as possible
if(steps.size() > _stepValue.capacity())
_stepValue.reserve(2 * steps.size());
// Skip the very last value; we take care of it outside the end of the loop double scale = (_w - _labelWidth - 4) / double(steps.back());
for(uInt32 i = 0; i < steps.size() - 1; ++i)
_stepValue.push_back(int(steps[i] * scale)); // Skip the very last value; we take care of it outside the end of the loop
for(uInt32 i = 0; i < steps.size() - 1; ++i)
_stepValue.push_back(int(steps[i] * scale));
}
// Due to integer <-> double conversion, the last value is sometimes // Due to integer <-> double conversion, the last value is sometimes
// slightly less than the maximum value; we assign it manually to fix this // slightly less than the maximum value; we assign it manually to fix this