Avoiding problems with some platforms that don't implement hypot() (STR #1366)

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5349 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Matthias Melcher 2006-08-23 14:43:07 +00:00
parent 2c22cfd94a
commit da7658fa7f
2 changed files with 12 additions and 9 deletions

View File

@ -1,5 +1,7 @@
CHANGES IN FLTK 1.1.8
- Avoiding problems with some platforms that don't
implement hypot() (STR #1366)
- Fixed floating point value formatting
for Fl_Spinner (STR #1331)
- Fixed Fl_Positioner callback

View File

@ -32,11 +32,12 @@
#include <FL/fl_draw.H>
#include <FL/math.h>
#if defined(WIN32) && !defined(__CYGWIN__)
// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
// on Windows, which is supposed to be POSIX compliant...
# define hypot _hypot
#endif // WIN32 && !__CYGWIN__
// avoid problems with some platforms that don't
// implement hypot.
static double _fl_hypot(double x, double y) {
return sqrt(x*x + y*y);
}
void fl_arc(double x, double y, double r, double start, double end) {
@ -50,10 +51,10 @@ void fl_arc(double x, double y, double r, double start, double end) {
// Maximum arc length to approximate with chord with error <= 0.125
double epsilon; {
double r1 = hypot(fl_transform_dx(r,0), // Horizontal "radius"
fl_transform_dy(r,0));
double r2 = hypot(fl_transform_dx(0,r), // Vertical "radius"
fl_transform_dy(0,r));
double r1 = _fl_hypot(fl_transform_dx(r,0), // Horizontal "radius"
fl_transform_dy(r,0));
double r2 = _fl_hypot(fl_transform_dx(0,r), // Vertical "radius"
fl_transform_dy(0,r));
if (r1 > r2) r1 = r2; // r1 = minimum "radius"
if (r1 < 2.) r1 = 2.; // radius for circa 9 chords/circle