'Anonymous' reported a problem when using Fl_Value_Input. It seemed,
that contrary to the man pages, a fractional 'step' value above 1 would not create a floating point input. In fact it does, but the output was formatted wrong so that the digits after the decimal point were never rendered. I changed the Fl_Valuator::format(double v) function how I beleive it should format the output correctly, but as already stated by the original author in the source code, this is a hack that should be fixed by providing a 'precission' setting for valuators. Anyway. My fix makes sure that all digits right of the decimal point are always rendered, so that the step value will show full precision. This gives a much better behavior in respect to steps values like 2.5, 3.75, etc., but also leads to 8 digits after the decimal point for step(1.0/3.0)... . I suggest that we keep this change (hence the commit), risking that rendering of valuator text will change in a few cases (odd step() values). git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4091 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
29e022cc46
commit
2bbee87dc3
2
CHANGES
2
CHANGES
@ -1,5 +1,7 @@
|
||||
CHANGES IN FLTK 1.1.7
|
||||
|
||||
- Fl_Valuator would not format text output with decimal
|
||||
point when the step value was fractional, but above 1
|
||||
- Documentation fixes (STR #648, STR #692, STR #730, STR
|
||||
#744, STR #745)
|
||||
- fl_filename_relative() didn't compare drive letters in
|
||||
|
||||
@ -118,10 +118,13 @@ double Fl_Valuator::increment(double v, int n) {
|
||||
int Fl_Valuator::format(char* buffer) {
|
||||
double v = value();
|
||||
// MRS: THIS IS A HACK - RECOMMEND ADDING BUFFER SIZE ARGUMENT
|
||||
if (!A) return snprintf(buffer, 128, "%g", v);
|
||||
int i, X;
|
||||
double ba = B / A;
|
||||
for (X = 1, i = 0; X < ba; X *= 10) i++;
|
||||
if (!A || !B) return snprintf(buffer, 128, "%g", v);
|
||||
int i;
|
||||
double ab = A/B;
|
||||
for (i=0; i<8; i++) {
|
||||
if ((ab-floor(ab))<1e-9) break;
|
||||
ab *= 10.0;
|
||||
}
|
||||
return sprintf(buffer, "%.*f", i, v);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user