summaryrefslogtreecommitdiff
path: root/clutter/clutter-macros.h
blob: 777ec45edd11af720e992e0dd1fd57c403b8b6c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
/*
 * Clutter.
 *
 * An OpenGL based 'interactive canvas' library.
 *
 * Copyright (C) 2012 Intel Corporation
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef __CLUTTER_MACROS_H__
#define __CLUTTER_MACROS_H__

#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only <clutter/clutter.h> can be included directly."
#endif

#include <clutter/clutter-version.h>

/**
 * CLUTTER_FLAVOUR:
 *
 * GL Windowing system used
 *
 * Since: 0.4
 *
 * Deprecated: 1.10: The macro evaluates to "deprecated" as Clutter can be
 *   compiled with multiple windowing system backends. Use the various
 *   CLUTTER_WINDOWING_* macros to detect the windowing system that Clutter
 *   is being compiled against, and the type check macros for the
 *   #ClutterBackend for a run-time check.
 */
#define CLUTTER_FLAVOUR         "deprecated"

/**
 * CLUTTER_COGL:
 *
 * Cogl (internal GL abstraction utility library) backend. Can be "gl" or
 * "gles" currently
 *
 * Since: 0.4
 *
 * Deprecated: 1.10: The macro evaluates to "deprecated" as Cogl can be
 *   compiled against multiple GL implementations.
 */
#define CLUTTER_COGL            "deprecated"

/**
 * CLUTTER_STAGE_TYPE:
 *
 * The default GObject type for the Clutter stage.
 *
 * Since: 0.8
 *
 * Deprecated: 1.10: The macro evaluates to "deprecated" as Clutter can
 *   be compiled against multiple windowing systems. You can use the
 *   CLUTTER_WINDOWING_* macros for compile-time checks, and the type
 *   check macros for run-time checks.
 */
#define CLUTTER_STAGE_TYPE      "deprecated"

/**
 * CLUTTER_NO_FPU:
 *
 * Set to 1 if Clutter was built without FPU (i.e fixed math), 0 otherwise
 *
 * Deprecated: 0.6: This macro is no longer defined (identical code is used
 *  regardless the presence of FPU).
 */
#define CLUTTER_NO_FPU          (0)

/* some structures are meant to be opaque and still be allocated on the stack;
 * in order to avoid people poking at their internals, we use this macro to
 * ensure that users don't accidentally access a struct private members.
 *
 * we use the CLUTTER_COMPILATION define to allow us easier access, though.
 */
#ifdef CLUTTER_COMPILATION
#define CLUTTER_PRIVATE_FIELD(x)        x
#else
#define CLUTTER_PRIVATE_FIELD(x)        clutter_private_ ## x
#endif

#ifndef _CLUTTER_EXTERN
#define _CLUTTER_EXTERN extern
#endif

#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) || \
  __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4)
#define _CLUTTER_GNUC_DO_PRAGMA(x) _Pragma(G_STRINGIFY (x))
#define _CLUTTER_DEPRECATED_MACRO _CLUTTER_GNUC_DO_PRAGMA(GCC warning "Deprecated macro")
#define _CLUTTER_DEPRECATED_MACRO_FOR(f) _CLUTTER_GNUC_DO_PRAGMA(GCC warning #f)
#else
#define _CLUTTER_DEPRECATED_MACRO
#define _CLUTTER_DEPRECATED_MACRO_FOR(f)
#endif

/* these macros are used to mark deprecated functions, and thus have to be
 * exposed in a public header.
 *
 * do *not* use them in other libraries depending on Clutter: use G_DEPRECATED
 * and G_DEPRECATED_FOR, or use your own wrappers around them.
 */
#ifdef CLUTTER_DISABLE_DEPRECATION_WARNINGS
#define CLUTTER_DEPRECATED _CLUTTER_EXTERN
#define CLUTTER_DEPRECATED_FOR(f) _CLUTTER_EXTERN
#define CLUTTER_UNAVAILABLE(maj,min) _CLUTTER_EXTERN
#define CLUTTER_DEPRECATED_MACRO
#define CLUTTER_DEPRECATED_MACRO_FOR(f)
#else
#define CLUTTER_DEPRECATED G_DEPRECATED _CLUTTER_EXTERN
#define CLUTTER_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) _CLUTTER_EXTERN
#define CLUTTER_UNAVAILABLE(maj,min) G_UNAVAILABLE(maj,min) _CLUTTER_EXTERN
#define CLUTTER_DEPRECATED_MACRO _CLUTTER_DEPRECATED_MACRO
#define CLUTTER_DEPRECATED_MACRO_FOR(f) _CLUTTER_DEPRECATED_MACRO_FOR(f)
#endif

#define CLUTTER_AVAILABLE_IN_ALL _CLUTTER_EXTERN

