From 23f826bdf98d9f1570248cb926e7b7f233ed44dd Mon Sep 17 00:00:00 2001 From: =?utf8?q?W=C5=82odzimierz=20Skiba?= Date: Thu, 6 Jul 2006 09:09:09 +0000 Subject: [PATCH] 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 --- include/wx/math.h | 62 +++++++++++++++++++++++++++++---------------- src/gtk/slider.cpp | 14 ++++------ src/gtk1/slider.cpp | 9 +------ src/motif/gauge.cpp | 10 +++++--- 4 files changed, 52 insertions(+), 43 deletions(-) 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 @@ -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; -- 2.47.2