From: Włodzimierz Skiba <abx@abx.art.pl>
Date: Thu, 6 Jul 2006 09:09:09 +0000 (+0000)
Subject: wxRound() workaround to avoid unexpected compile and link errors on incomplete enviro... 
X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/23f826bdf98d9f1570248cb926e7b7f233ed44dd

wxRound() workaround to avoid unexpected compile and link errors on incomplete environments (Tinderbox build fix).


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40024 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---

diff --git a/include/wx/math.h b/include/wx/math.h
index bff0683c94..e99b37a6d6 100644
--- a/include/wx/math.h
+++ b/include/wx/math.h
@@ -77,28 +77,46 @@
 #endif
 
 #ifdef __cplusplus
-#ifdef __INTELC__
-inline bool wxIsSameDouble(double x, double y)
-{
-    // VZ: this warning, given for operators==() and !=() is not wrong, as ==
-    //     shouldn't be used with doubles, but we get too many of them and
-    //     removing these operators is probably not a good idea
-    //
-    //     Maybe we should alway compare doubles up to some "epsilon" precision
-    #pragma warning(push)
-
-    // floating-point equality and inequality comparisons are unreliable
-    #pragma warning(disable: 1572)
-
-    return x == y;
-
-    #pragma warning(pop)
-}
-#else /* !__INTELC__ */
-inline bool wxIsSameDouble(double x, double y) { return x == y; }
-#endif /* __INTELC__/!__INTELC__ */
-
-inline bool wxIsNullDouble(double x) { return wxIsSameDouble(x, 0.); }
+
+    #ifdef __INTELC__
+
+        inline bool wxIsSameDouble(double x, double y)
+        {
+            // VZ: this warning, given for operators==() and !=() is not wrong, as ==
+            //     shouldn't be used with doubles, but we get too many of them and
+            //     removing these operators is probably not a good idea
+            //
+            //     Maybe we should alway compare doubles up to some "epsilon" precision
+            #pragma warning(push)
+
+            // floating-point equality and inequality comparisons are unreliable
+            #pragma warning(disable: 1572)
+
+            return x == y;
+
+            #pragma warning(pop)
+        }
+
+    #else /* !__INTELC__ */
+
+        inline bool wxIsSameDouble(double x, double y) { return x == y; }
+
+    #endif /* __INTELC__/!__INTELC__ */
+
+    inline bool wxIsNullDouble(double x) { return wxIsSameDouble(x, 0.); }
+
+    #ifdef __VMS
+        //Missing definition in OpenVMS C++ header files.
+        double round(double __x);
+    #endif
+    inline int wxRound(double x)
+    {
+        #ifdef __VMS
+            return int(round(x));
+        #else
+            return (int)(x < 0 ? x - 0.5 : x + 0.5);
+        #endif
+    }
 #endif /* __cplusplus */
 
 
diff --git a/src/gtk/slider.cpp b/src/gtk/slider.cpp
index 3eaaba17d7..0eeb6b696e 100644
--- a/src/gtk/slider.cpp
+++ b/src/gtk/slider.cpp
@@ -12,15 +12,11 @@
 
 #if wxUSE_SLIDER
 
-#ifdef __VMS
-   //Missing definition in OpenVMS C++ header files.
-   double round(double __x);
-#endif
-
 #include "wx/slider.h"
 
 #ifndef WX_PRECOMP
     #include "wx/utils.h"
+    #include "wx/math.h"
 #endif
 
 #include "wx/gtk/private.h"
@@ -134,7 +130,7 @@ gtk_value_changed(GtkRange* range, wxSlider* win)
     if (g_blockEventsOnDrag) return;
 
     GtkAdjustment* adj = range->adjustment;
-    const int pos = int(round(adj->value));
+    const int pos = wxRound(adj->value);
     const double oldPos = win->m_pos;
     win->m_pos = adj->value;
     if (win->m_blockScrollEvent)
@@ -183,7 +179,7 @@ gtk_value_changed(GtkRange* range, wxSlider* win)
     win->m_scrollEventType = GTK_SCROLL_NONE;
 
     // If integral position has changed
-    if (int(round(oldPos)) != pos)
+    if (wxRound(oldPos) != pos)
     {
         wxCHECK_RET(eventType != wxEVT_NULL, _T("Unknown slider scroll event type"));
         ProcessScrollEvent(win, eventType);
@@ -270,7 +266,7 @@ extern "C" {
 static gchar* gtk_format_value(GtkScale*, double value, void*)
 {
     // Format value as nearest integer
-    return g_strdup_printf("%d", int(round(value)));
+    return g_strdup_printf("%d", wxRound(value));
 }
 }
 
@@ -340,7 +336,7 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id,
 
 int wxSlider::GetValue() const
 {
-    return int(round(m_pos));
+    return wxRound(m_pos);
 }
 
 void wxSlider::SetValue( int value )
diff --git a/src/gtk1/slider.cpp b/src/gtk1/slider.cpp
index ddeb7570c7..e0070f21ed 100644
--- a/src/gtk1/slider.cpp
+++ b/src/gtk1/slider.cpp
@@ -44,13 +44,6 @@ static inline bool AreSameAdjustValues(double x, double y)
     return fabs(x - y) < 0.02;
 }
 
-static inline int AdjustValueToInt(double x)
-{
-    // we want to round to the nearest integer, i.e. 0.9 is rounded to 1 and
-    // -0.9 is rounded to -1
-    return (int)(x < 0 ? x - 0.5 : x + 0.5);
-}
-
 // process a scroll event
 static void
 ProcessScrollEvent(wxSlider *win, wxEventType evtType, double dvalue)
@@ -209,7 +202,7 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id,
 
 int wxSlider::GetValue() const
 {
-    return AdjustValueToInt(m_adjust->value);
+    return wxRound(m_adjust->value);
 }
 
 void wxSlider::SetValue( int value )
diff --git a/src/motif/gauge.cpp b/src/motif/gauge.cpp
index dbb5a2495e..c809994fbc 100644
--- a/src/motif/gauge.cpp
+++ b/src/motif/gauge.cpp
@@ -22,7 +22,11 @@
 #undef XtClass
 #endif
 
-# include "wx/gauge.h"
+#include "wx/gauge.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/math.h"
+#endif
 
 #ifdef __OS2__
 #include <types.h>
@@ -673,8 +677,6 @@ GaugePick(Widget WXUNUSED(w), XEvent *WXUNUSED(e), String *WXUNUSED(args), Cardi
 #endif
 }
 
-#define round(x) ( (x) > 0 ? ((x) + 0.5) : -(-(x) + 0.5) )
-
 void
 GaugeDrag(Widget WXUNUSED(w), XEvent *WXUNUSED(e), String *WXUNUSED(args), Cardinal  *WXUNUSED(num_args))
 {
@@ -720,7 +722,7 @@ GaugeDrag(Widget WXUNUSED(w), XEvent *WXUNUSED(e), String *WXUNUSED(args), Cardi
 
     fvalue = (int)((float)THIS.maximum -
         (float)THIS.minimum) * (float)nsize / (float)max;
-    value = round(fvalue);
+    value = wxRound(fvalue);
 
     THIS.value = value;
     THIS.oldx = x;