/**
 * CLUTTER_VERSION_MIN_REQUIRED:
 *
 * A macro that should be defined by the user prior to including the
 * clutter.h header.
 *
 * The definition should be one of the predefined Clutter version macros,
 * such as: %CLUTTER_VERSION_1_0, %CLUTTER_VERSION_1_2, ...
 *
 * This macro defines the lower bound for the Clutter API to be used.
 *
 * If a function has been deprecated in a newer version of Clutter, it
 * is possible to use this symbol to avoid the compiler warnings without
 * disabling warnings for every deprecated function.
 *
 * Since: 1.10
 */
#ifndef CLUTTER_VERSION_MIN_REQUIRED
# define CLUTTER_VERSION_MIN_REQUIRED   (CLUTTER_VERSION_CUR_STABLE)
#endif

/**
 * CLUTTER_VERSION_MAX_ALLOWED:
 *
 * A macro that should be define by the user prior to including the
 * clutter.h header.
 *
 * The definition should be one of the predefined Clutter version macros,
 * such as: %CLUTTER_VERSION_1_0, %CLUTTER_VERSION_1_2, ...
 *
 * This macro defines the upper bound for the Clutter API to be used.
 *
 * If a function has been introduced in a newer version of Clutter, it
 * is possible to use this symbol to get compiler warnings when trying
 * to use that function.
 *
 * Since: 1.10
 */
#ifndef CLUTTER_VERSION_MAX_ALLOWED
# if CLUTTER_VERSION_MIN_REQUIRED > CLUTTER_VERSION_PREV_STABLE
#  define CLUTTER_VERSION_MAX_ALLOWED   CLUTTER_VERSION_MIN_REQUIRED
# else
#  define CLUTTER_VERSION_MAX_ALLOWED   CLUTTER_VERSION_CUR_STABLE
# endif
#endif

/* sanity checks */
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_MIN_REQUIRED
# error "CLUTTER_VERSION_MAX_ALLOWED must be >= CLUTTER_VERSION_MIN_REQUIRED"
#endif
#if CLUTTER_VERSION_MIN_REQUIRED < CLUTTER_VERSION_1_0
# error "CLUTTER_VERSION_MIN_REQUIRED must be >= CLUTTER_VERSION_1_0"
#endif

