/**
-* Name: defs.h
-* Purpose: Declarations/definitions common to all wx source files
-* Author: Julian Smart and others
+* Name: defs.h
+* Purpose: Declarations/definitions common to all wx source files
+* Author: Julian Smart and others
* Modified by: Ryan Norton (Converted to C)
-* Created: 01/02/97
-* RCS-ID: $Id$
-* Copyright: (c)
-* Licence: wxWindows licence
+* Created: 01/02/97
+* RCS-ID: $Id$
+* Copyright: (c)
+* Licence: wxWindows licence
*/
/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */
#include "wx/platform.h"
-/* RN - only double-check the environment when building in C++
+/* RN - only double-check the environment when building in C++
Shouldn't configure pass the environment to all sub-libs too? */
#ifdef __cplusplus
/* Make sure the environment is set correctly */
/* compiler defects workarounds */
/* ---------------------------------------------------------------------------- */
-#if defined(__VISUALC__) && !defined(WIN32) && !defined(__WXWINCE__)
- /* VC1.5 does not have LPTSTR type */
-#define LPTSTR LPSTR
-#define LPCTSTR LPCSTR
-#elif defined(__BORLANDC__) && !defined(__WIN32__)
-#ifndef LPTSTR
-#define LPTSTR LPSTR
-#endif
-#ifndef LPCTSTR
-#define LPCTSTR LPSTR
-#endif
-#endif
-
-
/*
Digital Unix C++ compiler only defines this symbol for .cxx and .hxx files,
so define it ourselves (newer versions do it for all files, though, and
/* general, but there are places where you can use them to advantage */
/* without totally breaking ports that cannot use them. If you do, then */
/* wrap it in this guard, but such cases should still be relatively rare. */
-#ifndef __WIN16__
- #define wxUSE_NESTED_CLASSES 1
-#else
- #define wxUSE_NESTED_CLASSES 0
-#endif
+#define wxUSE_NESTED_CLASSES 1
/* check for explicit keyword support */
#ifndef HAVE_EXPLICIT
#define wxEXPLICIT
#endif /* HAVE_EXPLICIT/!HAVE_EXPLICIT */
-/* check for static/const/reinterpret_cast<>() */
-#ifndef HAVE_STATIC_CAST
+/* check for static/const_cast<>() (we don't use the other ones for now) */
+#ifndef HAVE_CXX_CASTS
#if defined(__VISUALC__) && (__VISUALC__ >= 1100)
/* VC++ 6.0 and 5.0 have C++ casts (what about earlier versions?) */
#define HAVE_CXX_CASTS
/* GCC 2.95 has C++ casts, what about earlier versions? */
#define HAVE_CXX_CASTS
#endif
-#endif /* HAVE_STATIC_CAST */
+#endif /* !HAVE_CXX_CASTS */
#ifdef HAVE_CXX_CASTS
#ifndef HAVE_CONST_CAST
#define HAVE_CONST_CAST
#endif
+ #ifndef HAVE_STATIC_CAST
+ #define HAVE_STATIC_CAST
+ #endif
#endif /* HAVE_CXX_CASTS */
+#ifdef HAVE_STATIC_CAST
+ #define wx_static_cast(t, x) static_cast<t>(x)
+#else
+ #define wx_static_cast(t, x) ((t)(x))
+#endif
+
+#ifdef HAVE_CONST_CAST
+ #define wx_const_cast(t, x) const_cast<t>(x)
+#else
+ #define wx_const_cast(t, x) ((t)(x))
+#endif
+
+/* for consistency with wxStatic/DynamicCast defined in wx/object.h */
+#define wxConstCast(obj, className) wx_const_cast(className *, obj)
+
#ifndef HAVE_STD_WSTRING
#if defined(__VISUALC__) && (__VISUALC__ >= 1100)
/* VC++ 6.0 and 5.0 have std::wstring (what about earlier versions?) */
/* to ensure compatibility with 2.0, we must use long */
#define wxCoord long
#else /* !wxUSE_COMPATIBLE_COORD_TYPES */
- #ifdef __WIN16__
- /* under Win16, int is too small, so use long to allow for bigger */
- /* virtual canvases */
- typedef long wxCoord;
- #else /* !Win16 */
/* other platforms we support have at least 32bit int - quite enough */
typedef int wxCoord;
- #endif /* Win16/!Win16 */
#endif /* wxUSE_COMPATIBLE_COORD_TYPES/!wxUSE_COMPATIBLE_COORD_TYPES */
/* 32bit */
#ifdef __WINDOWS__
- #if defined(__WIN64__)
- /* you may remove this #error and try to compile the library, please */
- /* report the results to wx-dev@lists.wxwindows.org if you do! */
- #error "wxWindows hasn't been tested under Win64, continue at your own risk"
-
- /* the same definitions as for Win32 _should_ work here as only */
- /* sizeof(void *) changes, but it must be tested first */
- #endif /* __WIN64__ */
-
/* Win64 uses LLP64 model and so ints and longs have the same size as in */
/* Win32 */
#if defined(__WIN32__)
#define SIZEOF_LONG 4
#define SIZEOF_WCHAR_T 2
- #define wxSIZE_T_IS_UINT
+ /*
+ under Win64 sizeof(size_t) == 8 and so it is neither unsigned
+ int nor unsigned long!
+ */
+ #ifdef __WIN64__
+ #define SIZEOF_SIZE_T 8
+
+ #undef wxSIZE_T_IS_UINT
+ #else /* Win32 */
+ #define SIZEOF_SIZE_T 4
+
+ #define wxSIZE_T_IS_UINT
+ #endif
#undef wxSIZE_T_IS_ULONG
#ifdef __WIN64__
- #define SIZEOF_INT_P 8
+ #define SIZEOF_VOID_P 8
#else /* Win32 */
- #define SIZEOF_INT_P 4
+ #define SIZEOF_VOID_P 4
#endif /* Win64/32 */
#endif /* !defined(SIZEOF_INT) */
#else
#error "Unknown sizeof(int) value, what are you compiling for?"
#endif
#else /* !defined(SIZEOF_INT) */
- /* assume sizeof(int) == 4 -- what else can we do? */
+ /* assume default 32bit machine -- what else can we do? */
wxCOMPILE_TIME_ASSERT( sizeof(int) == 4, IntMustBeExactly4Bytes);
+ wxCOMPILE_TIME_ASSERT( sizeof(size_t) == 4, SizeTMustBeExactly4Bytes);
+ wxCOMPILE_TIME_ASSERT( sizeof(void *) == 4, PtrMustBeExactly4Bytes);
#define SIZEOF_INT 4
+ #define SIZEOF_SIZE_T 4
+ #define SIZEOF_VOID_P 4
typedef int wxInt32;
typedef unsigned int wxUint32;
typedef wxUint32 wxDword;
+/*
+ Define an integral type big enough to contain all of long, size_t and void *.
+ */
+#if SIZEOF_LONG >= SIZEOF_VOID_P && SIZEOF_LONG >= SIZEOF_SIZE_T
+ /* normal case */
+ typedef unsigned long wxUIntPtr;
+#elif SIZEOF_SIZE_T >= SIZEOF_VOID_P
+ /* Win64 case */
+ typedef size_t wxUIntPtr;
+#else
+ /*
+ This should never happen for the current architectures but if you're
+ using one where it does, please contact wx-dev@lists.wxwindows.org.
+ */
+ #error "Pointers can't be stored inside integer types."
+#endif
/* 64 bit */
#define wxLongLongSuffix l
#define wxLongLongFmtSpec _T("l")
#define wxLongLongIsLong
-#elif (defined(__VISUALC__) && defined(__WIN32__))
+#elif (defined(__VISUALC__) && defined(__WIN32__))
#define wxLongLong_t __int64
#define wxLongLongSuffix i64
#define wxLongLongFmtSpec _T("I64")
#define wxLongLong_t __int64
#define wxLongLongSuffix i64
#define wxLongLongFmtSpec _T("Ld")
-#elif (defined(__WATCOMC__) && defined(__WIN32__))
+#elif (defined(__WATCOMC__) && (defined(__WIN32__) || defined(__DOS__)))
#define wxLongLong_t __int64
#define wxLongLongSuffix i64
#define wxLongLongFmtSpec _T("Ld")
-#elif defined(__DIGITALMARS__)
+#elif defined(__DIGITALMARS__)
#define wxLongLong_t __int64
#define wxLongLongSuffix LL
#define wxLongLongFmtSpec _T("ll")
wxGROW = 0x2000,
wxEXPAND = wxGROW,
wxSHAPED = 0x4000,
- wxADJUST_MINSIZE = 0x8000,
- wxTILE = 0xc000
+ wxFIXED_MINSIZE = 0x8000,
+ wxTILE = 0xc000,
+
+ // for compatibility only, default now, don't use explicitly any more
+ wxADJUST_MINSIZE = 0x0000
};
/* border flags: the values are chosen for backwards compatibility */
/* Windows, it won't normally get the dialog navigation key events) */
#define wxWANTS_CHARS 0x00040000
-/* Make window retained (mostly Motif, I think) -- obsolete (VZ)? */
+/* Make window retained (Motif only, see src/generic/scrolwing.cpp)
+ * This is non-zero only under wxMotif, to avoid a clash with wxPOPUP_WINDOW
+ * on other platforms
+ */
+
+#ifdef __WXMOTIF__
#define wxRETAINED 0x00020000
+#else
+#define wxRETAINED 0x00000000
+#endif
#define wxBACKINGSTORE wxRETAINED
/* set this flag to create a special popup window: it will be always shown on */
#define wxFRAME_EX_CONTEXTHELP 0x00000004
#define wxDIALOG_EX_CONTEXTHELP 0x00000004
-/*
- * wxFrame/wxDialog style flags
- */
-#define wxSTAY_ON_TOP 0x8000
-#define wxICONIZE 0x4000
-#define wxMINIMIZE wxICONIZE
-#define wxMAXIMIZE 0x2000
-#define wxCLOSE_BOX 0x1000
-
-#define wxSYSTEM_MENU 0x0800
-#define wxMINIMIZE_BOX 0x0400
-#define wxMAXIMIZE_BOX 0x0200
-#define wxTINY_CAPTION_HORIZ 0x0100
-#define wxTINY_CAPTION_VERT 0x0080
-#define wxRESIZE_BORDER 0x0040
-
-#define wxDIALOG_NO_PARENT 0x0001 /* Don't make owned by apps top window */
-#define wxFRAME_NO_TASKBAR 0x0002 /* No taskbar button (MSW only) */
-#define wxFRAME_TOOL_WINDOW 0x0004 /* No taskbar button, no system menu */
-#define wxFRAME_FLOAT_ON_PARENT 0x0008 /* Always above its parent */
-#define wxFRAME_SHAPED 0x0010 /* Create a window that is able to be shaped */
-
-/* deprecated versions defined for compatibility reasons */
-#define wxRESIZE_BOX wxMAXIMIZE_BOX
-#define wxTHICK_FRAME wxRESIZE_BORDER
-
-/* obsolete styles, unused any more */
-#define wxDIALOG_MODAL 0x0020 /* free flag value 0x0020 */
-#define wxDIALOG_MODELESS 0
-#define wxNO_3D 0
-#define wxUSER_COLOURS 0
-
-
/*
* MDI parent frame style flags
* Can overlap with some of the above.
#define wxFRAME_NO_WINDOW_MENU 0x0100
-#define wxDEFAULT_FRAME_STYLE \
- (wxSYSTEM_MENU | wxRESIZE_BORDER | \
- wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxCLOSE_BOX | \
- wxCAPTION | wxCLIP_CHILDREN)
-
-#define wxDEFAULT_DIALOG_STYLE (wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX)
-
/*
* wxExtDialog style flags
*/
wxPRINT_MODE_NONE = 0,
wxPRINT_MODE_PREVIEW = 1, /* Preview in external application */
wxPRINT_MODE_FILE = 2, /* Print to file */
- wxPRINT_MODE_PRINTER = 3 /* Send to printer */
+ wxPRINT_MODE_PRINTER = 3, /* Send to printer */
+ wxPRINT_MODE_STREAM = 4 /* Send postscript data into a stream */
};
/* ---------------------------------------------------------------------------- */
#ifdef __WXMAC__
+#define WX_OPAQUE_TYPE( name ) struct wxOpaque##name
+
typedef unsigned char WXCOLORREF[6];
typedef void* WXHBITMAP;
typedef void* WXHMETAFILE;
typedef unsigned long WXDWORD;
typedef unsigned short WXWORD;
-typedef void* WXWidget;
-typedef void* WXWindow;
+
+//typedef void* WXWidget;
+//typedef void* WXWindow;
+typedef WX_OPAQUE_TYPE(ControlRef ) * WXWidget ;
+typedef WX_OPAQUE_TYPE(WindowRef) * WXWindow ;
typedef void* WXDisplay;
/* typedef WindowPtr WXHWND; */
typedef WX_NSView WXWidget; /* wxWindows BASE definition */
#endif /* __WXCOCOA__ */
-#if defined(__WXMSW__) || defined(__WXPM__)
+#ifdef __WXMSW__
/* the keywords needed for WinMain() declaration */
-#ifdef __WIN16__
-# ifdef __VISUALC__
-# define WXFAR __far
-# else
-# define WXFAR _far
-# endif
-#else /* Win32 */
-# ifndef WXFAR
+#ifndef WXFAR
# define WXFAR
-# endif
-#endif /* Win16/32 */
+#endif
-/* Stand-ins for Windows types or OS/2, to avoid #including all of windows.h or os2.h */
-typedef unsigned long WXHWND;
-typedef unsigned long WXHANDLE;
-typedef unsigned long WXHICON;
-typedef unsigned long WXHFONT;
-typedef unsigned long WXHMENU;
-typedef unsigned long WXHPEN;
-typedef unsigned long WXHBRUSH;
-typedef unsigned long WXHPALETTE;
-typedef unsigned long WXHCURSOR;
-typedef unsigned long WXHRGN;
-typedef unsigned long WXHACCEL;
+/* Stand-ins for Windows types to avoid #including all of windows.h */
+typedef void * WXHWND;
+typedef void * WXHANDLE;
+typedef void * WXHICON;
+typedef void * WXHFONT;
+typedef void * WXHMENU;
+typedef void * WXHPEN;
+typedef void * WXHBRUSH;
+typedef void * WXHPALETTE;
+typedef void * WXHCURSOR;
+typedef void * WXHRGN;
+typedef void * WXHACCEL;
typedef void WXFAR * WXHINSTANCE;
-typedef unsigned long WXHBITMAP;
-typedef unsigned long WXHIMAGELIST;
-typedef unsigned long WXHGLOBAL;
-typedef unsigned long WXHDC;
+typedef void * WXHBITMAP;
+typedef void * WXHIMAGELIST;
+typedef void * WXHGLOBAL;
+typedef void * WXHDC;
typedef unsigned int WXUINT;
typedef unsigned long WXDWORD;
typedef unsigned short WXWORD;
typedef unsigned long WXCOLORREF;
typedef void * WXRGNDATA;
typedef void * WXMSG;
-typedef unsigned long WXHCONV;
-typedef unsigned long WXHKEY;
-typedef unsigned long WXHTREEITEM;
+typedef void * WXHCONV;
+typedef void * WXHKEY;
+typedef void * WXHTREEITEM;
typedef void * WXDRAWITEMSTRUCT;
typedef void * WXMEASUREITEMSTRUCT;
typedef WXHWND WXWidget;
-#endif /* MSW or OS2 */
-
-
-#ifdef __WXMSW__
+#ifdef __WIN64__
+typedef unsigned __int64 WXWPARAM;
+typedef __int64 WXLPARAM;
+typedef __int64 WXLRESULT;
+#else
typedef unsigned int WXWPARAM;
typedef long WXLPARAM;
+typedef long WXLRESULT;
+#endif
#if !defined(__WIN32__) || defined(__GNUWIN32__) || defined(__WXMICROWIN__)
typedef int (*WXFARPROC)();
#if defined(__WXPM__) || defined(__EMX__)
+#ifdef __WXPM__
+/* Stand-ins for OS/2 types, to avoid #including all of os2.h */
+typedef unsigned long WXHWND;
+typedef unsigned long WXHANDLE;
+typedef unsigned long WXHICON;
+typedef unsigned long WXHFONT;
+typedef unsigned long WXHMENU;
+typedef unsigned long WXHPEN;
+typedef unsigned long WXHBRUSH;
+typedef unsigned long WXHPALETTE;
+typedef unsigned long WXHCURSOR;
+typedef unsigned long WXHRGN;
+typedef unsigned long WXHACCEL;
+typedef unsigned long WXHBITMAP;
+typedef unsigned long WXHDC;
+typedef unsigned int WXUINT;
+typedef unsigned long WXDWORD;
+typedef unsigned short WXWORD;
+
+typedef unsigned long WXCOLORREF;
+typedef void * WXMSG;
+typedef unsigned long WXHTREEITEM;
+
+typedef void * WXDRAWITEMSTRUCT;
+typedef void * WXMEASUREITEMSTRUCT;
+typedef void * WXLPCREATESTRUCT;
+
+typedef WXHWND WXWidget;
+#endif
#ifdef __EMX__
/* Need a well-known type for WXFARPROC
below. MPARAM is typedef'ed too late. */
/* VA 3.0 for some reason needs base data types when typedefing a proc proto??? */
typedef void* (_System *WXFARPROC)(unsigned long, unsigned long, void*, void*);
#else
-#ifdef __EMX__
+#if defined(__EMX__) && !defined(_System)
#define _System
#endif
typedef WXRESULT (_System *WXFARPROC)(WXHWND, WXMSGID, WXWPARAM, WXLPARAM);