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
This commit is contained in:
Włodzimierz Skiba 2006-07-06 09:09:09 +00:00
parent 2ea6c1f77a
commit 23f826bdf9
4 changed files with 48 additions and 39 deletions

View File

@ -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)
#ifdef __INTELC__
return x == y;
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)
#pragma warning(pop)
}
#else /* !__INTELC__ */
inline bool wxIsSameDouble(double x, double y) { return x == y; }
#endif /* __INTELC__/!__INTELC__ */
// floating-point equality and inequality comparisons are unreliable
#pragma warning(disable: 1572)
inline bool wxIsNullDouble(double x) { return wxIsSameDouble(x, 0.); }
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 */

View File

@ -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 )

View File

@ -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 )

View File

@ -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;