/* XXX: Every new stable minor release should add a set of macros here */

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_0
# define CLUTTER_DEPRECATED_IN_1_0              CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_0_FOR(f)       CLUTTER_DEPRECATED_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_0              _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_0_FOR(f)       _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_0
# define CLUTTER_AVAILABLE_IN_1_0               CLUTTER_UNAVAILABLE(1, 0)
#else
# define CLUTTER_AVAILABLE_IN_1_0               _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_2
# define CLUTTER_DEPRECATED_IN_1_2              CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_2_FOR(f)       CLUTTER_DEPRECATED_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_2              _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_2_FOR(f)       _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_2
# define CLUTTER_AVAILABLE_IN_1_2               CLUTTER_UNAVAILABLE(1, 2)
#else
# define CLUTTER_AVAILABLE_IN_1_2               _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_4
# define CLUTTER_DEPRECATED_IN_1_4              CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_4_FOR(f)       CLUTTER_DEPRECATED_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_4              _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_4_FOR(f)       _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_4
# define CLUTTER_AVAILABLE_IN_1_4               CLUTTER_UNAVAILABLE(1, 4)
#else
# define CLUTTER_AVAILABLE_IN_1_4               _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_6
# define CLUTTER_DEPRECATED_IN_1_6              CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_6_FOR(f)       CLUTTER_DEPRECATED_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_6              _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_6_FOR(f)       _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_6
# define CLUTTER_AVAILABLE_IN_1_6               CLUTTER_UNAVAILABLE(1, 6)
#else
# define CLUTTER_AVAILABLE_IN_1_6               _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_8
# define CLUTTER_DEPRECATED_IN_1_8              CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_8_FOR(f)       CLUTTER_DEPRECATED_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_8              _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_8_FOR(f)       _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_8
# define CLUTTER_AVAILABLE_IN_1_8               CLUTTER_UNAVAILABLE(1, 8)
#else
# define CLUTTER_AVAILABLE_IN_1_8               _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_10
# define CLUTTER_DEPRECATED_IN_1_10             CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_10_FOR(f)      CLUTTER_DEPRECATED_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_10             _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_10_FOR(f)      _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_10
# define CLUTTER_AVAILABLE_IN_1_10              CLUTTER_UNAVAILABLE(1, 10)
#else
# define CLUTTER_AVAILABLE_IN_1_10              _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_12
# define CLUTTER_DEPRECATED_IN_1_12             CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_12_FOR(f)      CLUTTER_DEPRECATED_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_12             _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_12_FOR(f)      _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_12
# define CLUTTER_AVAILABLE_IN_1_12              CLUTTER_UNAVAILABLE(1, 12)
#else
# define CLUTTER_AVAILABLE_IN_1_12              _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_14
# define CLUTTER_DEPRECATED_IN_1_14             CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_14_FOR(f)      CLUTTER_DEPRECATED_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_14             _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_14_FOR(f)      _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_14
# define CLUTTER_AVAILABLE_IN_1_14              CLUTTER_UNAVAILABLE(1, 14)
#else
# define CLUTTER_AVAILABLE_IN_1_14              _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_16
# define CLUTTER_DEPRECATED_IN_1_16             CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_16_FOR(f)      CLUTTER_DEPRECATED_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_16             _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_16_FOR(f)      _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_16
# define CLUTTER_AVAILABLE_IN_1_16              CLUTTER_UNAVAILABLE(1, 16)
#else
# define CLUTTER_AVAILABLE_IN_1_16              _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_18
# define CLUTTER_DEPRECATED_IN_1_18             CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_18_FOR(f)      CLUTTER_DEPRECATED_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_18             _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_18_FOR(f)      _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_18
# define CLUTTER_AVAILABLE_IN_1_18              CLUTTER_UNAVAILABLE(1, 18)
#else
# define CLUTTER_AVAILABLE_IN_1_18              _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_20
# define CLUTTER_DEPRECATED_IN_1_20             CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_20_FOR(f)      CLUTTER_DEPRECATED_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_20             _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_20_FOR(f)      _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_20
# define CLUTTER_AVAILABLE_IN_1_20              CLUTTER_UNAVAILABLE(1, 20)
#else
# define CLUTTER_AVAILABLE_IN_1_20              _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_22
# define CLUTTER_DEPRECATED_IN_1_22             CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_22_FOR(f)      CLUTTER_DEPRECATED_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_22             _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_22_FOR(f)      _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_22
# define CLUTTER_AVAILABLE_IN_1_22              CLUTTER_UNAVAILABLE(1, 22)
#else
# define CLUTTER_AVAILABLE_IN_1_22              _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_24
# define CLUTTER_DEPRECATED_IN_1_24             CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_24_FOR(f)      CLUTTER_DEPRECATED_FOR(f)
# define CLUTTER_MACRO_DEPRECATED_IN_1_24       CLUTTER_DEPRECATED_MACRO
# define CLUTTER_MACRO_DEPRECATED_IN_1_24_FOR(f) CLUTTER_DEPRECATED_MACRO_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_24             _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_24_FOR(f)      _CLUTTER_EXTERN
# define CLUTTER_MACRO_DEPRECATED_IN_1_24
# define CLUTTER_MACRO_DEPRECATED_IN_1_24_FOR(f)
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_24
# define CLUTTER_AVAILABLE_IN_1_24              CLUTTER_UNAVAILABLE(1, 24)
#else
# define CLUTTER_AVAILABLE_IN_1_24              _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_26
# define CLUTTER_DEPRECATED_IN_1_26             CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_26_FOR(f)      CLUTTER_DEPRECATED_FOR(f)
# define CLUTTER_MACRO_DEPRECATED_IN_1_26       CLUTTER_DEPRECATED_MACRO
# define CLUTTER_MACRO_DEPRECATED_IN_1_26_FOR(f) CLUTTER_DEPRECATED_MACRO_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_26             _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_26_FOR(f)      _CLUTTER_EXTERN
# define CLUTTER_MACRO_DEPRECATED_IN_1_26
# define CLUTTER_MACRO_DEPRECATED_IN_1_26_FOR(f)
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_26
# define CLUTTER_AVAILABLE_IN_1_26              CLUTTER_UNAVAILABLE(1, 26)
#else
# define CLUTTER_AVAILABLE_IN_1_26              _CLUTTER_EXTERN
#endif

#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_28
# define CLUTTER_DEPRECATED_IN_1_28             CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_28_FOR(f)      CLUTTER_DEPRECATED_FOR(f)
# define CLUTTER_MACRO_DEPRECATED_IN_1_28       CLUTTER_DEPRECATED_MACRO
# define CLUTTER_MACRO_DEPRECATED_IN_1_28_FOR(f) CLUTTER_DEPRECATED_MACRO_FOR(f)
#else
# define CLUTTER_DEPRECATED_IN_1_28             _CLUTTER_EXTERN
# define CLUTTER_DEPRECATED_IN_1_28_FOR(f)      _CLUTTER_EXTERN
# define CLUTTER_MACRO_DEPRECATED_IN_1_28
# define CLUTTER_MACRO_DEPRECATED_IN_1_28_FOR(f)
#endif

#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_28
# define CLUTTER_AVAILABLE_IN_1_28              CLUTTER_UNAVAILABLE(1, 28)
#else
# define CLUTTER_AVAILABLE_IN_1_28              _CLUTTER_EXTERN
#endif

#endif /* __CLUTTER_MACROS_H__ */