[Kst] extragear/graphics/kst/src/libkstmath
Eli Fidler
eli at staikos.net
Fri May 4 18:25:20 CEST 2007
SVN commit 661116 by fidler:
fix for bug 144099: Kst freezes when plotting data
Prevent an infinite loop in KstColorSequence::next()
M +21 -21 kstcolorsequence.cpp
--- trunk/extragear/graphics/kst/src/libkstmath/kstcolorsequence.cpp #661115:661116
@@ -95,16 +95,12 @@
// check we are not already using this color, but if
// we are then count the number of usages of each color
// in the palette.
+ if (_self->_ptr >= _self->_count * 2) {
+ _self->_ptr = 0;
+ }
start = _self->_ptr;
- if (start >= _self->_count * 2) {
- start = 0;
- }
- while (_self->_ptr != start) {
- if (_self->_ptr >= _self->_count * 2) {
- _self->_ptr = 0;
- }
-
+ do {
dark_factor = 100 + ( 50 * ( _self->_ptr / _self->_count ) );
color = _self->_pal->color( _self->_ptr % _self->_count).dark(dark_factor);
@@ -125,23 +121,26 @@
}
_self->_ptr++;
- }
+ if (_self->_ptr >= _self->_count * 2) {
+ _self->_ptr = 0;
+ }
+ } while (_self->_ptr != start);
// if we are already using this color then use the least used color for all the curves.
if (usage[_self->_ptr] != 0) {
+ _self->_ptr = start;
ptrMin = _self->_ptr;
- while (_self->_ptr != start) {
- if (_self->_ptr >= _self->_count * 2) {
- _self->_ptr = 0;
- }
-
+ do {
if (usage[_self->_ptr] < usage[ptrMin]) {
ptrMin = _self->_ptr;
}
_self->_ptr++;
- }
+ if (_self->_ptr >= _self->_count * 2) {
+ _self->_ptr = 0;
+ }
+ } while (_self->_ptr != start);
_self->_ptr = ptrMin;
}
@@ -171,30 +170,31 @@
QColor KstColorSequence::next(const QColor& badColor) {
QColor color;
int dark_factor;
+ int start;
if (!_self) {
sdColorSequence.setObject(_self, new KstColorSequence);
}
_self->createPalette();
- int start = _self->_ptr;
+ if (_self->_ptr >= _self->_count * 2) {
+ _self->_ptr = 0;
+ }
+ start = _self->_ptr;
// find the next color in the sequence that it not too close to the bad color.
if (badColor.isValid()) {
do {
+ dark_factor = 100 + ( 50 * ( _self->_ptr / _self->_count ) );
+ color = _self->_pal->color( _self->_ptr++ % _self->_count).dark(dark_factor);
if (_self->_ptr >= _self->_count * 2) {
_self->_ptr = 0;
}
- dark_factor = 100 + ( 50 * ( _self->_ptr / _self->_count ) );
- color = _self->_pal->color( _self->_ptr++ % _self->_count).dark(dark_factor);
} while (colorsTooClose(color, badColor) && start != _self->_ptr);
}
// if we couldn't find one then just use the next color in the sequence.
if (start == _self->_ptr) {
- if (_self->_ptr >= _self->_count * 2) {
- _self->_ptr = 0;
- }
dark_factor = 100 + ( 50 * ( _self->_ptr / _self->_count ) );
color = _self->_pal->color( _self->_ptr++ % _self->_count).dark(dark_factor);
}
More information about the Kst
mailing list