Fix overflow in Fl_Valuator::precision(int) to 0...9 (STR #3280).

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@11315 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Albrecht Schlosser 2016-03-08 13:40:18 +00:00
parent 337e115c54
commit 6f18ec06d5
2 changed files with 13 additions and 3 deletions

View File

@ -164,6 +164,7 @@ CHANGES IN FLTK 1.3.4 RELEASED: ??? ?? 2016
(STR #3143).
- Fixed a regression: restore the possibility to call
fl_draw_image(buf,X,Y,W,H,D,L) with negative D and/or L arguments.
- Fixed overflow in Fl_Valuator::precision(int) to 0...9 (STR #3280).
CHANGES IN FLTK 1.3.3 RELEASED: Nov 03 2014

View File

@ -51,10 +51,19 @@ void Fl_Valuator::step(double s) {
while (fabs(s-A/B) > epsilon && B<=(0x7fffffff/10)) {B *= 10; A = rint(s*B);}
}
/** Sets the step value to 1/10<SUP>digits</SUP>.*/
void Fl_Valuator::precision(int p) {
/** Sets the step value to 1.0 / 10<SUP>digits</SUP>.
Precision \p digits is limited to 0...9 to avoid internal overflow errors.
Values outside this range are clamped.
\note For negative values of \p digits the step value is set to
\p A = 1.0 and \p B = 1, i.e. 1.0/1 = 1.
*/
void Fl_Valuator::precision(int digits) {
if (digits > 9) digits = 9;
else if (digits < 0) digits = 0;
A = 1.0;
for (B = 1; p--;) B *= 10;
for (B = 1; digits--;) B *= 10;
}
/** Asks for partial redraw */
void Fl_Valuator::value_damage() {damage(FL_DAMAGE_EXPOSE);} // by default do partial-redraw