TGUI 1.13
Loading...
Searching...
No Matches
Config.hpp
1
2//
3// TGUI - Texus' Graphical User Interface
4// Copyright (C) 2012-2026 Bruno Van de Velde (vdv_b@tgui.eu)
5//
6// This software is provided 'as-is', without any express or implied warranty.
7// In no event will the authors be held liable for any damages arising from the use of this software.
8//
9// Permission is granted to anyone to use this software for any purpose,
10// including commercial applications, and to alter it and redistribute it freely,
11// subject to the following restrictions:
12//
13// 1. The origin of this software must not be misrepresented;
14// you must not claim that you wrote the original software.
15// If you use this software in a product, an acknowledgment
16// in the product documentation would be appreciated but is not required.
17//
18// 2. Altered source versions must be plainly marked as such,
19// and must not be misrepresented as being the original software.
20//
21// 3. This notice may not be removed or altered from any source distribution.
22//
24
25#ifndef TGUI_CONFIG_HPP
26#define TGUI_CONFIG_HPP
27
28// Config.hpp is generated by CMake, it should not be edited directly.
29
30// Version of the library
31#define TGUI_VERSION_MAJOR 1
32#define TGUI_VERSION_MINOR 13
33#define TGUI_VERSION_PATCH 0
34
35// Detect the platform, to enable platform-specific code
36#if defined(__EMSCRIPTEN__)
37 #define TGUI_SYSTEM_EMSCRIPTEN // Emscripten
38#elif defined(_WIN32)
39 #define TGUI_SYSTEM_WINDOWS // Windows
40#elif defined(__APPLE__) && defined(__MACH__)
41 #include "TargetConditionals.h"
42 #if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
43 #define TGUI_SYSTEM_IOS // iOS
44 #elif TARGET_OS_MAC
45 #define TGUI_SYSTEM_MACOS // macOS
46 #endif
47#elif defined(__unix__)
48 #if defined(__ANDROID__)
49 #define TGUI_SYSTEM_ANDROID // Android
50 #else //if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__)
51 #define TGUI_SYSTEM_LINUX // Linux or BSD
52 #endif
53#endif
54
55// TGUI will link in the same way as SFML, unless TGUI_DYNAMIC or TGUI_STATIC is defined
56#if !defined(TGUI_DYNAMIC) && !defined(TGUI_STATIC)
57 #ifdef SFML_STATIC
58 #define TGUI_STATIC
59 #endif
60#endif
61
62#ifndef TGUI_STATIC
63 #ifdef TGUI_SYSTEM_WINDOWS
64 // Windows compilers need specific (and different) keywords for export and import
65 #ifdef TGUI_EXPORTS
66 #define TGUI_API __declspec(dllexport)
67 #else
68 #define TGUI_API __declspec(dllimport)
69 #endif
70
71 // For Visual C++ compilers, we also need to turn off the annoying C4251 warning
72 #ifdef _MSC_VER
73 #pragma warning(disable : 4251)
74 #endif
75 #else
76 #define TGUI_API __attribute__((__visibility__("default")))
77 #endif
78#else
79 // Static build doesn't need import/export macros
80 #define TGUI_API
81#endif
82
83// Enables code that relies on a specific backend
84#define TGUI_HAS_WINDOW_BACKEND_SFML 1
85#define TGUI_HAS_WINDOW_BACKEND_SDL 1
86#define TGUI_HAS_WINDOW_BACKEND_GLFW 1
87#define TGUI_HAS_WINDOW_BACKEND_RAYLIB 1
88
89#define TGUI_HAS_RENDERER_BACKEND_SFML_GRAPHICS 1
90#define TGUI_HAS_RENDERER_BACKEND_SDL_GPU 1
91#define TGUI_HAS_RENDERER_BACKEND_SDL_RENDERER 1
92#define TGUI_HAS_RENDERER_BACKEND_OPENGL3 1
93#define TGUI_HAS_RENDERER_BACKEND_GLES2 1
94#define TGUI_HAS_RENDERER_BACKEND_RAYLIB 1
95
96#define TGUI_HAS_FONT_BACKEND_SFML_GRAPHICS 1
97#define TGUI_HAS_FONT_BACKEND_SDL_TTF 1
98#define TGUI_HAS_FONT_BACKEND_FREETYPE 1
99#define TGUI_HAS_FONT_BACKEND_RAYLIB 1
100
101#define TGUI_HAS_BACKEND_SFML_GRAPHICS 1
102#define TGUI_HAS_BACKEND_SFML_OPENGL3 1
103#define TGUI_HAS_BACKEND_SDL_GPU 1
104#define TGUI_HAS_BACKEND_SDL_RENDERER 1
105#define TGUI_HAS_BACKEND_SDL_OPENGL3 1
106#define TGUI_HAS_BACKEND_SDL_GLES2 1
107#define TGUI_HAS_BACKEND_SDL_TTF_OPENGL3 1
108#define TGUI_HAS_BACKEND_SDL_TTF_GLES2 1
109#define TGUI_HAS_BACKEND_GLFW_OPENGL3 1
110#define TGUI_HAS_BACKEND_GLFW_GLES2 1
111#define TGUI_HAS_BACKEND_RAYLIB 1
112
113#define TGUI_USE_SDL3 1
114
115// Some window backends (SFML < 2.6 and SDL < 3) don't support diagonal mouse cursors on Linux in which case TGUI loads them directly with X11.
116// Settig this option to FALSE in CMake will remove the X11 dependency but will cause those cursors to not show up when using them.
117#define TGUI_USE_X11 0
118
119// Options to use system-wide dependencies instead of version TGUI ships in its extlibs folder.
120// This might be useful for package managers.
121#define TGUI_USE_SYSTEM_STB 0
122#define TGUI_USE_SYSTEM_GLAD 0
123#define TGUI_USE_SYSTEM_NANOSVG 0
124#define TGUI_USE_SYSTEM_AURORA 0
125
126// Define that specifies the mininmum C++ support in both the TGUI code and user code.
127// This constant can be lower than the actual C++ standard version used to compile with,
128// as long as this constant is the same when compiling TGUI and when using the TGUI libs.
129#define TGUI_COMPILED_WITH_CPP_VER 20
130
131// Include the version header when C++20 is available to use the library feature-testing macros
132#if TGUI_COMPILED_WITH_CPP_VER >= 20
133 #include <version>
134#else
135 // Try including the header even when TGUI itself wasn't compiled with C++20
136 #if __has_include(<version>)
137 #include <version>
138 #endif
139#endif
140
141// GCC and clang supported std filesystem before version 9, this is the first version where no
142// additional library has to be linked in order to use std::filesystem. This is also the
143// reason why we can't rely on __cpp_lib_filesystem for this.
144// Xcode 11 supports it on macOS 10.15 only, so we require Xcode 12 which doesn't run on macOS 10.14.
145#if (defined(__apple_build_version__) && defined(__clang_major__) && (__clang_major__ >= 12)) \
146 || (!defined(__apple_build_version__) && defined(__clang_major__) && (__clang_major__ >= 9)) \
147 || (defined(__GNUC__) && (__GNUC__ >= 9)) || (defined(_MSC_VER) && (_MSC_VER >= 1914))
148 #define TGUI_USE_STD_FILESYSTEM
149
150 // Use clock_cast to convert file time to system time when clock_cast is available
151 #if __cpp_lib_chrono >= 201907L
152 #define TGUI_USE_STD_FILESYSTEM_FILE_TIME
153 #endif
154#endif
155
156// TGUI_NEXT: Remove TGUI_EMPLACE_BACK, TGUI_IF_CONSTEXPR and TGUI_NODISCARD defines, they should no longer be used
157#define TGUI_EMPLACE_BACK(object, vector) auto&(object) = (vector).emplace_back();
158#define TGUI_IF_CONSTEXPR if constexpr
159#define TGUI_NODISCARD [[nodiscard]]
160
161#ifndef TGUI_NO_DEPRECATED_WARNINGS
162 #define TGUI_DEPRECATED(msg) [[deprecated(msg)]]
163#else
164 #define TGUI_DEPRECATED(msg)
165#endif
166
167#if defined(__GNUC__)
168 #define TGUI_IGNORE_DEPRECATED_WARNINGS_START \
169 _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
170
171 #define TGUI_IGNORE_DEPRECATED_WARNINGS_END _Pragma("GCC diagnostic pop")
172#elif defined(_MSC_VER) && (_MSC_VER >= 1927)
173 #define TGUI_IGNORE_DEPRECATED_WARNINGS_START _Pragma("warning(push)") _Pragma("warning(disable: 4996)")
174
175 #define TGUI_IGNORE_DEPRECATED_WARNINGS_END _Pragma("warning(pop)")
176#elif defined(_MSC_VER)
177 #define TGUI_IGNORE_DEPRECATED_WARNINGS_START __pragma(warning(push)) __pragma(warning(disable : 4996))
178
179 #define TGUI_IGNORE_DEPRECATED_WARNINGS_END __pragma(warning(pop))
180#endif
181
182#if !defined(NDEBUG) && !defined(TGUI_NO_RUNTIME_WARNINGS)
183 #include <iostream>
184 #define TGUI_PRINT_WARNING(msg) \
185 { \
186 std::cerr << "TGUI warning: " << msg << "\n"; \
187 }
188#else
189 #define TGUI_PRINT_WARNING(msg)
190#endif
191
192#include <cassert>
193#if !defined(NDEBUG) && !defined(TGUI_DISABLE_ASSERTS)
194 #include <exception>
195 #include <iostream>
196 #define TGUI_ASSERT(condition, msg) \
197 { \
198 if (!(condition)) \
199 { \
200 std::cerr << "TGUI assertion: " << msg << "\n"; \
201 assert(condition); \
202 std::terminate(); \
203 } \
204 }
205#else
206 #define TGUI_ASSERT(condition, msg)
207#endif
208
209// Using [=] gives a warning in C++20, but using [=, this] may not compile with older C++ versions
210#if __cplusplus > 201703L
211 #define TGUI_LAMBDA_CAPTURE_EQ_THIS [=, this]
212#else
213 #define TGUI_LAMBDA_CAPTURE_EQ_THIS [=]
214#endif
215
216#endif // TGUI_CONFIG_HPP