1 /*********************************************************************** 2 created: 20/2/2004 3 author: Paul D Turner 4 5 purpose: Base include used within the system 6 This contains various lower level bits required 7 by other parts of the system. All other library 8 headers will include this file. 9 *************************************************************************/ 10 /*************************************************************************** 11 * Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team 12 * 13 * Permission is hereby granted, free of charge, to any person obtaining 14 * a copy of this software and associated documentation files (the 15 * "Software"), to deal in the Software without restriction, including 16 * without limitation the rights to use, copy, modify, merge, publish, 17 * distribute, sublicense, and/or sell copies of the Software, and to 18 * permit persons to whom the Software is furnished to do so, subject to 19 * the following conditions: 20 * 21 * The above copyright notice and this permission notice shall be 22 * included in all copies or substantial portions of the Software. 23 * 24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 27 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 28 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 29 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 30 * OTHER DEALINGS IN THE SOFTWARE. 31 ***************************************************************************/ 32 #ifndef _CEGUIBase_h_ 33 #define _CEGUIBase_h_ 34 35 // bring in configuration options 36 #include "CEGUI/Config.h" 37 38 // add CEGUI version defines 39 #include "CEGUI/Version.h" 40 41 #include <cassert> 42 #include <algorithm> 43 44 /************************************************************************* 45 Dynamic Library import / export control conditional 46 (Define CEGUIBASE_EXPORTS to export symbols, else they are imported) 47 *************************************************************************/ 48 #if (defined( __WIN32__ ) || defined( _WIN32 )) && !defined(CEGUI_STATIC) 49 # ifdef CEGUIBASE_EXPORTS 50 # define CEGUIEXPORT __declspec(dllexport) 51 # else 52 # define CEGUIEXPORT __declspec(dllimport) 53 # endif 54 # define CEGUIPRIVATE 55 #else 56 # define CEGUIEXPORT 57 # define CEGUIPRIVATE 58 #endif 59 60 61 // totally kill this warning (debug info truncated to 255 chars etc...) on <= VC6 62 #if defined(_MSC_VER) && (_MSC_VER <= 1200) 63 # pragma warning(disable : 4786) 64 #endif 65 66 67 // Detect macros for min / max and undefine (with a warning where possible) 68 #if defined(max) 69 # if defined(_MSC_VER) 70 # pragma message("Macro definition of max detected - undefining") 71 # elif defined (__GNUC__) 72 # warning ("Macro definition of max detected - undefining") 73 # endif 74 # undef max 75 #endif 76 #if defined(min) 77 # if defined(_MSC_VER) 78 # pragma message("Macro definition of min detected - undefining") 79 # elif defined (__GNUC__) 80 # warning ("Macro definition of min detected - undefining") 81 # endif 82 # undef min 83 #endif 84 85 86 // include this to see if it defines _STLPORT_VERION 87 # include <string> 88 89 // fix to undefine _STLP_DEBUG if STLport is not actually being used 90 // (resolves some unresolved externals concerning boost) 91 #if defined(_STLP_DEBUG) && defined(_MSC_VER) && (_MSC_VER >= 1200) 92 # if !defined(_STLPORT_VERSION) 93 # undef _STLP_DEBUG 94 # endif 95 #endif 96 97 // The following defines macros used within CEGUI for std::min/std::max 98 // usage, and is done as a compatibility measure for VC6 with native STL. 99 #if defined(_MSC_VER) && (_MSC_VER <= 1200) && !defined(_STLPORT_VERSION) 100 # define ceguimin std::_cpp_min 101 # define ceguimax std::_cpp_max 102 #else 103 # define ceguimin std::min 104 # define ceguimax std::max 105 #endif 106 107 // CEGUI's Exception macros 108 // This provides a mechanism to override how exception handling is used. Note 109 // that in general this facility _should not be used_. Attempts to use this 110 // to disable exceptions to 'make things easier' are doomed to failure. CEGUI 111 // becomes less robust without exceptions (because they are used internally by 112 // CEGUI). In addition, overriding the exception mechanism will also cause 113 // memory leaks in various places. This is your only warning about such things, 114 // if you decide to continue anyway you hereby waive any right to complain :-p 115 #ifndef CEGUI_TRY 116 # define CEGUI_TRY try 117 #endif 118 #ifndef CEGUI_CATCH 119 # define CEGUI_CATCH(e) catch (e) 120 #endif 121 #ifndef CEGUI_THROW 122 # define CEGUI_THROW(e) throw e 123 #endif 124 #ifndef CEGUI_RETHROW 125 # define CEGUI_RETHROW throw 126 #endif 127 128 // CEGUI_FUNCTION_NAME - CEGUI::String containing current function name 129 // in the best form we can get it 130 #if defined(_MSC_VER) 131 # define CEGUI_FUNCTION_NAME CEGUI::String(__FUNCSIG__) 132 #elif defined(__GNUC__) 133 # define CEGUI_FUNCTION_NAME CEGUI::String(__PRETTY_FUNCTION__) 134 #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 135 # define CEGUI_FUNCTION_NAME CEGUI::String(__func__) 136 #else 137 # define CEGUI_FUNCTION_NAME CEGUI::String("[Function name unavailable]") 138 #endif 139 140 //! Prevent an "unused parameter/variable" warning. 141 #define CEGUI_UNUSED(var) (static_cast<void>(var)) 142 143 /************************************************************************* 144 Documentation for the CEGUI namespace itself 145 *************************************************************************/ 146 /*! 147 \brief 148 Main namespace for Crazy Eddie's GUI Library 149 150 The CEGUI namespace contains all the classes and other items that comprise the core 151 of Crazy Eddie's GUI system. 152 */ 153 namespace CEGUI 154 { 155 156 /************************************************************************* 157 Simplification of some 'unsigned' types 158 *************************************************************************/ 159 typedef unsigned long ulong; 160 typedef unsigned short ushort; 161 typedef unsigned int uint; 162 typedef unsigned char uchar; 163 164 typedef long long int64; 165 typedef int int32; 166 typedef short int16; 167 typedef signed char int8; 168 169 typedef unsigned long long uint64; 170 typedef unsigned int uint32; 171 typedef unsigned short uint16; 172 typedef unsigned char uint8; 173 174 175 /************************************************************************* 176 System wide constants 177 *************************************************************************/ 178 static const float DefaultNativeHorzRes = 640.0f; //!< Default native horizontal resolution (for fonts and imagesets) 179 static const float DefaultNativeVertRes = 480.0f; //!< Default native vertical resolution (for fonts and imagesets) 180 181 182 /************************************************************************* 183 Additional typedefs 184 *************************************************************************/ 185 typedef std::ostream OutStream; //!< Output stream class. 186 } // end of CEGUI namespace section 187 188 // improve readability - http://www.parashift.com/c++-faq-lite/pointers-to-members.html#faq-33.6 189 #define CEGUI_CALL_MEMBER_FN(object, ptrToMember) ((object).*(ptrToMember)) 190 191 /************************************************************************* 192 Bring in forward references to all GUI base system classes 193 *************************************************************************/ 194 #include "CEGUI/ForwardRefs.h" 195 #include "CEGUI/MemoryAllocation.h" 196 197 #endif // end of guard _CEGUIBase_h_ 198