add linux headers and SDL2 lib
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL.h |
| | | * |
| | | * Main include header for the SDL library |
| | | */ |
| | | |
| | | /** |
| | | * \mainpage Simple DirectMedia Layer (SDL) |
| | | * |
| | | * http://www.libsdl.org/ |
| | | * |
| | | * \section intro_sec Introduction |
| | | * |
| | | * This is the Simple DirectMedia Layer, a general API that provides low |
| | | * level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, |
| | | * and 2D framebuffer across multiple platforms. |
| | | * |
| | | * SDL is written in C, but works with C++ natively, and has bindings to |
| | | * several other languages, including Ada, C#, Eiffel, Erlang, Euphoria, |
| | | * Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, |
| | | * Pike, Pliant, Python, Ruby, and Smalltalk. |
| | | * |
| | | * This library is distributed under the zlib license, which can be |
| | | * found in the file "COPYING". This license allows you to use SDL |
| | | * freely for any purpose as long as you retain the copyright notice. |
| | | * |
| | | * The best way to learn how to use SDL is to check out the header files in |
| | | * the "include" subdirectory and the programs in the "test" subdirectory. |
| | | * The header files and test programs are well commented and always up to date. |
| | | * More documentation and FAQs are available online at: |
| | | * http://wiki.libsdl.org/ |
| | | * |
| | | * If you need help with the library, or just want to discuss SDL related |
| | | * issues, you can join the developers mailing list: |
| | | * http://www.libsdl.org/mailing-list.php |
| | | * |
| | | * Enjoy! |
| | | * Sam Lantinga (slouken@libsdl.org) |
| | | */ |
| | | |
| | | #ifndef _SDL_H |
| | | #define _SDL_H |
| | | |
| | | #include "SDL_main.h" |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_assert.h" |
| | | #include "SDL_atomic.h" |
| | | #include "SDL_audio.h" |
| | | #include "SDL_clipboard.h" |
| | | #include "SDL_cpuinfo.h" |
| | | #include "SDL_endian.h" |
| | | #include "SDL_error.h" |
| | | #include "SDL_events.h" |
| | | #include "SDL_joystick.h" |
| | | #include "SDL_gamecontroller.h" |
| | | #include "SDL_haptic.h" |
| | | #include "SDL_hints.h" |
| | | #include "SDL_loadso.h" |
| | | #include "SDL_log.h" |
| | | #include "SDL_messagebox.h" |
| | | #include "SDL_mutex.h" |
| | | #include "SDL_power.h" |
| | | #include "SDL_render.h" |
| | | #include "SDL_rwops.h" |
| | | #include "SDL_system.h" |
| | | #include "SDL_thread.h" |
| | | #include "SDL_timer.h" |
| | | #include "SDL_version.h" |
| | | #include "SDL_video.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* As of version 0.5, SDL is loaded dynamically into the application */ |
| | | |
| | | /** |
| | | * \name SDL_INIT_* |
| | | * |
| | | * These are the flags which may be passed to SDL_Init(). You should |
| | | * specify the subsystems which you will be using in your application. |
| | | */ |
| | | /*@{*/ |
| | | #define SDL_INIT_TIMER 0x00000001 |
| | | #define SDL_INIT_AUDIO 0x00000010 |
| | | #define SDL_INIT_VIDEO 0x00000020 |
| | | #define SDL_INIT_JOYSTICK 0x00000200 |
| | | #define SDL_INIT_HAPTIC 0x00001000 |
| | | #define SDL_INIT_GAMECONTROLLER 0x00002000 /**< turn on game controller also implicitly does JOYSTICK */ |
| | | #define SDL_INIT_NOPARACHUTE 0x00100000 /**< Don't catch fatal signals */ |
| | | #define SDL_INIT_EVERYTHING ( \ |
| | | SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | \ |
| | | SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER \ |
| | | ) |
| | | /*@}*/ |
| | | |
| | | /** |
| | | * This function initializes the subsystems specified by \c flags |
| | | * Unless the ::SDL_INIT_NOPARACHUTE flag is set, it will install cleanup |
| | | * signal handlers for some commonly ignored fatal signals (like SIGSEGV). |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); |
| | | |
| | | /** |
| | | * This function initializes specific SDL subsystems |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); |
| | | |
| | | /** |
| | | * This function cleans up specific SDL subsystems |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); |
| | | |
| | | /** |
| | | * This function returns a mask of the specified subsystems which have |
| | | * previously been initialized. |
| | | * |
| | | * If \c flags is 0, it returns a mask of all initialized subsystems. |
| | | */ |
| | | extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); |
| | | |
| | | /** |
| | | * This function cleans up all initialized subsystems. You should |
| | | * call it upon all exit conditions. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_Quit(void); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_H */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | #ifndef _SDL_assert_h |
| | | #define _SDL_assert_h |
| | | |
| | | #include "SDL_config.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | #ifndef SDL_ASSERT_LEVEL |
| | | #ifdef SDL_DEFAULT_ASSERT_LEVEL |
| | | #define SDL_ASSERT_LEVEL SDL_DEFAULT_ASSERT_LEVEL |
| | | #elif defined(_DEBUG) || defined(DEBUG) || \ |
| | | (defined(__GNUC__) && !defined(__OPTIMIZE__)) |
| | | #define SDL_ASSERT_LEVEL 2 |
| | | #else |
| | | #define SDL_ASSERT_LEVEL 1 |
| | | #endif |
| | | #endif /* SDL_ASSERT_LEVEL */ |
| | | |
| | | /* |
| | | These are macros and not first class functions so that the debugger breaks |
| | | on the assertion line and not in some random guts of SDL, and so each |
| | | assert can have unique static variables associated with it. |
| | | */ |
| | | |
| | | #if defined(_MSC_VER) |
| | | /* Don't include intrin.h here because it contains C++ code */ |
| | | extern void __cdecl __debugbreak(void); |
| | | #define SDL_TriggerBreakpoint() __debugbreak() |
| | | #elif (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) |
| | | #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) |
| | | #elif defined(HAVE_SIGNAL_H) |
| | | #include <signal.h> |
| | | #define SDL_TriggerBreakpoint() raise(SIGTRAP) |
| | | #else |
| | | /* How do we trigger breakpoints on this platform? */ |
| | | #define SDL_TriggerBreakpoint() |
| | | #endif |
| | | |
| | | #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */ |
| | | # define SDL_FUNCTION __func__ |
| | | #elif ((__GNUC__ >= 2) || defined(_MSC_VER)) |
| | | # define SDL_FUNCTION __FUNCTION__ |
| | | #else |
| | | # define SDL_FUNCTION "???" |
| | | #endif |
| | | #define SDL_FILE __FILE__ |
| | | #define SDL_LINE __LINE__ |
| | | |
| | | /* |
| | | sizeof (x) makes the compiler still parse the expression even without |
| | | assertions enabled, so the code is always checked at compile time, but |
| | | doesn't actually generate code for it, so there are no side effects or |
| | | expensive checks at run time, just the constant size of what x WOULD be, |
| | | which presumably gets optimized out as unused. |
| | | This also solves the problem of... |
| | | |
| | | int somevalue = blah(); |
| | | SDL_assert(somevalue == 1); |
| | | |
| | | ...which would cause compiles to complain that somevalue is unused if we |
| | | disable assertions. |
| | | */ |
| | | |
| | | #define SDL_disabled_assert(condition) \ |
| | | do { (void) sizeof ((condition)); } while (0) |
| | | |
| | | typedef enum |
| | | { |
| | | SDL_ASSERTION_RETRY, /**< Retry the assert immediately. */ |
| | | SDL_ASSERTION_BREAK, /**< Make the debugger trigger a breakpoint. */ |
| | | SDL_ASSERTION_ABORT, /**< Terminate the program. */ |
| | | SDL_ASSERTION_IGNORE, /**< Ignore the assert. */ |
| | | SDL_ASSERTION_ALWAYS_IGNORE /**< Ignore the assert from now on. */ |
| | | } SDL_assert_state; |
| | | |
| | | typedef struct SDL_assert_data |
| | | { |
| | | int always_ignore; |
| | | unsigned int trigger_count; |
| | | const char *condition; |
| | | const char *filename; |
| | | int linenum; |
| | | const char *function; |
| | | const struct SDL_assert_data *next; |
| | | } SDL_assert_data; |
| | | |
| | | #if (SDL_ASSERT_LEVEL > 0) |
| | | |
| | | /* Never call this directly. Use the SDL_assert* macros. */ |
| | | extern DECLSPEC SDL_assert_state SDLCALL SDL_ReportAssertion(SDL_assert_data *, |
| | | const char *, |
| | | const char *, int); |
| | | |
| | | /* the do {} while(0) avoids dangling else problems: |
| | | if (x) SDL_assert(y); else blah(); |
| | | ... without the do/while, the "else" could attach to this macro's "if". |
| | | We try to handle just the minimum we need here in a macro...the loop, |
| | | the static vars, and break points. The heavy lifting is handled in |
| | | SDL_ReportAssertion(), in SDL_assert.c. |
| | | */ |
| | | #define SDL_enabled_assert(condition) \ |
| | | do { \ |
| | | while ( !(condition) ) { \ |
| | | static struct SDL_assert_data assert_data = { \ |
| | | 0, 0, #condition, 0, 0, 0, 0 \ |
| | | }; \ |
| | | const SDL_assert_state state = SDL_ReportAssertion(&assert_data, \ |
| | | SDL_FUNCTION, \ |
| | | SDL_FILE, \ |
| | | SDL_LINE); \ |
| | | if (state == SDL_ASSERTION_RETRY) { \ |
| | | continue; /* go again. */ \ |
| | | } else if (state == SDL_ASSERTION_BREAK) { \ |
| | | SDL_TriggerBreakpoint(); \ |
| | | } \ |
| | | break; /* not retrying. */ \ |
| | | } \ |
| | | } while (0) |
| | | |
| | | #endif /* enabled assertions support code */ |
| | | |
| | | /* Enable various levels of assertions. */ |
| | | #if SDL_ASSERT_LEVEL == 0 /* assertions disabled */ |
| | | # define SDL_assert(condition) SDL_disabled_assert(condition) |
| | | # define SDL_assert_release(condition) SDL_disabled_assert(condition) |
| | | # define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) |
| | | #elif SDL_ASSERT_LEVEL == 1 /* release settings. */ |
| | | # define SDL_assert(condition) SDL_disabled_assert(condition) |
| | | # define SDL_assert_release(condition) SDL_enabled_assert(condition) |
| | | # define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) |
| | | #elif SDL_ASSERT_LEVEL == 2 /* normal settings. */ |
| | | # define SDL_assert(condition) SDL_enabled_assert(condition) |
| | | # define SDL_assert_release(condition) SDL_enabled_assert(condition) |
| | | # define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) |
| | | #elif SDL_ASSERT_LEVEL == 3 /* paranoid settings. */ |
| | | # define SDL_assert(condition) SDL_enabled_assert(condition) |
| | | # define SDL_assert_release(condition) SDL_enabled_assert(condition) |
| | | # define SDL_assert_paranoid(condition) SDL_enabled_assert(condition) |
| | | #else |
| | | # error Unknown assertion level. |
| | | #endif |
| | | |
| | | |
| | | typedef SDL_assert_state (SDLCALL *SDL_AssertionHandler)( |
| | | const SDL_assert_data* data, void* userdata); |
| | | |
| | | /** |
| | | * \brief Set an application-defined assertion handler. |
| | | * |
| | | * This allows an app to show its own assertion UI and/or force the |
| | | * response to an assertion failure. If the app doesn't provide this, SDL |
| | | * will try to do the right thing, popping up a system-specific GUI dialog, |
| | | * and probably minimizing any fullscreen windows. |
| | | * |
| | | * This callback may fire from any thread, but it runs wrapped in a mutex, so |
| | | * it will only fire from one thread at a time. |
| | | * |
| | | * Setting the callback to NULL restores SDL's original internal handler. |
| | | * |
| | | * This callback is NOT reset to SDL's internal handler upon SDL_Quit()! |
| | | * |
| | | * \return SDL_assert_state value of how to handle the assertion failure. |
| | | * |
| | | * \param handler Callback function, called when an assertion fails. |
| | | * \param userdata A pointer passed to the callback as-is. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetAssertionHandler( |
| | | SDL_AssertionHandler handler, |
| | | void *userdata); |
| | | |
| | | /** |
| | | * \brief Get a list of all assertion failures. |
| | | * |
| | | * Get all assertions triggered since last call to SDL_ResetAssertionReport(), |
| | | * or the start of the program. |
| | | * |
| | | * The proper way to examine this data looks something like this: |
| | | * |
| | | * <code> |
| | | * const SDL_assert_data *item = SDL_GetAssertionReport(); |
| | | * while (item) { |
| | | * printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n", |
| | | * item->condition, item->function, item->filename, |
| | | * item->linenum, item->trigger_count, |
| | | * item->always_ignore ? "yes" : "no"); |
| | | * item = item->next; |
| | | * } |
| | | * </code> |
| | | * |
| | | * \return List of all assertions. |
| | | * \sa SDL_ResetAssertionReport |
| | | */ |
| | | extern DECLSPEC const SDL_assert_data * SDLCALL SDL_GetAssertionReport(void); |
| | | |
| | | /** |
| | | * \brief Reset the list of all assertion failures. |
| | | * |
| | | * Reset list of all assertions triggered. |
| | | * |
| | | * \sa SDL_GetAssertionReport |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_assert_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_atomic.h |
| | | * |
| | | * Atomic operations. |
| | | * |
| | | * IMPORTANT: |
| | | * If you are not an expert in concurrent lockless programming, you should |
| | | * only be using the atomic lock and reference counting functions in this |
| | | * file. In all other cases you should be protecting your data structures |
| | | * with full mutexes. |
| | | * |
| | | * The list of "safe" functions to use are: |
| | | * SDL_AtomicLock() |
| | | * SDL_AtomicUnlock() |
| | | * SDL_AtomicIncRef() |
| | | * SDL_AtomicDecRef() |
| | | * |
| | | * Seriously, here be dragons! |
| | | * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| | | * |
| | | * You can find out a little more about lockless programming and the |
| | | * subtle issues that can arise here: |
| | | * http://msdn.microsoft.com/en-us/library/ee418650%28v=vs.85%29.aspx |
| | | * |
| | | * There's also lots of good information here: |
| | | * http://www.1024cores.net/home/lock-free-algorithms |
| | | * |
| | | * These operations may or may not actually be implemented using |
| | | * processor specific atomic operations. When possible they are |
| | | * implemented as true processor specific atomic operations. When that |
| | | * is not possible the are implemented using locks that *do* use the |
| | | * available atomic operations. |
| | | * |
| | | * All of the atomic operations that modify memory are full memory barriers. |
| | | */ |
| | | |
| | | #ifndef _SDL_atomic_h_ |
| | | #define _SDL_atomic_h_ |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_platform.h" |
| | | |
| | | #include "begin_code.h" |
| | | |
| | | /* Need to do this here because intrin.h has C++ code in it */ |
| | | /* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ |
| | | #if defined(_MSC_VER) && (_MSC_VER >= 1500) |
| | | #include <intrin.h> |
| | | #define HAVE_MSC_ATOMICS 1 |
| | | #endif |
| | | |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \name SDL AtomicLock |
| | | * |
| | | * The atomic locks are efficient spinlocks using CPU instructions, |
| | | * but are vulnerable to starvation and can spin forever if a thread |
| | | * holding a lock has been terminated. For this reason you should |
| | | * minimize the code executed inside an atomic lock and never do |
| | | * expensive things like API or system calls while holding them. |
| | | * |
| | | * The atomic locks are not safe to lock recursively. |
| | | * |
| | | * Porting Note: |
| | | * The spin lock functions and type are required and can not be |
| | | * emulated because they are used in the atomic emulation code. |
| | | */ |
| | | /*@{*/ |
| | | |
| | | typedef int SDL_SpinLock; |
| | | |
| | | /** |
| | | * \brief Try to lock a spin lock by setting it to a non-zero value. |
| | | * |
| | | * \param lock Points to the lock. |
| | | * |
| | | * \return SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already held. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_AtomicTryLock(SDL_SpinLock *lock); |
| | | |
| | | /** |
| | | * \brief Lock a spin lock by setting it to a non-zero value. |
| | | * |
| | | * \param lock Points to the lock. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_AtomicLock(SDL_SpinLock *lock); |
| | | |
| | | /** |
| | | * \brief Unlock a spin lock by setting it to 0. Always returns immediately |
| | | * |
| | | * \param lock Points to the lock. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock); |
| | | |
| | | /*@}*//*SDL AtomicLock*/ |
| | | |
| | | |
| | | /** |
| | | * The compiler barrier prevents the compiler from reordering |
| | | * reads and writes to globally visible variables across the call. |
| | | */ |
| | | #if defined(_MSC_VER) && (_MSC_VER > 1200) |
| | | void _ReadWriteBarrier(void); |
| | | #pragma intrinsic(_ReadWriteBarrier) |
| | | #define SDL_CompilerBarrier() _ReadWriteBarrier() |
| | | #elif defined(__GNUC__) |
| | | #define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory") |
| | | #else |
| | | #define SDL_CompilerBarrier() \ |
| | | { SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); } |
| | | #endif |
| | | |
| | | /* Platform specific optimized versions of the atomic functions, |
| | | * you can disable these by defining SDL_DISABLE_ATOMIC_INLINE |
| | | */ |
| | | #if defined(SDL_ATOMIC_DISABLED) && SDL_ATOMIC_DISABLED |
| | | #define SDL_DISABLE_ATOMIC_INLINE |
| | | #endif |
| | | #ifndef SDL_DISABLE_ATOMIC_INLINE |
| | | |
| | | #ifdef HAVE_MSC_ATOMICS |
| | | |
| | | #define SDL_AtomicSet(a, v) _InterlockedExchange((long*)&(a)->value, (v)) |
| | | #define SDL_AtomicAdd(a, v) _InterlockedExchangeAdd((long*)&(a)->value, (v)) |
| | | #define SDL_AtomicCAS(a, oldval, newval) (_InterlockedCompareExchange((long*)&(a)->value, (newval), (oldval)) == (oldval)) |
| | | #define SDL_AtomicSetPtr(a, v) _InterlockedExchangePointer((a), (v)) |
| | | #if _M_IX86 |
| | | #define SDL_AtomicCASPtr(a, oldval, newval) (_InterlockedCompareExchange((long*)(a), (long)(newval), (long)(oldval)) == (long)(oldval)) |
| | | #else |
| | | #define SDL_AtomicCASPtr(a, oldval, newval) (_InterlockedCompareExchangePointer((a), (newval), (oldval)) == (oldval)) |
| | | #endif |
| | | |
| | | #elif defined(__MACOSX__) |
| | | #include <libkern/OSAtomic.h> |
| | | |
| | | #define SDL_AtomicCAS(a, oldval, newval) OSAtomicCompareAndSwap32Barrier((oldval), (newval), &(a)->value) |
| | | #ifdef __LP64__ |
| | | #define SDL_AtomicCASPtr(a, oldval, newval) OSAtomicCompareAndSwap64Barrier((int64_t)(oldval), (int64_t)(newval), (int64_t*)(a)) |
| | | #else |
| | | #define SDL_AtomicCASPtr(a, oldval, newval) OSAtomicCompareAndSwap32Barrier((int32_t)(oldval), (int32_t)(newval), (int32_t*)(a)) |
| | | #endif |
| | | |
| | | #elif defined(HAVE_GCC_ATOMICS) |
| | | |
| | | #define SDL_AtomicSet(a, v) __sync_lock_test_and_set(&(a)->value, v) |
| | | #define SDL_AtomicAdd(a, v) __sync_fetch_and_add(&(a)->value, v) |
| | | #define SDL_AtomicSetPtr(a, v) __sync_lock_test_and_set(a, v) |
| | | #define SDL_AtomicCAS(a, oldval, newval) __sync_bool_compare_and_swap(&(a)->value, oldval, newval) |
| | | #define SDL_AtomicCASPtr(a, oldval, newval) __sync_bool_compare_and_swap(a, oldval, newval) |
| | | |
| | | #endif |
| | | |
| | | #endif /* !SDL_DISABLE_ATOMIC_INLINE */ |
| | | |
| | | |
| | | /** |
| | | * \brief A type representing an atomic integer value. It is a struct |
| | | * so people don't accidentally use numeric operations on it. |
| | | */ |
| | | #ifndef SDL_atomic_t_defined |
| | | typedef struct { int value; } SDL_atomic_t; |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Set an atomic variable to a new value if it is currently an old value. |
| | | * |
| | | * \return SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise. |
| | | * |
| | | * \note If you don't know what this function is for, you shouldn't use it! |
| | | */ |
| | | #ifndef SDL_AtomicCAS |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval); |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Set an atomic variable to a value. |
| | | * |
| | | * \return The previous value of the atomic variable. |
| | | */ |
| | | #ifndef SDL_AtomicSet |
| | | SDL_FORCE_INLINE int SDL_AtomicSet(SDL_atomic_t *a, int v) |
| | | { |
| | | int value; |
| | | do { |
| | | value = a->value; |
| | | } while (!SDL_AtomicCAS(a, value, v)); |
| | | return value; |
| | | } |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Get the value of an atomic variable |
| | | */ |
| | | #ifndef SDL_AtomicGet |
| | | SDL_FORCE_INLINE int SDL_AtomicGet(SDL_atomic_t *a) |
| | | { |
| | | int value = a->value; |
| | | SDL_CompilerBarrier(); |
| | | return value; |
| | | } |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Add to an atomic variable. |
| | | * |
| | | * \return The previous value of the atomic variable. |
| | | * |
| | | * \note This same style can be used for any number operation |
| | | */ |
| | | #ifndef SDL_AtomicAdd |
| | | SDL_FORCE_INLINE int SDL_AtomicAdd(SDL_atomic_t *a, int v) |
| | | { |
| | | int value; |
| | | do { |
| | | value = a->value; |
| | | } while (!SDL_AtomicCAS(a, value, (value + v))); |
| | | return value; |
| | | } |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Increment an atomic variable used as a reference count. |
| | | */ |
| | | #ifndef SDL_AtomicIncRef |
| | | #define SDL_AtomicIncRef(a) SDL_AtomicAdd(a, 1) |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Decrement an atomic variable used as a reference count. |
| | | * |
| | | * \return SDL_TRUE if the variable reached zero after decrementing, |
| | | * SDL_FALSE otherwise |
| | | */ |
| | | #ifndef SDL_AtomicDecRef |
| | | #define SDL_AtomicDecRef(a) (SDL_AtomicAdd(a, -1) == 1) |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Set a pointer to a new value if it is currently an old value. |
| | | * |
| | | * \return SDL_TRUE if the pointer was set, SDL_FALSE otherwise. |
| | | * |
| | | * \note If you don't know what this function is for, you shouldn't use it! |
| | | */ |
| | | #ifndef SDL_AtomicCASPtr |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCASPtr(void* *a, void *oldval, void *newval); |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Set a pointer to a value atomically. |
| | | * |
| | | * \return The previous value of the pointer. |
| | | */ |
| | | #ifndef SDL_AtomicSetPtr |
| | | SDL_FORCE_INLINE void* SDL_AtomicSetPtr(void* *a, void* v) |
| | | { |
| | | void* value; |
| | | do { |
| | | value = *a; |
| | | } while (!SDL_AtomicCASPtr(a, value, v)); |
| | | return value; |
| | | } |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Get the value of a pointer atomically. |
| | | */ |
| | | #ifndef SDL_AtomicGetPtr |
| | | SDL_FORCE_INLINE void* SDL_AtomicGetPtr(void* *a) |
| | | { |
| | | void* value = *a; |
| | | SDL_CompilerBarrier(); |
| | | return value; |
| | | } |
| | | #endif |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_atomic_h_ */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_audio.h |
| | | * |
| | | * Access to the raw audio mixing buffer for the SDL library. |
| | | */ |
| | | |
| | | #ifndef _SDL_audio_h |
| | | #define _SDL_audio_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | #include "SDL_endian.h" |
| | | #include "SDL_mutex.h" |
| | | #include "SDL_thread.h" |
| | | #include "SDL_rwops.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Audio format flags. |
| | | * |
| | | * These are what the 16 bits in SDL_AudioFormat currently mean... |
| | | * (Unspecified bits are always zero). |
| | | * |
| | | * \verbatim |
| | | ++-----------------------sample is signed if set |
| | | || |
| | | || ++-----------sample is bigendian if set |
| | | || || |
| | | || || ++---sample is float if set |
| | | || || || |
| | | || || || +---sample bit size---+ |
| | | || || || | | |
| | | 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 |
| | | \endverbatim |
| | | * |
| | | * There are macros in SDL 2.0 and later to query these bits. |
| | | */ |
| | | typedef Uint16 SDL_AudioFormat; |
| | | |
| | | /** |
| | | * \name Audio flags |
| | | */ |
| | | /*@{*/ |
| | | |
| | | #define SDL_AUDIO_MASK_BITSIZE (0xFF) |
| | | #define SDL_AUDIO_MASK_DATATYPE (1<<8) |
| | | #define SDL_AUDIO_MASK_ENDIAN (1<<12) |
| | | #define SDL_AUDIO_MASK_SIGNED (1<<15) |
| | | #define SDL_AUDIO_BITSIZE(x) (x & SDL_AUDIO_MASK_BITSIZE) |
| | | #define SDL_AUDIO_ISFLOAT(x) (x & SDL_AUDIO_MASK_DATATYPE) |
| | | #define SDL_AUDIO_ISBIGENDIAN(x) (x & SDL_AUDIO_MASK_ENDIAN) |
| | | #define SDL_AUDIO_ISSIGNED(x) (x & SDL_AUDIO_MASK_SIGNED) |
| | | #define SDL_AUDIO_ISINT(x) (!SDL_AUDIO_ISFLOAT(x)) |
| | | #define SDL_AUDIO_ISLITTLEENDIAN(x) (!SDL_AUDIO_ISBIGENDIAN(x)) |
| | | #define SDL_AUDIO_ISUNSIGNED(x) (!SDL_AUDIO_ISSIGNED(x)) |
| | | |
| | | /** |
| | | * \name Audio format flags |
| | | * |
| | | * Defaults to LSB byte order. |
| | | */ |
| | | /*@{*/ |
| | | #define AUDIO_U8 0x0008 /**< Unsigned 8-bit samples */ |
| | | #define AUDIO_S8 0x8008 /**< Signed 8-bit samples */ |
| | | #define AUDIO_U16LSB 0x0010 /**< Unsigned 16-bit samples */ |
| | | #define AUDIO_S16LSB 0x8010 /**< Signed 16-bit samples */ |
| | | #define AUDIO_U16MSB 0x1010 /**< As above, but big-endian byte order */ |
| | | #define AUDIO_S16MSB 0x9010 /**< As above, but big-endian byte order */ |
| | | #define AUDIO_U16 AUDIO_U16LSB |
| | | #define AUDIO_S16 AUDIO_S16LSB |
| | | /*@}*/ |
| | | |
| | | /** |
| | | * \name int32 support |
| | | */ |
| | | /*@{*/ |
| | | #define AUDIO_S32LSB 0x8020 /**< 32-bit integer samples */ |
| | | #define AUDIO_S32MSB 0x9020 /**< As above, but big-endian byte order */ |
| | | #define AUDIO_S32 AUDIO_S32LSB |
| | | /*@}*/ |
| | | |
| | | /** |
| | | * \name float32 support |
| | | */ |
| | | /*@{*/ |
| | | #define AUDIO_F32LSB 0x8120 /**< 32-bit floating point samples */ |
| | | #define AUDIO_F32MSB 0x9120 /**< As above, but big-endian byte order */ |
| | | #define AUDIO_F32 AUDIO_F32LSB |
| | | /*@}*/ |
| | | |
| | | /** |
| | | * \name Native audio byte ordering |
| | | */ |
| | | /*@{*/ |
| | | #if SDL_BYTEORDER == SDL_LIL_ENDIAN |
| | | #define AUDIO_U16SYS AUDIO_U16LSB |
| | | #define AUDIO_S16SYS AUDIO_S16LSB |
| | | #define AUDIO_S32SYS AUDIO_S32LSB |
| | | #define AUDIO_F32SYS AUDIO_F32LSB |
| | | #else |
| | | #define AUDIO_U16SYS AUDIO_U16MSB |
| | | #define AUDIO_S16SYS AUDIO_S16MSB |
| | | #define AUDIO_S32SYS AUDIO_S32MSB |
| | | #define AUDIO_F32SYS AUDIO_F32MSB |
| | | #endif |
| | | /*@}*/ |
| | | |
| | | /** |
| | | * \name Allow change flags |
| | | * |
| | | * Which audio format changes are allowed when opening a device. |
| | | */ |
| | | /*@{*/ |
| | | #define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001 |
| | | #define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002 |
| | | #define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004 |
| | | #define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE) |
| | | /*@}*/ |
| | | |
| | | /*@}*//*Audio flags*/ |
| | | |
| | | /** |
| | | * This function is called when the audio device needs more data. |
| | | * |
| | | * \param userdata An application-specific parameter saved in |
| | | * the SDL_AudioSpec structure |
| | | * \param stream A pointer to the audio data buffer. |
| | | * \param len The length of that buffer in bytes. |
| | | * |
| | | * Once the callback returns, the buffer will no longer be valid. |
| | | * Stereo samples are stored in a LRLRLR ordering. |
| | | */ |
| | | typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream, |
| | | int len); |
| | | |
| | | /** |
| | | * The calculated values in this structure are calculated by SDL_OpenAudio(). |
| | | */ |
| | | typedef struct SDL_AudioSpec |
| | | { |
| | | int freq; /**< DSP frequency -- samples per second */ |
| | | SDL_AudioFormat format; /**< Audio data format */ |
| | | Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */ |
| | | Uint8 silence; /**< Audio buffer silence value (calculated) */ |
| | | Uint16 samples; /**< Audio buffer size in samples (power of 2) */ |
| | | Uint16 padding; /**< Necessary for some compile environments */ |
| | | Uint32 size; /**< Audio buffer size in bytes (calculated) */ |
| | | SDL_AudioCallback callback; |
| | | void *userdata; |
| | | } SDL_AudioSpec; |
| | | |
| | | |
| | | struct SDL_AudioCVT; |
| | | typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, |
| | | SDL_AudioFormat format); |
| | | |
| | | /** |
| | | * A structure to hold a set of audio conversion filters and buffers. |
| | | */ |
| | | typedef struct SDL_AudioCVT |
| | | { |
| | | int needed; /**< Set to 1 if conversion possible */ |
| | | SDL_AudioFormat src_format; /**< Source audio format */ |
| | | SDL_AudioFormat dst_format; /**< Target audio format */ |
| | | double rate_incr; /**< Rate conversion increment */ |
| | | Uint8 *buf; /**< Buffer to hold entire audio data */ |
| | | int len; /**< Length of original audio buffer */ |
| | | int len_cvt; /**< Length of converted audio buffer */ |
| | | int len_mult; /**< buffer must be len*len_mult big */ |
| | | double len_ratio; /**< Given len, final size is len*len_ratio */ |
| | | SDL_AudioFilter filters[10]; /**< Filter list */ |
| | | int filter_index; /**< Current audio conversion function */ |
| | | } SDL_AudioCVT; |
| | | |
| | | |
| | | /* Function prototypes */ |
| | | |
| | | /** |
| | | * \name Driver discovery functions |
| | | * |
| | | * These functions return the list of built in audio drivers, in the |
| | | * order that they are normally initialized by default. |
| | | */ |
| | | /*@{*/ |
| | | extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void); |
| | | extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index); |
| | | /*@}*/ |
| | | |
| | | /** |
| | | * \name Initialization and cleanup |
| | | * |
| | | * \internal These functions are used internally, and should not be used unless |
| | | * you have a specific need to specify the audio driver you want to |
| | | * use. You should normally use SDL_Init() or SDL_InitSubSystem(). |
| | | */ |
| | | /*@{*/ |
| | | extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); |
| | | extern DECLSPEC void SDLCALL SDL_AudioQuit(void); |
| | | /*@}*/ |
| | | |
| | | /** |
| | | * This function returns the name of the current audio driver, or NULL |
| | | * if no driver has been initialized. |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); |
| | | |
| | | /** |
| | | * This function opens the audio device with the desired parameters, and |
| | | * returns 0 if successful, placing the actual hardware parameters in the |
| | | * structure pointed to by \c obtained. If \c obtained is NULL, the audio |
| | | * data passed to the callback function will be guaranteed to be in the |
| | | * requested format, and will be automatically converted to the hardware |
| | | * audio format if necessary. This function returns -1 if it failed |
| | | * to open the audio device, or couldn't set up the audio thread. |
| | | * |
| | | * When filling in the desired audio spec structure, |
| | | * - \c desired->freq should be the desired audio frequency in samples-per- |
| | | * second. |
| | | * - \c desired->format should be the desired audio format. |
| | | * - \c desired->samples is the desired size of the audio buffer, in |
| | | * samples. This number should be a power of two, and may be adjusted by |
| | | * the audio driver to a value more suitable for the hardware. Good values |
| | | * seem to range between 512 and 8096 inclusive, depending on the |
| | | * application and CPU speed. Smaller values yield faster response time, |
| | | * but can lead to underflow if the application is doing heavy processing |
| | | * and cannot fill the audio buffer in time. A stereo sample consists of |
| | | * both right and left channels in LR ordering. |
| | | * Note that the number of samples is directly related to time by the |
| | | * following formula: \code ms = (samples*1000)/freq \endcode |
| | | * - \c desired->size is the size in bytes of the audio buffer, and is |
| | | * calculated by SDL_OpenAudio(). |
| | | * - \c desired->silence is the value used to set the buffer to silence, |
| | | * and is calculated by SDL_OpenAudio(). |
| | | * - \c desired->callback should be set to a function that will be called |
| | | * when the audio device is ready for more data. It is passed a pointer |
| | | * to the audio buffer, and the length in bytes of the audio buffer. |
| | | * This function usually runs in a separate thread, and so you should |
| | | * protect data structures that it accesses by calling SDL_LockAudio() |
| | | * and SDL_UnlockAudio() in your code. |
| | | * - \c desired->userdata is passed as the first parameter to your callback |
| | | * function. |
| | | * |
| | | * The audio device starts out playing silence when it's opened, and should |
| | | * be enabled for playing by calling \c SDL_PauseAudio(0) when you are ready |
| | | * for your audio callback function to be called. Since the audio driver |
| | | * may modify the requested size of the audio buffer, you should allocate |
| | | * any local mixing buffers after you open the audio device. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, |
| | | SDL_AudioSpec * obtained); |
| | | |
| | | /** |
| | | * SDL Audio Device IDs. |
| | | * |
| | | * A successful call to SDL_OpenAudio() is always device id 1, and legacy |
| | | * SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls |
| | | * always returns devices >= 2 on success. The legacy calls are good both |
| | | * for backwards compatibility and when you don't care about multiple, |
| | | * specific, or capture devices. |
| | | */ |
| | | typedef Uint32 SDL_AudioDeviceID; |
| | | |
| | | /** |
| | | * Get the number of available devices exposed by the current driver. |
| | | * Only valid after a successfully initializing the audio subsystem. |
| | | * Returns -1 if an explicit list of devices can't be determined; this is |
| | | * not an error. For example, if SDL is set up to talk to a remote audio |
| | | * server, it can't list every one available on the Internet, but it will |
| | | * still allow a specific host to be specified to SDL_OpenAudioDevice(). |
| | | * |
| | | * In many common cases, when this function returns a value <= 0, it can still |
| | | * successfully open the default device (NULL for first argument of |
| | | * SDL_OpenAudioDevice()). |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture); |
| | | |
| | | /** |
| | | * Get the human-readable name of a specific audio device. |
| | | * Must be a value between 0 and (number of audio devices-1). |
| | | * Only valid after a successfully initializing the audio subsystem. |
| | | * The values returned by this function reflect the latest call to |
| | | * SDL_GetNumAudioDevices(); recall that function to redetect available |
| | | * hardware. |
| | | * |
| | | * The string returned by this function is UTF-8 encoded, read-only, and |
| | | * managed internally. You are not to free it. If you need to keep the |
| | | * string for any length of time, you should make your own copy of it, as it |
| | | * will be invalid next time any of several other SDL functions is called. |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, |
| | | int iscapture); |
| | | |
| | | |
| | | /** |
| | | * Open a specific audio device. Passing in a device name of NULL requests |
| | | * the most reasonable default (and is equivalent to calling SDL_OpenAudio()). |
| | | * |
| | | * The device name is a UTF-8 string reported by SDL_GetAudioDeviceName(), but |
| | | * some drivers allow arbitrary and driver-specific strings, such as a |
| | | * hostname/IP address for a remote audio server, or a filename in the |
| | | * diskaudio driver. |
| | | * |
| | | * \return 0 on error, a valid device ID that is >= 2 on success. |
| | | * |
| | | * SDL_OpenAudio(), unlike this function, always acts on device ID 1. |
| | | */ |
| | | extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice(const char |
| | | *device, |
| | | int iscapture, |
| | | const |
| | | SDL_AudioSpec * |
| | | desired, |
| | | SDL_AudioSpec * |
| | | obtained, |
| | | int |
| | | allowed_changes); |
| | | |
| | | |
| | | |
| | | /** |
| | | * \name Audio state |
| | | * |
| | | * Get the current audio state. |
| | | */ |
| | | /*@{*/ |
| | | typedef enum |
| | | { |
| | | SDL_AUDIO_STOPPED = 0, |
| | | SDL_AUDIO_PLAYING, |
| | | SDL_AUDIO_PAUSED |
| | | } SDL_AudioStatus; |
| | | extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioStatus(void); |
| | | |
| | | extern DECLSPEC SDL_AudioStatus SDLCALL |
| | | SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev); |
| | | /*@}*//*Audio State*/ |
| | | |
| | | /** |
| | | * \name Pause audio functions |
| | | * |
| | | * These functions pause and unpause the audio callback processing. |
| | | * They should be called with a parameter of 0 after opening the audio |
| | | * device to start playing sound. This is so you can safely initialize |
| | | * data for your callback function after opening the audio device. |
| | | * Silence will be written to the audio device during the pause. |
| | | */ |
| | | /*@{*/ |
| | | extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); |
| | | extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev, |
| | | int pause_on); |
| | | /*@}*//*Pause audio functions*/ |
| | | |
| | | /** |
| | | * This function loads a WAVE from the data source, automatically freeing |
| | | * that source if \c freesrc is non-zero. For example, to load a WAVE file, |
| | | * you could do: |
| | | * \code |
| | | * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...); |
| | | * \endcode |
| | | * |
| | | * If this function succeeds, it returns the given SDL_AudioSpec, |
| | | * filled with the audio data format of the wave data, and sets |
| | | * \c *audio_buf to a malloc()'d buffer containing the audio data, |
| | | * and sets \c *audio_len to the length of that audio buffer, in bytes. |
| | | * You need to free the audio buffer with SDL_FreeWAV() when you are |
| | | * done with it. |
| | | * |
| | | * This function returns NULL and sets the SDL error message if the |
| | | * wave file cannot be opened, uses an unknown data format, or is |
| | | * corrupt. Currently raw and MS-ADPCM WAVE files are supported. |
| | | */ |
| | | extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, |
| | | int freesrc, |
| | | SDL_AudioSpec * spec, |
| | | Uint8 ** audio_buf, |
| | | Uint32 * audio_len); |
| | | |
| | | /** |
| | | * Loads a WAV from a file. |
| | | * Compatibility convenience function. |
| | | */ |
| | | #define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ |
| | | SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) |
| | | |
| | | /** |
| | | * This function frees data previously allocated with SDL_LoadWAV_RW() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf); |
| | | |
| | | /** |
| | | * This function takes a source format and rate and a destination format |
| | | * and rate, and initializes the \c cvt structure with information needed |
| | | * by SDL_ConvertAudio() to convert a buffer of audio data from one format |
| | | * to the other. |
| | | * |
| | | * \return -1 if the format conversion is not supported, 0 if there's |
| | | * no conversion needed, or 1 if the audio filter is set up. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, |
| | | SDL_AudioFormat src_format, |
| | | Uint8 src_channels, |
| | | int src_rate, |
| | | SDL_AudioFormat dst_format, |
| | | Uint8 dst_channels, |
| | | int dst_rate); |
| | | |
| | | /** |
| | | * Once you have initialized the \c cvt structure using SDL_BuildAudioCVT(), |
| | | * created an audio buffer \c cvt->buf, and filled it with \c cvt->len bytes of |
| | | * audio data in the source format, this function will convert it in-place |
| | | * to the desired format. |
| | | * |
| | | * The data conversion may expand the size of the audio data, so the buffer |
| | | * \c cvt->buf should be allocated after the \c cvt structure is initialized by |
| | | * SDL_BuildAudioCVT(), and should be \c cvt->len*cvt->len_mult bytes long. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt); |
| | | |
| | | #define SDL_MIX_MAXVOLUME 128 |
| | | /** |
| | | * This takes two audio buffers of the playing audio format and mixes |
| | | * them, performing addition, volume adjustment, and overflow clipping. |
| | | * The volume ranges from 0 - 128, and should be set to ::SDL_MIX_MAXVOLUME |
| | | * for full audio volume. Note this does not change hardware volume. |
| | | * This is provided for convenience -- you can mix your own audio data. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, |
| | | Uint32 len, int volume); |
| | | |
| | | /** |
| | | * This works like SDL_MixAudio(), but you specify the audio format instead of |
| | | * using the format of audio device 1. Thus it can be used when no audio |
| | | * device is open at all. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, |
| | | const Uint8 * src, |
| | | SDL_AudioFormat format, |
| | | Uint32 len, int volume); |
| | | |
| | | /** |
| | | * \name Audio lock functions |
| | | * |
| | | * The lock manipulated by these functions protects the callback function. |
| | | * During a SDL_LockAudio()/SDL_UnlockAudio() pair, you can be guaranteed that |
| | | * the callback function is not running. Do not call these from the callback |
| | | * function or you will cause deadlock. |
| | | */ |
| | | /*@{*/ |
| | | extern DECLSPEC void SDLCALL SDL_LockAudio(void); |
| | | extern DECLSPEC void SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev); |
| | | extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); |
| | | extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev); |
| | | /*@}*//*Audio lock functions*/ |
| | | |
| | | /** |
| | | * This function shuts down audio processing and closes the audio device. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_CloseAudio(void); |
| | | extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev); |
| | | |
| | | /** |
| | | * \return 1 if audio device is still functioning, zero if not, -1 on error. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_AudioDeviceConnected(SDL_AudioDeviceID dev); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_audio_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_bits.h |
| | | * |
| | | * Functions for fiddling with bits and bitmasks. |
| | | */ |
| | | |
| | | #ifndef _SDL_bits_h |
| | | #define _SDL_bits_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \file SDL_bits.h |
| | | */ |
| | | |
| | | /** |
| | | * Get the index of the most significant bit. Result is undefined when called |
| | | * with 0. This operation can also be stated as "count leading zeroes" and |
| | | * "log base 2". |
| | | * |
| | | * \return Index of the most significant bit. |
| | | */ |
| | | SDL_FORCE_INLINE Sint8 |
| | | SDL_MostSignificantBitIndex32(Uint32 x) |
| | | { |
| | | #if defined(__GNUC__) && __GNUC__ >= 4 |
| | | /* Count Leading Zeroes builtin in GCC. |
| | | * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html |
| | | */ |
| | | return 31 - __builtin_clz(x); |
| | | #else |
| | | /* Based off of Bit Twiddling Hacks by Sean Eron Anderson |
| | | * <seander@cs.stanford.edu>, released in the public domain. |
| | | * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog |
| | | */ |
| | | const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000}; |
| | | const Uint8 S[] = {1, 2, 4, 8, 16}; |
| | | |
| | | Uint8 msbIndex = 0; |
| | | int i; |
| | | |
| | | for (i = 4; i >= 0; i--) |
| | | { |
| | | if (x & b[i]) |
| | | { |
| | | x >>= S[i]; |
| | | msbIndex |= S[i]; |
| | | } |
| | | } |
| | | |
| | | return msbIndex; |
| | | #endif |
| | | } |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_bits_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_blendmode.h |
| | | * |
| | | * Header file declaring the SDL_BlendMode enumeration |
| | | */ |
| | | |
| | | #ifndef _SDL_blendmode_h |
| | | #define _SDL_blendmode_h |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief The blend mode used in SDL_RenderCopy() and drawing operations. |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_BLENDMODE_NONE = 0x00000000, /**< No blending */ |
| | | SDL_BLENDMODE_BLEND = 0x00000001, /**< dst = (src * A) + (dst * (1-A)) */ |
| | | SDL_BLENDMODE_ADD = 0x00000002, /**< dst = (src * A) + dst */ |
| | | SDL_BLENDMODE_MOD = 0x00000004 /**< dst = src * dst */ |
| | | } SDL_BlendMode; |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_video_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_clipboard.h |
| | | * |
| | | * Include file for SDL clipboard handling |
| | | */ |
| | | |
| | | #ifndef _SDL_clipboard_h |
| | | #define _SDL_clipboard_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* Function prototypes */ |
| | | |
| | | /** |
| | | * \brief Put UTF-8 text into the clipboard |
| | | * |
| | | * \sa SDL_GetClipboardText() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text); |
| | | |
| | | /** |
| | | * \brief Get UTF-8 text from the clipboard, which must be freed with SDL_free() |
| | | * |
| | | * \sa SDL_SetClipboardText() |
| | | */ |
| | | extern DECLSPEC char * SDLCALL SDL_GetClipboardText(void); |
| | | |
| | | /** |
| | | * \brief Returns a flag indicating whether the clipboard exists and contains a text string that is non-empty |
| | | * |
| | | * \sa SDL_GetClipboardText() |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_clipboard_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* include/SDL_config.h. Generated from SDL_config.h.in by configure. */ |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | #ifndef _SDL_config_h |
| | | #define _SDL_config_h |
| | | |
| | | /** |
| | | * \file SDL_config.h.in |
| | | * |
| | | * This is a set of defines to configure the SDL features |
| | | */ |
| | | |
| | | /* General platform specific identifiers */ |
| | | #include "SDL_platform.h" |
| | | |
| | | /* Make sure that this isn't included by Visual C++ */ |
| | | #ifdef _MSC_VER |
| | | #error You should run hg revert SDL_config.h |
| | | #endif |
| | | |
| | | /* C language features */ |
| | | /* #undef const */ |
| | | /* #undef inline */ |
| | | /* #undef volatile */ |
| | | |
| | | /* C datatypes */ |
| | | #define SIZEOF_VOIDP 4 |
| | | #define HAVE_GCC_ATOMICS 1 |
| | | /* #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET */ |
| | | #define HAVE_PTHREAD_SPINLOCK 1 |
| | | |
| | | /* Comment this if you want to build without any C library requirements */ |
| | | #define HAVE_LIBC 1 |
| | | #if HAVE_LIBC |
| | | |
| | | /* Useful headers */ |
| | | #define HAVE_ALLOCA_H 1 |
| | | #define HAVE_SYS_TYPES_H 1 |
| | | #define HAVE_STDIO_H 1 |
| | | #define STDC_HEADERS 1 |
| | | #define HAVE_STDLIB_H 1 |
| | | #define HAVE_STDARG_H 1 |
| | | #define HAVE_MALLOC_H 1 |
| | | #define HAVE_MEMORY_H 1 |
| | | #define HAVE_STRING_H 1 |
| | | #define HAVE_STRINGS_H 1 |
| | | #define HAVE_INTTYPES_H 1 |
| | | #define HAVE_STDINT_H 1 |
| | | #define HAVE_CTYPE_H 1 |
| | | #define HAVE_MATH_H 1 |
| | | #define HAVE_ICONV_H 1 |
| | | #define HAVE_SIGNAL_H 1 |
| | | /* #undef HAVE_ALTIVEC_H */ |
| | | /* #undef HAVE_PTHREAD_NP_H */ |
| | | /* #undef HAVE_LIBUDEV_H */ |
| | | #define HAVE_DBUS_DBUS_H 1 |
| | | |
| | | /* C library functions */ |
| | | #define HAVE_MALLOC 1 |
| | | #define HAVE_CALLOC 1 |
| | | #define HAVE_REALLOC 1 |
| | | #define HAVE_FREE 1 |
| | | #define HAVE_ALLOCA 1 |
| | | #ifndef __WIN32__ /* Don't use C runtime versions of these on Windows */ |
| | | #define HAVE_GETENV 1 |
| | | #define HAVE_SETENV 1 |
| | | #define HAVE_PUTENV 1 |
| | | #define HAVE_UNSETENV 1 |
| | | #endif |
| | | #define HAVE_QSORT 1 |
| | | #define HAVE_ABS 1 |
| | | #define HAVE_BCOPY 1 |
| | | #define HAVE_MEMSET 1 |
| | | #define HAVE_MEMCPY 1 |
| | | #define HAVE_MEMMOVE 1 |
| | | #define HAVE_MEMCMP 1 |
| | | #define HAVE_STRLEN 1 |
| | | /* #undef HAVE_STRLCPY */ |
| | | /* #undef HAVE_STRLCAT */ |
| | | #define HAVE_STRDUP 1 |
| | | /* #undef HAVE__STRREV */ |
| | | /* #undef HAVE__STRUPR */ |
| | | /* #undef HAVE__STRLWR */ |
| | | /* #undef HAVE_INDEX */ |
| | | /* #undef HAVE_RINDEX */ |
| | | #define HAVE_STRCHR 1 |
| | | #define HAVE_STRRCHR 1 |
| | | #define HAVE_STRSTR 1 |
| | | /* #undef HAVE_ITOA */ |
| | | /* #undef HAVE__LTOA */ |
| | | /* #undef HAVE__UITOA */ |
| | | /* #undef HAVE__ULTOA */ |
| | | #define HAVE_STRTOL 1 |
| | | #define HAVE_STRTOUL 1 |
| | | /* #undef HAVE__I64TOA */ |
| | | /* #undef HAVE__UI64TOA */ |
| | | #define HAVE_STRTOLL 1 |
| | | #define HAVE_STRTOULL 1 |
| | | #define HAVE_STRTOD 1 |
| | | #define HAVE_ATOI 1 |
| | | #define HAVE_ATOF 1 |
| | | #define HAVE_STRCMP 1 |
| | | #define HAVE_STRNCMP 1 |
| | | /* #undef HAVE__STRICMP */ |
| | | #define HAVE_STRCASECMP 1 |
| | | /* #undef HAVE__STRNICMP */ |
| | | #define HAVE_STRNCASECMP 1 |
| | | #define HAVE_SSCANF 1 |
| | | #define HAVE_SNPRINTF 1 |
| | | #define HAVE_VSNPRINTF 1 |
| | | #define HAVE_M_PI /**/ |
| | | #define HAVE_ATAN 1 |
| | | #define HAVE_ATAN2 1 |
| | | #define HAVE_CEIL 1 |
| | | #define HAVE_COPYSIGN 1 |
| | | #define HAVE_COS 1 |
| | | #define HAVE_COSF 1 |
| | | #define HAVE_FABS 1 |
| | | #define HAVE_FLOOR 1 |
| | | #define HAVE_LOG 1 |
| | | #define HAVE_POW 1 |
| | | #define HAVE_SCALBN 1 |
| | | #define HAVE_SIN 1 |
| | | #define HAVE_SINF 1 |
| | | #define HAVE_SQRT 1 |
| | | #define HAVE_FSEEKO 1 |
| | | #define HAVE_FSEEKO64 1 |
| | | #define HAVE_SIGACTION 1 |
| | | #define HAVE_SA_SIGACTION 1 |
| | | #define HAVE_SETJMP 1 |
| | | #define HAVE_NANOSLEEP 1 |
| | | #define HAVE_SYSCONF 1 |
| | | /* #undef HAVE_SYSCTLBYNAME */ |
| | | #define HAVE_CLOCK_GETTIME 1 |
| | | /* #undef HAVE_GETPAGESIZE */ |
| | | #define HAVE_MPROTECT 1 |
| | | #define HAVE_ICONV 1 |
| | | #define HAVE_PTHREAD_SETNAME_NP 1 |
| | | /* #undef HAVE_PTHREAD_SET_NAME_NP */ |
| | | #define HAVE_SEM_TIMEDWAIT 1 |
| | | |
| | | #else |
| | | /* We may need some replacement for stdarg.h here */ |
| | | #include <stdarg.h> |
| | | #endif /* HAVE_LIBC */ |
| | | |
| | | /* SDL internal assertion support */ |
| | | /* #undef SDL_DEFAULT_ASSERT_LEVEL */ |
| | | |
| | | /* Allow disabling of core subsystems */ |
| | | /* #undef SDL_ATOMIC_DISABLED */ |
| | | /* #undef SDL_AUDIO_DISABLED */ |
| | | /* #undef SDL_CPUINFO_DISABLED */ |
| | | /* #undef SDL_EVENTS_DISABLED */ |
| | | /* #undef SDL_FILE_DISABLED */ |
| | | /* #undef SDL_JOYSTICK_DISABLED */ |
| | | /* #undef SDL_HAPTIC_DISABLED */ |
| | | /* #undef SDL_LOADSO_DISABLED */ |
| | | /* #undef SDL_RENDER_DISABLED */ |
| | | /* #undef SDL_THREADS_DISABLED */ |
| | | /* #undef SDL_TIMERS_DISABLED */ |
| | | /* #undef SDL_VIDEO_DISABLED */ |
| | | /* #undef SDL_POWER_DISABLED */ |
| | | |
| | | /* Enable various audio drivers */ |
| | | #define SDL_AUDIO_DRIVER_ALSA 1 |
| | | #define SDL_AUDIO_DRIVER_ALSA_DYNAMIC "libasound.so.2" |
| | | /* #undef SDL_AUDIO_DRIVER_ARTS */ |
| | | /* #undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC */ |
| | | #define SDL_AUDIO_DRIVER_PULSEAUDIO 1 |
| | | #define SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC "libpulse-simple.so.0" |
| | | /* #undef SDL_AUDIO_DRIVER_BEOSAUDIO */ |
| | | /* #undef SDL_AUDIO_DRIVER_BSD */ |
| | | /* #undef SDL_AUDIO_DRIVER_COREAUDIO */ |
| | | #define SDL_AUDIO_DRIVER_DISK 1 |
| | | #define SDL_AUDIO_DRIVER_DUMMY 1 |
| | | /* #undef SDL_AUDIO_DRIVER_XAUDIO2 */ |
| | | /* #undef SDL_AUDIO_DRIVER_DSOUND */ |
| | | /* #undef SDL_AUDIO_DRIVER_ESD */ |
| | | /* #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC */ |
| | | /* #undef SDL_AUDIO_DRIVER_NAS */ |
| | | /* #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC */ |
| | | #define SDL_AUDIO_DRIVER_OSS 1 |
| | | /* #undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H */ |
| | | /* #undef SDL_AUDIO_DRIVER_PAUDIO */ |
| | | /* #undef SDL_AUDIO_DRIVER_QSA */ |
| | | /* #undef SDL_AUDIO_DRIVER_SUNAUDIO */ |
| | | /* #undef SDL_AUDIO_DRIVER_WINMM */ |
| | | /* #undef SDL_AUDIO_DRIVER_FUSIONSOUND */ |
| | | /* #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC */ |
| | | |
| | | /* Enable various input drivers */ |
| | | #define SDL_INPUT_LINUXEV 1 |
| | | /* #undef SDL_INPUT_TSLIB */ |
| | | /* #undef SDL_JOYSTICK_BEOS */ |
| | | /* #undef SDL_JOYSTICK_DINPUT */ |
| | | /* #undef SDL_JOYSTICK_DUMMY */ |
| | | /* #undef SDL_JOYSTICK_IOKIT */ |
| | | #define SDL_JOYSTICK_LINUX 1 |
| | | /* #undef SDL_JOYSTICK_WINMM */ |
| | | /* #undef SDL_JOYSTICK_USBHID */ |
| | | /* #undef SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H */ |
| | | /* #undef SDL_HAPTIC_DUMMY */ |
| | | #define SDL_HAPTIC_LINUX 1 |
| | | /* #undef SDL_HAPTIC_IOKIT */ |
| | | /* #undef SDL_HAPTIC_DINPUT */ |
| | | |
| | | /* Enable various shared object loading systems */ |
| | | /* #undef SDL_LOADSO_BEOS */ |
| | | #define SDL_LOADSO_DLOPEN 1 |
| | | /* #undef SDL_LOADSO_DUMMY */ |
| | | /* #undef SDL_LOADSO_LDG */ |
| | | /* #undef SDL_LOADSO_WINDOWS */ |
| | | |
| | | /* Enable various threading systems */ |
| | | /* #undef SDL_THREAD_BEOS */ |
| | | #define SDL_THREAD_PTHREAD 1 |
| | | #define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 |
| | | /* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP */ |
| | | /* #undef SDL_THREAD_WINDOWS */ |
| | | |
| | | /* Enable various timer systems */ |
| | | /* #undef SDL_TIMER_BEOS */ |
| | | /* #undef SDL_TIMER_DUMMY */ |
| | | #define SDL_TIMER_UNIX 1 |
| | | /* #undef SDL_TIMER_WINDOWS */ |
| | | |
| | | /* Enable various video drivers */ |
| | | /* #undef SDL_VIDEO_DRIVER_BWINDOW */ |
| | | /* #undef SDL_VIDEO_DRIVER_COCOA */ |
| | | /* #undef SDL_VIDEO_DRIVER_DIRECTFB */ |
| | | /* #undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC */ |
| | | #define SDL_VIDEO_DRIVER_DUMMY 1 |
| | | /* #undef SDL_VIDEO_DRIVER_WINDOWS */ |
| | | #define SDL_VIDEO_DRIVER_X11 1 |
| | | #define SDL_VIDEO_DRIVER_X11_DYNAMIC "libX11.so.6" |
| | | #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "libXext.so.6" |
| | | #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR "libXcursor.so.1" |
| | | #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "libXinerama.so.1" |
| | | #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "libXi.so.6" |
| | | #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "libXrandr.so.2" |
| | | #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "libXss.so.1" |
| | | #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "libXxf86vm.so.1" |
| | | #define SDL_VIDEO_DRIVER_X11_XCURSOR 1 |
| | | #define SDL_VIDEO_DRIVER_X11_XINERAMA 1 |
| | | #define SDL_VIDEO_DRIVER_X11_XINPUT2 1 |
| | | #define SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH 1 |
| | | #define SDL_VIDEO_DRIVER_X11_XRANDR 1 |
| | | #define SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1 |
| | | #define SDL_VIDEO_DRIVER_X11_XSHAPE 1 |
| | | #define SDL_VIDEO_DRIVER_X11_XVIDMODE 1 |
| | | #define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1 |
| | | #define SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY 1 |
| | | #define SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM 1 |
| | | |
| | | /* #undef SDL_VIDEO_RENDER_D3D */ |
| | | #define SDL_VIDEO_RENDER_OGL 1 |
| | | /* #undef SDL_VIDEO_RENDER_OGL_ES */ |
| | | /* #undef SDL_VIDEO_RENDER_OGL_ES2 */ |
| | | /* #undef SDL_VIDEO_RENDER_DIRECTFB */ |
| | | |
| | | /* Enable OpenGL support */ |
| | | #define SDL_VIDEO_OPENGL 1 |
| | | /* #undef SDL_VIDEO_OPENGL_ES */ |
| | | /* #undef SDL_VIDEO_OPENGL_BGL */ |
| | | /* #undef SDL_VIDEO_OPENGL_CGL */ |
| | | #define SDL_VIDEO_OPENGL_GLX 1 |
| | | /* #undef SDL_VIDEO_OPENGL_WGL */ |
| | | /* #undef SDL_VIDEO_OPENGL_OSMESA */ |
| | | /* #undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC */ |
| | | |
| | | /* Enable system power support */ |
| | | #define SDL_POWER_LINUX 1 |
| | | /* #undef SDL_POWER_WINDOWS */ |
| | | /* #undef SDL_POWER_MACOSX */ |
| | | /* #undef SDL_POWER_BEOS */ |
| | | /* #undef SDL_POWER_HARDWIRED */ |
| | | |
| | | /* Enable assembly routines */ |
| | | #define SDL_ASSEMBLY_ROUTINES 1 |
| | | /* #undef SDL_ALTIVEC_BLITTERS */ |
| | | |
| | | #endif /* _SDL_config_h */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_cpuinfo.h |
| | | * |
| | | * CPU feature detection for SDL. |
| | | */ |
| | | |
| | | #ifndef _SDL_cpuinfo_h |
| | | #define _SDL_cpuinfo_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | |
| | | /* Need to do this here because intrin.h has C++ code in it */ |
| | | /* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ |
| | | #if defined(_MSC_VER) && (_MSC_VER >= 1500) |
| | | #include <intrin.h> |
| | | #ifndef _WIN64 |
| | | #define __MMX__ |
| | | #define __3dNOW__ |
| | | #endif |
| | | #define __SSE__ |
| | | #define __SSE2__ |
| | | #elif defined(__MINGW64_VERSION_MAJOR) |
| | | #include <intrin.h> |
| | | #else |
| | | #ifdef __ALTIVEC__ |
| | | #if HAVE_ALTIVEC_H && !defined(__APPLE_ALTIVEC__) |
| | | #include <altivec.h> |
| | | #undef pixel |
| | | #endif |
| | | #endif |
| | | #ifdef __MMX__ |
| | | #include <mmintrin.h> |
| | | #endif |
| | | #ifdef __3dNOW__ |
| | | #include <mm3dnow.h> |
| | | #endif |
| | | #ifdef __SSE__ |
| | | #include <xmmintrin.h> |
| | | #endif |
| | | #ifdef __SSE2__ |
| | | #include <emmintrin.h> |
| | | #endif |
| | | #endif |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* This is a guess for the cacheline size used for padding. |
| | | * Most x86 processors have a 64 byte cache line. |
| | | * The 64-bit PowerPC processors have a 128 byte cache line. |
| | | * We'll use the larger value to be generally safe. |
| | | */ |
| | | #define SDL_CACHELINE_SIZE 128 |
| | | |
| | | /** |
| | | * This function returns the number of CPU cores available. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetCPUCount(void); |
| | | |
| | | /** |
| | | * This function returns the L1 cache line size of the CPU |
| | | * |
| | | * This is useful for determining multi-threaded structure padding |
| | | * or SIMD prefetch sizes. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void); |
| | | |
| | | /** |
| | | * This function returns true if the CPU has the RDTSC instruction. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); |
| | | |
| | | /** |
| | | * This function returns true if the CPU has AltiVec features. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); |
| | | |
| | | /** |
| | | * This function returns true if the CPU has MMX features. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); |
| | | |
| | | /** |
| | | * This function returns true if the CPU has 3DNow! features. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); |
| | | |
| | | /** |
| | | * This function returns true if the CPU has SSE features. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); |
| | | |
| | | /** |
| | | * This function returns true if the CPU has SSE2 features. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); |
| | | |
| | | /** |
| | | * This function returns true if the CPU has SSE3 features. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void); |
| | | |
| | | /** |
| | | * This function returns true if the CPU has SSE4.1 features. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void); |
| | | |
| | | /** |
| | | * This function returns true if the CPU has SSE4.2 features. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_cpuinfo_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_endian.h |
| | | * |
| | | * Functions for reading and writing endian-specific values |
| | | */ |
| | | |
| | | #ifndef _SDL_endian_h |
| | | #define _SDL_endian_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | |
| | | /** |
| | | * \name The two types of endianness |
| | | */ |
| | | /*@{*/ |
| | | #define SDL_LIL_ENDIAN 1234 |
| | | #define SDL_BIG_ENDIAN 4321 |
| | | /*@}*/ |
| | | |
| | | #ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ |
| | | #ifdef __linux__ |
| | | #include <endian.h> |
| | | #define SDL_BYTEORDER __BYTE_ORDER |
| | | #else /* __linux __ */ |
| | | #if defined(__hppa__) || \ |
| | | defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ |
| | | (defined(__MIPS__) && defined(__MISPEB__)) || \ |
| | | defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ |
| | | defined(__sparc__) |
| | | #define SDL_BYTEORDER SDL_BIG_ENDIAN |
| | | #else |
| | | #define SDL_BYTEORDER SDL_LIL_ENDIAN |
| | | #endif |
| | | #endif /* __linux __ */ |
| | | #endif /* !SDL_BYTEORDER */ |
| | | |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \file SDL_endian.h |
| | | */ |
| | | #if defined(__GNUC__) && defined(__i386__) && \ |
| | | !(__GNUC__ == 2 && __GNUC_MINOR__ == 95 /* broken gcc version */) |
| | | SDL_FORCE_INLINE Uint16 |
| | | SDL_Swap16(Uint16 x) |
| | | { |
| | | __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); |
| | | return x; |
| | | } |
| | | #elif defined(__GNUC__) && defined(__x86_64__) |
| | | SDL_FORCE_INLINE Uint16 |
| | | SDL_Swap16(Uint16 x) |
| | | { |
| | | __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); |
| | | return x; |
| | | } |
| | | #elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) |
| | | SDL_FORCE_INLINE Uint16 |
| | | SDL_Swap16(Uint16 x) |
| | | { |
| | | int result; |
| | | |
| | | __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); |
| | | return (Uint16)result; |
| | | } |
| | | #elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) |
| | | SDL_FORCE_INLINE Uint16 |
| | | SDL_Swap16(Uint16 x) |
| | | { |
| | | __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); |
| | | return x; |
| | | } |
| | | #else |
| | | SDL_FORCE_INLINE Uint16 |
| | | SDL_Swap16(Uint16 x) |
| | | { |
| | | return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); |
| | | } |
| | | #endif |
| | | |
| | | #if defined(__GNUC__) && defined(__i386__) |
| | | SDL_FORCE_INLINE Uint32 |
| | | SDL_Swap32(Uint32 x) |
| | | { |
| | | __asm__("bswap %0": "=r"(x):"0"(x)); |
| | | return x; |
| | | } |
| | | #elif defined(__GNUC__) && defined(__x86_64__) |
| | | SDL_FORCE_INLINE Uint32 |
| | | SDL_Swap32(Uint32 x) |
| | | { |
| | | __asm__("bswapl %0": "=r"(x):"0"(x)); |
| | | return x; |
| | | } |
| | | #elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) |
| | | SDL_FORCE_INLINE Uint32 |
| | | SDL_Swap32(Uint32 x) |
| | | { |
| | | Uint32 result; |
| | | |
| | | __asm__("rlwimi %0,%2,24,16,23": "=&r"(result):"0"(x >> 24), "r"(x)); |
| | | __asm__("rlwimi %0,%2,8,8,15": "=&r"(result):"0"(result), "r"(x)); |
| | | __asm__("rlwimi %0,%2,24,0,7": "=&r"(result):"0"(result), "r"(x)); |
| | | return result; |
| | | } |
| | | #elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) |
| | | SDL_FORCE_INLINE Uint32 |
| | | SDL_Swap32(Uint32 x) |
| | | { |
| | | __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); |
| | | return x; |
| | | } |
| | | #else |
| | | SDL_FORCE_INLINE Uint32 |
| | | SDL_Swap32(Uint32 x) |
| | | { |
| | | return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | |
| | | ((x >> 8) & 0x0000FF00) | (x >> 24))); |
| | | } |
| | | #endif |
| | | |
| | | #if defined(__GNUC__) && defined(__i386__) |
| | | SDL_FORCE_INLINE Uint64 |
| | | SDL_Swap64(Uint64 x) |
| | | { |
| | | union |
| | | { |
| | | struct |
| | | { |
| | | Uint32 a, b; |
| | | } s; |
| | | Uint64 u; |
| | | } v; |
| | | v.u = x; |
| | | __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1": "=r"(v.s.a), "=r"(v.s.b):"0"(v.s.a), |
| | | "1"(v.s. |
| | | b)); |
| | | return v.u; |
| | | } |
| | | #elif defined(__GNUC__) && defined(__x86_64__) |
| | | SDL_FORCE_INLINE Uint64 |
| | | SDL_Swap64(Uint64 x) |
| | | { |
| | | __asm__("bswapq %0": "=r"(x):"0"(x)); |
| | | return x; |
| | | } |
| | | #else |
| | | SDL_FORCE_INLINE Uint64 |
| | | SDL_Swap64(Uint64 x) |
| | | { |
| | | Uint32 hi, lo; |
| | | |
| | | /* Separate into high and low 32-bit values and swap them */ |
| | | lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); |
| | | x >>= 32; |
| | | hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); |
| | | x = SDL_Swap32(lo); |
| | | x <<= 32; |
| | | x |= SDL_Swap32(hi); |
| | | return (x); |
| | | } |
| | | #endif |
| | | |
| | | |
| | | SDL_FORCE_INLINE float |
| | | SDL_SwapFloat(float x) |
| | | { |
| | | union |
| | | { |
| | | float f; |
| | | Uint32 ui32; |
| | | } swapper; |
| | | swapper.f = x; |
| | | swapper.ui32 = SDL_Swap32(swapper.ui32); |
| | | return swapper.f; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * \name Swap to native |
| | | * Byteswap item from the specified endianness to the native endianness. |
| | | */ |
| | | /*@{*/ |
| | | #if SDL_BYTEORDER == SDL_LIL_ENDIAN |
| | | #define SDL_SwapLE16(X) (X) |
| | | #define SDL_SwapLE32(X) (X) |
| | | #define SDL_SwapLE64(X) (X) |
| | | #define SDL_SwapFloatLE(X) (X) |
| | | #define SDL_SwapBE16(X) SDL_Swap16(X) |
| | | #define SDL_SwapBE32(X) SDL_Swap32(X) |
| | | #define SDL_SwapBE64(X) SDL_Swap64(X) |
| | | #define SDL_SwapFloatBE(X) SDL_SwapFloat(X) |
| | | #else |
| | | #define SDL_SwapLE16(X) SDL_Swap16(X) |
| | | #define SDL_SwapLE32(X) SDL_Swap32(X) |
| | | #define SDL_SwapLE64(X) SDL_Swap64(X) |
| | | #define SDL_SwapFloatLE(X) SDL_SwapFloat(X) |
| | | #define SDL_SwapBE16(X) (X) |
| | | #define SDL_SwapBE32(X) (X) |
| | | #define SDL_SwapBE64(X) (X) |
| | | #define SDL_SwapFloatBE(X) (X) |
| | | #endif |
| | | /*@}*//*Swap to native*/ |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_endian_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_error.h |
| | | * |
| | | * Simple error message routines for SDL. |
| | | */ |
| | | |
| | | #ifndef _SDL_error_h |
| | | #define _SDL_error_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* Public functions */ |
| | | /* SDL_SetError() unconditionally returns -1. */ |
| | | extern DECLSPEC int SDLCALL SDL_SetError(const char *fmt, ...); |
| | | extern DECLSPEC const char *SDLCALL SDL_GetError(void); |
| | | extern DECLSPEC void SDLCALL SDL_ClearError(void); |
| | | |
| | | /** |
| | | * \name Internal error functions |
| | | * |
| | | * \internal |
| | | * Private error reporting function - used internally. |
| | | */ |
| | | /*@{*/ |
| | | #define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) |
| | | #define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) |
| | | #define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param)) |
| | | typedef enum |
| | | { |
| | | SDL_ENOMEM, |
| | | SDL_EFREAD, |
| | | SDL_EFWRITE, |
| | | SDL_EFSEEK, |
| | | SDL_UNSUPPORTED, |
| | | SDL_LASTERROR |
| | | } SDL_errorcode; |
| | | /* SDL_Error() unconditionally returns -1. */ |
| | | extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code); |
| | | /*@}*//*Internal error functions*/ |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_error_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_events.h |
| | | * |
| | | * Include file for SDL event handling. |
| | | */ |
| | | |
| | | #ifndef _SDL_events_h |
| | | #define _SDL_events_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | #include "SDL_video.h" |
| | | #include "SDL_keyboard.h" |
| | | #include "SDL_mouse.h" |
| | | #include "SDL_joystick.h" |
| | | #include "SDL_gamecontroller.h" |
| | | #include "SDL_quit.h" |
| | | #include "SDL_gesture.h" |
| | | #include "SDL_touch.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* General keyboard/mouse state definitions */ |
| | | #define SDL_RELEASED 0 |
| | | #define SDL_PRESSED 1 |
| | | |
| | | /** |
| | | * \brief The types of events that can be delivered. |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */ |
| | | |
| | | /* Application events */ |
| | | SDL_QUIT = 0x100, /**< User-requested quit */ |
| | | |
| | | /* These application events have special meaning on iOS, see README.iOS for details */ |
| | | SDL_APP_TERMINATING, /**< The application is being terminated by the OS |
| | | Called on iOS in applicationWillTerminate() |
| | | Called on Android in onDestroy() |
| | | */ |
| | | SDL_APP_LOWMEMORY, /**< The application is low on memory, free memory if possible. |
| | | Called on iOS in applicationDidReceiveMemoryWarning() |
| | | Called on Android in onLowMemory() |
| | | */ |
| | | SDL_APP_WILLENTERBACKGROUND, /**< The application is about to enter the background |
| | | Called on iOS in applicationWillResignActive() |
| | | Called on Android in onPause() |
| | | */ |
| | | SDL_APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time |
| | | Called on iOS in applicationDidEnterBackground() |
| | | Called on Android in onPause() |
| | | */ |
| | | SDL_APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground |
| | | Called on iOS in applicationWillEnterForeground() |
| | | Called on Android in onResume() |
| | | */ |
| | | SDL_APP_DIDENTERFOREGROUND, /**< The application is now interactive |
| | | Called on iOS in applicationDidBecomeActive() |
| | | Called on Android in onResume() |
| | | */ |
| | | |
| | | /* Window events */ |
| | | SDL_WINDOWEVENT = 0x200, /**< Window state change */ |
| | | SDL_SYSWMEVENT, /**< System specific event */ |
| | | |
| | | /* Keyboard events */ |
| | | SDL_KEYDOWN = 0x300, /**< Key pressed */ |
| | | SDL_KEYUP, /**< Key released */ |
| | | SDL_TEXTEDITING, /**< Keyboard text editing (composition) */ |
| | | SDL_TEXTINPUT, /**< Keyboard text input */ |
| | | |
| | | /* Mouse events */ |
| | | SDL_MOUSEMOTION = 0x400, /**< Mouse moved */ |
| | | SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */ |
| | | SDL_MOUSEBUTTONUP, /**< Mouse button released */ |
| | | SDL_MOUSEWHEEL, /**< Mouse wheel motion */ |
| | | |
| | | /* Joystick events */ |
| | | SDL_JOYAXISMOTION = 0x600, /**< Joystick axis motion */ |
| | | SDL_JOYBALLMOTION, /**< Joystick trackball motion */ |
| | | SDL_JOYHATMOTION, /**< Joystick hat position change */ |
| | | SDL_JOYBUTTONDOWN, /**< Joystick button pressed */ |
| | | SDL_JOYBUTTONUP, /**< Joystick button released */ |
| | | SDL_JOYDEVICEADDED, /**< A new joystick has been inserted into the system */ |
| | | SDL_JOYDEVICEREMOVED, /**< An opened joystick has been removed */ |
| | | |
| | | /* Game controller events */ |
| | | SDL_CONTROLLERAXISMOTION = 0x650, /**< Game controller axis motion */ |
| | | SDL_CONTROLLERBUTTONDOWN, /**< Game controller button pressed */ |
| | | SDL_CONTROLLERBUTTONUP, /**< Game controller button released */ |
| | | SDL_CONTROLLERDEVICEADDED, /**< A new Game controller has been inserted into the system */ |
| | | SDL_CONTROLLERDEVICEREMOVED, /**< An opened Game controller has been removed */ |
| | | SDL_CONTROLLERDEVICEREMAPPED, /**< The controller mapping was updated */ |
| | | |
| | | /* Touch events */ |
| | | SDL_FINGERDOWN = 0x700, |
| | | SDL_FINGERUP, |
| | | SDL_FINGERMOTION, |
| | | |
| | | /* Gesture events */ |
| | | SDL_DOLLARGESTURE = 0x800, |
| | | SDL_DOLLARRECORD, |
| | | SDL_MULTIGESTURE, |
| | | |
| | | /* Clipboard events */ |
| | | SDL_CLIPBOARDUPDATE = 0x900, /**< The clipboard changed */ |
| | | |
| | | /* Drag and drop events */ |
| | | SDL_DROPFILE = 0x1000, /**< The system requests a file open */ |
| | | |
| | | /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use, |
| | | * and should be allocated with SDL_RegisterEvents() |
| | | */ |
| | | SDL_USEREVENT = 0x8000, |
| | | |
| | | /** |
| | | * This last event is only for bounding internal arrays |
| | | */ |
| | | SDL_LASTEVENT = 0xFFFF |
| | | } SDL_EventType; |
| | | |
| | | /** |
| | | * \brief Fields shared by every event |
| | | */ |
| | | typedef struct SDL_CommonEvent |
| | | { |
| | | Uint32 type; |
| | | Uint32 timestamp; |
| | | } SDL_CommonEvent; |
| | | |
| | | /** |
| | | * \brief Window state change event data (event.window.*) |
| | | */ |
| | | typedef struct SDL_WindowEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_WINDOWEVENT */ |
| | | Uint32 timestamp; |
| | | Uint32 windowID; /**< The associated window */ |
| | | Uint8 event; /**< ::SDL_WindowEventID */ |
| | | Uint8 padding1; |
| | | Uint8 padding2; |
| | | Uint8 padding3; |
| | | Sint32 data1; /**< event dependent data */ |
| | | Sint32 data2; /**< event dependent data */ |
| | | } SDL_WindowEvent; |
| | | |
| | | /** |
| | | * \brief Keyboard button event structure (event.key.*) |
| | | */ |
| | | typedef struct SDL_KeyboardEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_KEYDOWN or ::SDL_KEYUP */ |
| | | Uint32 timestamp; |
| | | Uint32 windowID; /**< The window with keyboard focus, if any */ |
| | | Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ |
| | | Uint8 repeat; /**< Non-zero if this is a key repeat */ |
| | | Uint8 padding2; |
| | | Uint8 padding3; |
| | | SDL_Keysym keysym; /**< The key that was pressed or released */ |
| | | } SDL_KeyboardEvent; |
| | | |
| | | #define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32) |
| | | /** |
| | | * \brief Keyboard text editing event structure (event.edit.*) |
| | | */ |
| | | typedef struct SDL_TextEditingEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_TEXTEDITING */ |
| | | Uint32 timestamp; |
| | | Uint32 windowID; /**< The window with keyboard focus, if any */ |
| | | char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */ |
| | | Sint32 start; /**< The start cursor of selected editing text */ |
| | | Sint32 length; /**< The length of selected editing text */ |
| | | } SDL_TextEditingEvent; |
| | | |
| | | |
| | | #define SDL_TEXTINPUTEVENT_TEXT_SIZE (32) |
| | | /** |
| | | * \brief Keyboard text input event structure (event.text.*) |
| | | */ |
| | | typedef struct SDL_TextInputEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_TEXTINPUT */ |
| | | Uint32 timestamp; |
| | | Uint32 windowID; /**< The window with keyboard focus, if any */ |
| | | char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */ |
| | | } SDL_TextInputEvent; |
| | | |
| | | /** |
| | | * \brief Mouse motion event structure (event.motion.*) |
| | | */ |
| | | typedef struct SDL_MouseMotionEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_MOUSEMOTION */ |
| | | Uint32 timestamp; |
| | | Uint32 windowID; /**< The window with mouse focus, if any */ |
| | | Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ |
| | | Uint32 state; /**< The current button state */ |
| | | Sint32 x; /**< X coordinate, relative to window */ |
| | | Sint32 y; /**< Y coordinate, relative to window */ |
| | | Sint32 xrel; /**< The relative motion in the X direction */ |
| | | Sint32 yrel; /**< The relative motion in the Y direction */ |
| | | } SDL_MouseMotionEvent; |
| | | |
| | | /** |
| | | * \brief Mouse button event structure (event.button.*) |
| | | */ |
| | | typedef struct SDL_MouseButtonEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */ |
| | | Uint32 timestamp; |
| | | Uint32 windowID; /**< The window with mouse focus, if any */ |
| | | Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ |
| | | Uint8 button; /**< The mouse button index */ |
| | | Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ |
| | | Uint8 padding1; |
| | | Uint8 padding2; |
| | | Sint32 x; /**< X coordinate, relative to window */ |
| | | Sint32 y; /**< Y coordinate, relative to window */ |
| | | } SDL_MouseButtonEvent; |
| | | |
| | | /** |
| | | * \brief Mouse wheel event structure (event.wheel.*) |
| | | */ |
| | | typedef struct SDL_MouseWheelEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_MOUSEWHEEL */ |
| | | Uint32 timestamp; |
| | | Uint32 windowID; /**< The window with mouse focus, if any */ |
| | | Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ |
| | | Sint32 x; /**< The amount scrolled horizontally */ |
| | | Sint32 y; /**< The amount scrolled vertically */ |
| | | } SDL_MouseWheelEvent; |
| | | |
| | | /** |
| | | * \brief Joystick axis motion event structure (event.jaxis.*) |
| | | */ |
| | | typedef struct SDL_JoyAxisEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_JOYAXISMOTION */ |
| | | Uint32 timestamp; |
| | | SDL_JoystickID which; /**< The joystick instance id */ |
| | | Uint8 axis; /**< The joystick axis index */ |
| | | Uint8 padding1; |
| | | Uint8 padding2; |
| | | Uint8 padding3; |
| | | Sint16 value; /**< The axis value (range: -32768 to 32767) */ |
| | | Uint16 padding4; |
| | | } SDL_JoyAxisEvent; |
| | | |
| | | /** |
| | | * \brief Joystick trackball motion event structure (event.jball.*) |
| | | */ |
| | | typedef struct SDL_JoyBallEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_JOYBALLMOTION */ |
| | | Uint32 timestamp; |
| | | SDL_JoystickID which; /**< The joystick instance id */ |
| | | Uint8 ball; /**< The joystick trackball index */ |
| | | Uint8 padding1; |
| | | Uint8 padding2; |
| | | Uint8 padding3; |
| | | Sint16 xrel; /**< The relative motion in the X direction */ |
| | | Sint16 yrel; /**< The relative motion in the Y direction */ |
| | | } SDL_JoyBallEvent; |
| | | |
| | | /** |
| | | * \brief Joystick hat position change event structure (event.jhat.*) |
| | | */ |
| | | typedef struct SDL_JoyHatEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_JOYHATMOTION */ |
| | | Uint32 timestamp; |
| | | SDL_JoystickID which; /**< The joystick instance id */ |
| | | Uint8 hat; /**< The joystick hat index */ |
| | | Uint8 value; /**< The hat position value. |
| | | * \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP |
| | | * \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT |
| | | * \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN |
| | | * |
| | | * Note that zero means the POV is centered. |
| | | */ |
| | | Uint8 padding1; |
| | | Uint8 padding2; |
| | | } SDL_JoyHatEvent; |
| | | |
| | | /** |
| | | * \brief Joystick button event structure (event.jbutton.*) |
| | | */ |
| | | typedef struct SDL_JoyButtonEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */ |
| | | Uint32 timestamp; |
| | | SDL_JoystickID which; /**< The joystick instance id */ |
| | | Uint8 button; /**< The joystick button index */ |
| | | Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ |
| | | Uint8 padding1; |
| | | Uint8 padding2; |
| | | } SDL_JoyButtonEvent; |
| | | |
| | | /** |
| | | * \brief Joystick device event structure (event.jdevice.*) |
| | | */ |
| | | typedef struct SDL_JoyDeviceEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */ |
| | | Uint32 timestamp; |
| | | Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED event */ |
| | | } SDL_JoyDeviceEvent; |
| | | |
| | | |
| | | /** |
| | | * \brief Game controller axis motion event structure (event.caxis.*) |
| | | */ |
| | | typedef struct SDL_ControllerAxisEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_CONTROLLERAXISMOTION */ |
| | | Uint32 timestamp; |
| | | SDL_JoystickID which; /**< The joystick instance id */ |
| | | Uint8 axis; /**< The controller axis (SDL_GameControllerAxis) */ |
| | | Uint8 padding1; |
| | | Uint8 padding2; |
| | | Uint8 padding3; |
| | | Sint16 value; /**< The axis value (range: -32768 to 32767) */ |
| | | Uint16 padding4; |
| | | } SDL_ControllerAxisEvent; |
| | | |
| | | |
| | | /** |
| | | * \brief Game controller button event structure (event.cbutton.*) |
| | | */ |
| | | typedef struct SDL_ControllerButtonEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */ |
| | | Uint32 timestamp; |
| | | SDL_JoystickID which; /**< The joystick instance id */ |
| | | Uint8 button; /**< The controller button (SDL_GameControllerButton) */ |
| | | Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ |
| | | Uint8 padding1; |
| | | Uint8 padding2; |
| | | } SDL_ControllerButtonEvent; |
| | | |
| | | |
| | | /** |
| | | * \brief Controller device event structure (event.cdevice.*) |
| | | */ |
| | | typedef struct SDL_ControllerDeviceEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, or ::SDL_CONTROLLERDEVICEREMAPPED */ |
| | | Uint32 timestamp; |
| | | Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ |
| | | } SDL_ControllerDeviceEvent; |
| | | |
| | | |
| | | /** |
| | | * \brief Touch finger event structure (event.tfinger.*) |
| | | */ |
| | | typedef struct SDL_TouchFingerEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */ |
| | | Uint32 timestamp; |
| | | SDL_TouchID touchId; /**< The touch device id */ |
| | | SDL_FingerID fingerId; |
| | | float x; /**< Normalized in the range 0...1 */ |
| | | float y; /**< Normalized in the range 0...1 */ |
| | | float dx; /**< Normalized in the range 0...1 */ |
| | | float dy; /**< Normalized in the range 0...1 */ |
| | | float pressure; /**< Normalized in the range 0...1 */ |
| | | } SDL_TouchFingerEvent; |
| | | |
| | | |
| | | /** |
| | | * \brief Multiple Finger Gesture Event (event.mgesture.*) |
| | | */ |
| | | typedef struct SDL_MultiGestureEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_MULTIGESTURE */ |
| | | Uint32 timestamp; |
| | | SDL_TouchID touchId; /**< The touch device index */ |
| | | float dTheta; |
| | | float dDist; |
| | | float x; |
| | | float y; |
| | | Uint16 numFingers; |
| | | Uint16 padding; |
| | | } SDL_MultiGestureEvent; |
| | | |
| | | |
| | | /* (event.dgesture.*) */ |
| | | typedef struct SDL_DollarGestureEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_DOLLARGESTURE */ |
| | | Uint32 timestamp; |
| | | SDL_TouchID touchId; /**< The touch device id */ |
| | | SDL_GestureID gestureId; |
| | | Uint32 numFingers; |
| | | float error; |
| | | float x; /**< Normalized center of gesture */ |
| | | float y; /**< Normalized center of gesture */ |
| | | } SDL_DollarGestureEvent; |
| | | |
| | | |
| | | /** |
| | | * \brief An event used to request a file open by the system (event.drop.*) |
| | | * This event is disabled by default, you can enable it with SDL_EventState() |
| | | * \note If you enable this event, you must free the filename in the event. |
| | | */ |
| | | typedef struct SDL_DropEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_DROPFILE */ |
| | | Uint32 timestamp; |
| | | char *file; /**< The file name, which should be freed with SDL_free() */ |
| | | } SDL_DropEvent; |
| | | |
| | | |
| | | /** |
| | | * \brief The "quit requested" event |
| | | */ |
| | | typedef struct SDL_QuitEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_QUIT */ |
| | | Uint32 timestamp; |
| | | } SDL_QuitEvent; |
| | | |
| | | /** |
| | | * \brief OS Specific event |
| | | */ |
| | | typedef struct SDL_OSEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_QUIT */ |
| | | Uint32 timestamp; |
| | | } SDL_OSEvent; |
| | | |
| | | /** |
| | | * \brief A user-defined event type (event.user.*) |
| | | */ |
| | | typedef struct SDL_UserEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_USEREVENT through ::SDL_NUMEVENTS-1 */ |
| | | Uint32 timestamp; |
| | | Uint32 windowID; /**< The associated window if any */ |
| | | Sint32 code; /**< User defined event code */ |
| | | void *data1; /**< User defined data pointer */ |
| | | void *data2; /**< User defined data pointer */ |
| | | } SDL_UserEvent; |
| | | |
| | | |
| | | struct SDL_SysWMmsg; |
| | | typedef struct SDL_SysWMmsg SDL_SysWMmsg; |
| | | |
| | | /** |
| | | * \brief A video driver dependent system event (event.syswm.*) |
| | | * This event is disabled by default, you can enable it with SDL_EventState() |
| | | * |
| | | * \note If you want to use this event, you should include SDL_syswm.h. |
| | | */ |
| | | typedef struct SDL_SysWMEvent |
| | | { |
| | | Uint32 type; /**< ::SDL_SYSWMEVENT */ |
| | | Uint32 timestamp; |
| | | SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */ |
| | | } SDL_SysWMEvent; |
| | | |
| | | /** |
| | | * \brief General event structure |
| | | */ |
| | | typedef union SDL_Event |
| | | { |
| | | Uint32 type; /**< Event type, shared with all events */ |
| | | SDL_CommonEvent common; /**< Common event data */ |
| | | SDL_WindowEvent window; /**< Window event data */ |
| | | SDL_KeyboardEvent key; /**< Keyboard event data */ |
| | | SDL_TextEditingEvent edit; /**< Text editing event data */ |
| | | SDL_TextInputEvent text; /**< Text input event data */ |
| | | SDL_MouseMotionEvent motion; /**< Mouse motion event data */ |
| | | SDL_MouseButtonEvent button; /**< Mouse button event data */ |
| | | SDL_MouseWheelEvent wheel; /**< Mouse wheel event data */ |
| | | SDL_JoyAxisEvent jaxis; /**< Joystick axis event data */ |
| | | SDL_JoyBallEvent jball; /**< Joystick ball event data */ |
| | | SDL_JoyHatEvent jhat; /**< Joystick hat event data */ |
| | | SDL_JoyButtonEvent jbutton; /**< Joystick button event data */ |
| | | SDL_JoyDeviceEvent jdevice; /**< Joystick device change event data */ |
| | | SDL_ControllerAxisEvent caxis; /**< Game Controller axis event data */ |
| | | SDL_ControllerButtonEvent cbutton; /**< Game Controller button event data */ |
| | | SDL_ControllerDeviceEvent cdevice; /**< Game Controller device event data */ |
| | | SDL_QuitEvent quit; /**< Quit request event data */ |
| | | SDL_UserEvent user; /**< Custom event data */ |
| | | SDL_SysWMEvent syswm; /**< System dependent window event data */ |
| | | SDL_TouchFingerEvent tfinger; /**< Touch finger event data */ |
| | | SDL_MultiGestureEvent mgesture; /**< Gesture event data */ |
| | | SDL_DollarGestureEvent dgesture; /**< Gesture event data */ |
| | | SDL_DropEvent drop; /**< Drag and drop event data */ |
| | | |
| | | /* This is necessary for ABI compatibility between Visual C++ and GCC |
| | | Visual C++ will respect the push pack pragma and use 52 bytes for |
| | | this structure, and GCC will use the alignment of the largest datatype |
| | | within the union, which is 8 bytes. |
| | | |
| | | So... we'll add padding to force the size to be 56 bytes for both. |
| | | */ |
| | | Uint8 padding[56]; |
| | | } SDL_Event; |
| | | |
| | | |
| | | /* Function prototypes */ |
| | | |
| | | /** |
| | | * Pumps the event loop, gathering events from the input devices. |
| | | * |
| | | * This function updates the event queue and internal input device state. |
| | | * |
| | | * This should only be run in the thread that sets the video mode. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_PumpEvents(void); |
| | | |
| | | /*@{*/ |
| | | typedef enum |
| | | { |
| | | SDL_ADDEVENT, |
| | | SDL_PEEKEVENT, |
| | | SDL_GETEVENT |
| | | } SDL_eventaction; |
| | | |
| | | /** |
| | | * Checks the event queue for messages and optionally returns them. |
| | | * |
| | | * If \c action is ::SDL_ADDEVENT, up to \c numevents events will be added to |
| | | * the back of the event queue. |
| | | * |
| | | * If \c action is ::SDL_PEEKEVENT, up to \c numevents events at the front |
| | | * of the event queue, within the specified minimum and maximum type, |
| | | * will be returned and will not be removed from the queue. |
| | | * |
| | | * If \c action is ::SDL_GETEVENT, up to \c numevents events at the front |
| | | * of the event queue, within the specified minimum and maximum type, |
| | | * will be returned and will be removed from the queue. |
| | | * |
| | | * \return The number of events actually stored, or -1 if there was an error. |
| | | * |
| | | * This function is thread-safe. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents, |
| | | SDL_eventaction action, |
| | | Uint32 minType, Uint32 maxType); |
| | | /*@}*/ |
| | | |
| | | /** |
| | | * Checks to see if certain event types are in the event queue. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 type); |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType); |
| | | |
| | | /** |
| | | * This function clears events from the event queue |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type); |
| | | extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType); |
| | | |
| | | /** |
| | | * \brief Polls for currently pending events. |
| | | * |
| | | * \return 1 if there are any pending events, or 0 if there are none available. |
| | | * |
| | | * \param event If not NULL, the next event is removed from the queue and |
| | | * stored in that area. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event); |
| | | |
| | | /** |
| | | * \brief Waits indefinitely for the next available event. |
| | | * |
| | | * \return 1, or 0 if there was an error while waiting for events. |
| | | * |
| | | * \param event If not NULL, the next event is removed from the queue and |
| | | * stored in that area. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event); |
| | | |
| | | /** |
| | | * \brief Waits until the specified timeout (in milliseconds) for the next |
| | | * available event. |
| | | * |
| | | * \return 1, or 0 if there was an error while waiting for events. |
| | | * |
| | | * \param event If not NULL, the next event is removed from the queue and |
| | | * stored in that area. |
| | | * \param timeout The timeout (in milliseconds) to wait for next event. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event * event, |
| | | int timeout); |
| | | |
| | | /** |
| | | * \brief Add an event to the event queue. |
| | | * |
| | | * \return 1 on success, 0 if the event was filtered, or -1 if the event queue |
| | | * was full or there was some other error. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event); |
| | | |
| | | typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event); |
| | | |
| | | /** |
| | | * Sets up a filter to process all events before they change internal state and |
| | | * are posted to the internal event queue. |
| | | * |
| | | * The filter is prototyped as: |
| | | * \code |
| | | * int SDL_EventFilter(void *userdata, SDL_Event * event); |
| | | * \endcode |
| | | * |
| | | * If the filter returns 1, then the event will be added to the internal queue. |
| | | * If it returns 0, then the event will be dropped from the queue, but the |
| | | * internal state will still be updated. This allows selective filtering of |
| | | * dynamically arriving events. |
| | | * |
| | | * \warning Be very careful of what you do in the event filter function, as |
| | | * it may run in a different thread! |
| | | * |
| | | * There is one caveat when dealing with the ::SDL_QUITEVENT event type. The |
| | | * event filter is only called when the window manager desires to close the |
| | | * application window. If the event filter returns 1, then the window will |
| | | * be closed, otherwise the window will remain open if possible. |
| | | * |
| | | * If the quit event is generated by an interrupt signal, it will bypass the |
| | | * internal queue and be delivered to the application at the next event poll. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter, |
| | | void *userdata); |
| | | |
| | | /** |
| | | * Return the current event filter - can be used to "chain" filters. |
| | | * If there is no event filter set, this function returns SDL_FALSE. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter, |
| | | void **userdata); |
| | | |
| | | /** |
| | | * Add a function which is called when an event is added to the queue. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_AddEventWatch(SDL_EventFilter filter, |
| | | void *userdata); |
| | | |
| | | /** |
| | | * Remove an event watch function added with SDL_AddEventWatch() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter, |
| | | void *userdata); |
| | | |
| | | /** |
| | | * Run the filter function on the current event queue, removing any |
| | | * events for which the filter returns 0. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, |
| | | void *userdata); |
| | | |
| | | /*@{*/ |
| | | #define SDL_QUERY -1 |
| | | #define SDL_IGNORE 0 |
| | | #define SDL_DISABLE 0 |
| | | #define SDL_ENABLE 1 |
| | | |
| | | /** |
| | | * This function allows you to set the state of processing certain events. |
| | | * - If \c state is set to ::SDL_IGNORE, that event will be automatically |
| | | * dropped from the event queue and will not event be filtered. |
| | | * - If \c state is set to ::SDL_ENABLE, that event will be processed |
| | | * normally. |
| | | * - If \c state is set to ::SDL_QUERY, SDL_EventState() will return the |
| | | * current processing state of the specified event. |
| | | */ |
| | | extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint32 type, int state); |
| | | /*@}*/ |
| | | #define SDL_GetEventState(type) SDL_EventState(type, SDL_QUERY) |
| | | |
| | | /** |
| | | * This function allocates a set of user-defined events, and returns |
| | | * the beginning event number for that set of events. |
| | | * |
| | | * If there aren't enough user-defined events left, this function |
| | | * returns (Uint32)-1 |
| | | */ |
| | | extern DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_events_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_gamecontroller.h |
| | | * |
| | | * Include file for SDL game controller event handling |
| | | */ |
| | | |
| | | #ifndef _SDL_gamecontroller_h |
| | | #define _SDL_gamecontroller_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | #include "SDL_joystick.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \file SDL_gamecontroller.h |
| | | * |
| | | * In order to use these functions, SDL_Init() must have been called |
| | | * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system |
| | | * for game controllers, and load appropriate drivers. |
| | | */ |
| | | |
| | | /* The gamecontroller structure used to identify an SDL game controller */ |
| | | struct _SDL_GameController; |
| | | typedef struct _SDL_GameController SDL_GameController; |
| | | |
| | | |
| | | typedef enum |
| | | { |
| | | SDL_CONTROLLER_BINDTYPE_NONE = 0, |
| | | SDL_CONTROLLER_BINDTYPE_BUTTON, |
| | | SDL_CONTROLLER_BINDTYPE_AXIS, |
| | | SDL_CONTROLLER_BINDTYPE_HAT |
| | | } SDL_GameControllerBindType; |
| | | |
| | | /** |
| | | * Get the SDL joystick layer binding for this controller button/axis mapping |
| | | */ |
| | | typedef struct SDL_GameControllerButtonBind |
| | | { |
| | | SDL_GameControllerBindType bindType; |
| | | union |
| | | { |
| | | int button; |
| | | int axis; |
| | | struct { |
| | | int hat; |
| | | int hat_mask; |
| | | } hat; |
| | | } value; |
| | | |
| | | } SDL_GameControllerButtonBind; |
| | | |
| | | |
| | | /** |
| | | * To count the number of game controllers in the system for the following: |
| | | * int nJoysticks = SDL_NumJoysticks(); |
| | | * int nGameControllers = 0; |
| | | * for ( int i = 0; i < nJoysticks; i++ ) { |
| | | * if ( SDL_IsGameController(i) ) { |
| | | * nGameControllers++; |
| | | * } |
| | | * } |
| | | * |
| | | * Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is: |
| | | * guid,name,mappings |
| | | * |
| | | * Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones. |
| | | * Under Windows there is a reserved GUID of "xinput" that covers any XInput devices. |
| | | * The mapping format for joystick is: |
| | | * bX - a joystick button, index X |
| | | * hX.Y - hat X with value Y |
| | | * aX - axis X of the joystick |
| | | * Buttons can be used as a controller axis and vice versa. |
| | | * |
| | | * This string shows an example of a valid mapping for a controller |
| | | * "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", |
| | | * |
| | | */ |
| | | |
| | | /** |
| | | * Add or update an existing mapping configuration |
| | | * |
| | | * \return 1 if mapping is added, 0 if updated, -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping( const char* mappingString ); |
| | | |
| | | /** |
| | | * Get a mapping string for a GUID |
| | | * |
| | | * \return the mapping string. Must be freed with SDL_free. Returns NULL if no mapping is available |
| | | */ |
| | | extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForGUID( SDL_JoystickGUID guid ); |
| | | |
| | | /** |
| | | * Get a mapping string for an open GameController |
| | | * |
| | | * \return the mapping string. Must be freed with SDL_free. Returns NULL if no mapping is available |
| | | */ |
| | | extern DECLSPEC char * SDLCALL SDL_GameControllerMapping( SDL_GameController * gamecontroller ); |
| | | |
| | | /** |
| | | * Is the joystick on this index supported by the game controller interface? |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index); |
| | | |
| | | |
| | | /** |
| | | * Get the implementation dependent name of a game controller. |
| | | * This can be called before any controllers are opened. |
| | | * If no name can be found, this function returns NULL. |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_index); |
| | | |
| | | /** |
| | | * Open a game controller for use. |
| | | * The index passed as an argument refers to the N'th game controller on the system. |
| | | * This index is the value which will identify this controller in future controller |
| | | * events. |
| | | * |
| | | * \return A controller identifier, or NULL if an error occurred. |
| | | */ |
| | | extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerOpen(int joystick_index); |
| | | |
| | | /** |
| | | * Return the name for this currently opened controller |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *gamecontroller); |
| | | |
| | | /** |
| | | * Returns SDL_TRUE if the controller has been opened and currently connected, |
| | | * or SDL_FALSE if it has not. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerGetAttached(SDL_GameController *gamecontroller); |
| | | |
| | | /** |
| | | * Get the underlying joystick object used by a controller |
| | | */ |
| | | extern DECLSPEC SDL_Joystick *SDLCALL SDL_GameControllerGetJoystick(SDL_GameController *gamecontroller); |
| | | |
| | | /** |
| | | * Enable/disable controller event polling. |
| | | * |
| | | * If controller events are disabled, you must call SDL_GameControllerUpdate() |
| | | * yourself and check the state of the controller when you want controller |
| | | * information. |
| | | * |
| | | * The state can be one of ::SDL_QUERY, ::SDL_ENABLE or ::SDL_IGNORE. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GameControllerEventState(int state); |
| | | |
| | | /** |
| | | * Update the current state of the open game controllers. |
| | | * |
| | | * This is called automatically by the event loop if any game controller |
| | | * events are enabled. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GameControllerUpdate(void); |
| | | |
| | | |
| | | /** |
| | | * The list of axes available from a controller |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_CONTROLLER_AXIS_INVALID = -1, |
| | | SDL_CONTROLLER_AXIS_LEFTX, |
| | | SDL_CONTROLLER_AXIS_LEFTY, |
| | | SDL_CONTROLLER_AXIS_RIGHTX, |
| | | SDL_CONTROLLER_AXIS_RIGHTY, |
| | | SDL_CONTROLLER_AXIS_TRIGGERLEFT, |
| | | SDL_CONTROLLER_AXIS_TRIGGERRIGHT, |
| | | SDL_CONTROLLER_AXIS_MAX |
| | | } SDL_GameControllerAxis; |
| | | |
| | | /** |
| | | * turn this string into a axis mapping |
| | | */ |
| | | extern DECLSPEC SDL_GameControllerAxis SDLCALL SDL_GameControllerGetAxisFromString(const char *pchString); |
| | | |
| | | /** |
| | | * turn this axis enum into a string mapping |
| | | */ |
| | | extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis); |
| | | |
| | | /** |
| | | * Get the SDL joystick layer binding for this controller button mapping |
| | | */ |
| | | extern DECLSPEC SDL_GameControllerButtonBind SDLCALL |
| | | SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, |
| | | SDL_GameControllerAxis axis); |
| | | |
| | | /** |
| | | * Get the current state of an axis control on a game controller. |
| | | * |
| | | * The state is a value ranging from -32768 to 32767. |
| | | * |
| | | * The axis indices start at index 0. |
| | | */ |
| | | extern DECLSPEC Sint16 SDLCALL |
| | | SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, |
| | | SDL_GameControllerAxis axis); |
| | | |
| | | /** |
| | | * The list of buttons available from a controller |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_CONTROLLER_BUTTON_INVALID = -1, |
| | | SDL_CONTROLLER_BUTTON_A, |
| | | SDL_CONTROLLER_BUTTON_B, |
| | | SDL_CONTROLLER_BUTTON_X, |
| | | SDL_CONTROLLER_BUTTON_Y, |
| | | SDL_CONTROLLER_BUTTON_BACK, |
| | | SDL_CONTROLLER_BUTTON_GUIDE, |
| | | SDL_CONTROLLER_BUTTON_START, |
| | | SDL_CONTROLLER_BUTTON_LEFTSTICK, |
| | | SDL_CONTROLLER_BUTTON_RIGHTSTICK, |
| | | SDL_CONTROLLER_BUTTON_LEFTSHOULDER, |
| | | SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, |
| | | SDL_CONTROLLER_BUTTON_DPAD_UP, |
| | | SDL_CONTROLLER_BUTTON_DPAD_DOWN, |
| | | SDL_CONTROLLER_BUTTON_DPAD_LEFT, |
| | | SDL_CONTROLLER_BUTTON_DPAD_RIGHT, |
| | | SDL_CONTROLLER_BUTTON_MAX |
| | | } SDL_GameControllerButton; |
| | | |
| | | /** |
| | | * turn this string into a button mapping |
| | | */ |
| | | extern DECLSPEC SDL_GameControllerButton SDLCALL SDL_GameControllerGetButtonFromString(const char *pchString); |
| | | |
| | | /** |
| | | * turn this button enum into a string mapping |
| | | */ |
| | | extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForButton(SDL_GameControllerButton button); |
| | | |
| | | /** |
| | | * Get the SDL joystick layer binding for this controller button mapping |
| | | */ |
| | | extern DECLSPEC SDL_GameControllerButtonBind SDLCALL |
| | | SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller, |
| | | SDL_GameControllerButton button); |
| | | |
| | | |
| | | /** |
| | | * Get the current state of a button on a game controller. |
| | | * |
| | | * The button indices start at index 0. |
| | | */ |
| | | extern DECLSPEC Uint8 SDLCALL SDL_GameControllerGetButton(SDL_GameController *gamecontroller, |
| | | SDL_GameControllerButton button); |
| | | |
| | | /** |
| | | * Close a controller previously opened with SDL_GameControllerOpen(). |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GameControllerClose(SDL_GameController *gamecontroller); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_gamecontroller_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_gesture.h |
| | | * |
| | | * Include file for SDL gesture event handling. |
| | | */ |
| | | |
| | | #ifndef _SDL_gesture_h |
| | | #define _SDL_gesture_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | #include "SDL_video.h" |
| | | |
| | | #include "SDL_touch.h" |
| | | |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | typedef Sint64 SDL_GestureID; |
| | | |
| | | /* Function prototypes */ |
| | | |
| | | /** |
| | | * \brief Begin Recording a gesture on the specified touch, or all touches (-1) |
| | | * |
| | | * |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RecordGesture(SDL_TouchID touchId); |
| | | |
| | | |
| | | /** |
| | | * \brief Save all currently loaded Dollar Gesture templates |
| | | * |
| | | * |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(SDL_RWops *src); |
| | | |
| | | /** |
| | | * \brief Save a currently loaded Dollar Gesture template |
| | | * |
| | | * |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *src); |
| | | |
| | | |
| | | /** |
| | | * \brief Load Dollar Gesture templates from a file |
| | | * |
| | | * |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_gesture_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_haptic.h |
| | | * |
| | | * \brief The SDL Haptic subsystem allows you to control haptic (force feedback) |
| | | * devices. |
| | | * |
| | | * The basic usage is as follows: |
| | | * - Initialize the Subsystem (::SDL_INIT_HAPTIC). |
| | | * - Open a Haptic Device. |
| | | * - SDL_HapticOpen() to open from index. |
| | | * - SDL_HapticOpenFromJoystick() to open from an existing joystick. |
| | | * - Create an effect (::SDL_HapticEffect). |
| | | * - Upload the effect with SDL_HapticNewEffect(). |
| | | * - Run the effect with SDL_HapticRunEffect(). |
| | | * - (optional) Free the effect with SDL_HapticDestroyEffect(). |
| | | * - Close the haptic device with SDL_HapticClose(). |
| | | * |
| | | * \par Simple rumble example: |
| | | * \code |
| | | * SDL_Haptic *haptic; |
| | | * |
| | | * // Open the device |
| | | * haptic = SDL_HapticOpen( 0 ); |
| | | * if (haptic == NULL) |
| | | * return -1; |
| | | * |
| | | * // Initialize simple rumble |
| | | * if (SDL_HapticRumbleInit( haptic ) != 0) |
| | | * return -1; |
| | | * |
| | | * // Play effect at 50% strength for 2 seconds |
| | | * if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0) |
| | | * return -1; |
| | | * SDL_Delay( 2000 ); |
| | | * |
| | | * // Clean up |
| | | * SDL_HapticClose( haptic ); |
| | | * \endcode |
| | | * |
| | | * \par Complete example: |
| | | * \code |
| | | * int test_haptic( SDL_Joystick * joystick ) { |
| | | * SDL_Haptic *haptic; |
| | | * SDL_HapticEffect effect; |
| | | * int effect_id; |
| | | * |
| | | * // Open the device |
| | | * haptic = SDL_HapticOpenFromJoystick( joystick ); |
| | | * if (haptic == NULL) return -1; // Most likely joystick isn't haptic |
| | | * |
| | | * // See if it can do sine waves |
| | | * if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) { |
| | | * SDL_HapticClose(haptic); // No sine effect |
| | | * return -1; |
| | | * } |
| | | * |
| | | * // Create the effect |
| | | * memset( &effect, 0, sizeof(SDL_HapticEffect) ); // 0 is safe default |
| | | * effect.type = SDL_HAPTIC_SINE; |
| | | * effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates |
| | | * effect.periodic.direction.dir[0] = 18000; // Force comes from south |
| | | * effect.periodic.period = 1000; // 1000 ms |
| | | * effect.periodic.magnitude = 20000; // 20000/32767 strength |
| | | * effect.periodic.length = 5000; // 5 seconds long |
| | | * effect.periodic.attack_length = 1000; // Takes 1 second to get max strength |
| | | * effect.periodic.fade_length = 1000; // Takes 1 second to fade away |
| | | * |
| | | * // Upload the effect |
| | | * effect_id = SDL_HapticNewEffect( haptic, &effect ); |
| | | * |
| | | * // Test the effect |
| | | * SDL_HapticRunEffect( haptic, effect_id, 1 ); |
| | | * SDL_Delay( 5000); // Wait for the effect to finish |
| | | * |
| | | * // We destroy the effect, although closing the device also does this |
| | | * SDL_HapticDestroyEffect( haptic, effect_id ); |
| | | * |
| | | * // Close the device |
| | | * SDL_HapticClose(haptic); |
| | | * |
| | | * return 0; // Success |
| | | * } |
| | | * \endcode |
| | | * |
| | | * You can also find out more information on my blog: |
| | | * http://bobbens.dyndns.org/journal/2010/sdl_haptic/ |
| | | * |
| | | * \author Edgar Simo Serra |
| | | */ |
| | | |
| | | #ifndef _SDL_haptic_h |
| | | #define _SDL_haptic_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | #include "SDL_joystick.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif /* __cplusplus */ |
| | | |
| | | /** |
| | | * \typedef SDL_Haptic |
| | | * |
| | | * \brief The haptic structure used to identify an SDL haptic. |
| | | * |
| | | * \sa SDL_HapticOpen |
| | | * \sa SDL_HapticOpenFromJoystick |
| | | * \sa SDL_HapticClose |
| | | */ |
| | | struct _SDL_Haptic; |
| | | typedef struct _SDL_Haptic SDL_Haptic; |
| | | |
| | | |
| | | /** |
| | | * \name Haptic features |
| | | * |
| | | * Different haptic features a device can have. |
| | | */ |
| | | /*@{*/ |
| | | |
| | | /** |
| | | * \name Haptic effects |
| | | */ |
| | | /*@{*/ |
| | | |
| | | /** |
| | | * \brief Constant effect supported. |
| | | * |
| | | * Constant haptic effect. |
| | | * |
| | | * \sa SDL_HapticCondition |
| | | */ |
| | | #define SDL_HAPTIC_CONSTANT (1<<0) |
| | | |
| | | /** |
| | | * \brief Sine wave effect supported. |
| | | * |
| | | * Periodic haptic effect that simulates sine waves. |
| | | * |
| | | * \sa SDL_HapticPeriodic |
| | | */ |
| | | #define SDL_HAPTIC_SINE (1<<1) |
| | | |
| | | /** |
| | | * \brief Square wave effect supported. |
| | | * |
| | | * Periodic haptic effect that simulates square waves. |
| | | * |
| | | * \sa SDL_HapticPeriodic |
| | | */ |
| | | #define SDL_HAPTIC_SQUARE (1<<2) |
| | | |
| | | /** |
| | | * \brief Triangle wave effect supported. |
| | | * |
| | | * Periodic haptic effect that simulates triangular waves. |
| | | * |
| | | * \sa SDL_HapticPeriodic |
| | | */ |
| | | #define SDL_HAPTIC_TRIANGLE (1<<3) |
| | | |
| | | /** |
| | | * \brief Sawtoothup wave effect supported. |
| | | * |
| | | * Periodic haptic effect that simulates saw tooth up waves. |
| | | * |
| | | * \sa SDL_HapticPeriodic |
| | | */ |
| | | #define SDL_HAPTIC_SAWTOOTHUP (1<<4) |
| | | |
| | | /** |
| | | * \brief Sawtoothdown wave effect supported. |
| | | * |
| | | * Periodic haptic effect that simulates saw tooth down waves. |
| | | * |
| | | * \sa SDL_HapticPeriodic |
| | | */ |
| | | #define SDL_HAPTIC_SAWTOOTHDOWN (1<<5) |
| | | |
| | | /** |
| | | * \brief Ramp effect supported. |
| | | * |
| | | * Ramp haptic effect. |
| | | * |
| | | * \sa SDL_HapticRamp |
| | | */ |
| | | #define SDL_HAPTIC_RAMP (1<<6) |
| | | |
| | | /** |
| | | * \brief Spring effect supported - uses axes position. |
| | | * |
| | | * Condition haptic effect that simulates a spring. Effect is based on the |
| | | * axes position. |
| | | * |
| | | * \sa SDL_HapticCondition |
| | | */ |
| | | #define SDL_HAPTIC_SPRING (1<<7) |
| | | |
| | | /** |
| | | * \brief Damper effect supported - uses axes velocity. |
| | | * |
| | | * Condition haptic effect that simulates dampening. Effect is based on the |
| | | * axes velocity. |
| | | * |
| | | * \sa SDL_HapticCondition |
| | | */ |
| | | #define SDL_HAPTIC_DAMPER (1<<8) |
| | | |
| | | /** |
| | | * \brief Inertia effect supported - uses axes acceleration. |
| | | * |
| | | * Condition haptic effect that simulates inertia. Effect is based on the axes |
| | | * acceleration. |
| | | * |
| | | * \sa SDL_HapticCondition |
| | | */ |
| | | #define SDL_HAPTIC_INERTIA (1<<9) |
| | | |
| | | /** |
| | | * \brief Friction effect supported - uses axes movement. |
| | | * |
| | | * Condition haptic effect that simulates friction. Effect is based on the |
| | | * axes movement. |
| | | * |
| | | * \sa SDL_HapticCondition |
| | | */ |
| | | #define SDL_HAPTIC_FRICTION (1<<10) |
| | | |
| | | /** |
| | | * \brief Custom effect is supported. |
| | | * |
| | | * User defined custom haptic effect. |
| | | */ |
| | | #define SDL_HAPTIC_CUSTOM (1<<11) |
| | | |
| | | /*@}*//*Haptic effects*/ |
| | | |
| | | /* These last few are features the device has, not effects */ |
| | | |
| | | /** |
| | | * \brief Device can set global gain. |
| | | * |
| | | * Device supports setting the global gain. |
| | | * |
| | | * \sa SDL_HapticSetGain |
| | | */ |
| | | #define SDL_HAPTIC_GAIN (1<<12) |
| | | |
| | | /** |
| | | * \brief Device can set autocenter. |
| | | * |
| | | * Device supports setting autocenter. |
| | | * |
| | | * \sa SDL_HapticSetAutocenter |
| | | */ |
| | | #define SDL_HAPTIC_AUTOCENTER (1<<13) |
| | | |
| | | /** |
| | | * \brief Device can be queried for effect status. |
| | | * |
| | | * Device can be queried for effect status. |
| | | * |
| | | * \sa SDL_HapticGetEffectStatus |
| | | */ |
| | | #define SDL_HAPTIC_STATUS (1<<14) |
| | | |
| | | /** |
| | | * \brief Device can be paused. |
| | | * |
| | | * \sa SDL_HapticPause |
| | | * \sa SDL_HapticUnpause |
| | | */ |
| | | #define SDL_HAPTIC_PAUSE (1<<15) |
| | | |
| | | |
| | | /** |
| | | * \name Direction encodings |
| | | */ |
| | | /*@{*/ |
| | | |
| | | /** |
| | | * \brief Uses polar coordinates for the direction. |
| | | * |
| | | * \sa SDL_HapticDirection |
| | | */ |
| | | #define SDL_HAPTIC_POLAR 0 |
| | | |
| | | /** |
| | | * \brief Uses cartesian coordinates for the direction. |
| | | * |
| | | * \sa SDL_HapticDirection |
| | | */ |
| | | #define SDL_HAPTIC_CARTESIAN 1 |
| | | |
| | | /** |
| | | * \brief Uses spherical coordinates for the direction. |
| | | * |
| | | * \sa SDL_HapticDirection |
| | | */ |
| | | #define SDL_HAPTIC_SPHERICAL 2 |
| | | |
| | | /*@}*//*Direction encodings*/ |
| | | |
| | | /*@}*//*Haptic features*/ |
| | | |
| | | /* |
| | | * Misc defines. |
| | | */ |
| | | |
| | | /** |
| | | * \brief Used to play a device an infinite number of times. |
| | | * |
| | | * \sa SDL_HapticRunEffect |
| | | */ |
| | | #define SDL_HAPTIC_INFINITY 4294967295U |
| | | |
| | | |
| | | /** |
| | | * \brief Structure that represents a haptic direction. |
| | | * |
| | | * Directions can be specified by: |
| | | * - ::SDL_HAPTIC_POLAR : Specified by polar coordinates. |
| | | * - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. |
| | | * - ::SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates. |
| | | * |
| | | * Cardinal directions of the haptic device are relative to the positioning |
| | | * of the device. North is considered to be away from the user. |
| | | * |
| | | * The following diagram represents the cardinal directions: |
| | | * \verbatim |
| | | .--. |
| | | |__| .-------. |
| | | |=.| |.-----.| |
| | | |--| || || |
| | | | | |'-----'| |
| | | |__|~')_____(' |
| | | [ COMPUTER ] |
| | | |
| | | |
| | | North (0,-1) |
| | | ^ |
| | | | |
| | | | |
| | | (1,0) West <----[ HAPTIC ]----> East (-1,0) |
| | | | |
| | | | |
| | | v |
| | | South (0,1) |
| | | |
| | | |
| | | [ USER ] |
| | | \|||/ |
| | | (o o) |
| | | ---ooO-(_)-Ooo--- |
| | | \endverbatim |
| | | * |
| | | * If type is ::SDL_HAPTIC_POLAR, direction is encoded by hundredths of a |
| | | * degree starting north and turning clockwise. ::SDL_HAPTIC_POLAR only uses |
| | | * the first \c dir parameter. The cardinal directions would be: |
| | | * - North: 0 (0 degrees) |
| | | * - East: 9000 (90 degrees) |
| | | * - South: 18000 (180 degrees) |
| | | * - West: 27000 (270 degrees) |
| | | * |
| | | * If type is ::SDL_HAPTIC_CARTESIAN, direction is encoded by three positions |
| | | * (X axis, Y axis and Z axis (with 3 axes)). ::SDL_HAPTIC_CARTESIAN uses |
| | | * the first three \c dir parameters. The cardinal directions would be: |
| | | * - North: 0,-1, 0 |
| | | * - East: -1, 0, 0 |
| | | * - South: 0, 1, 0 |
| | | * - West: 1, 0, 0 |
| | | * |
| | | * The Z axis represents the height of the effect if supported, otherwise |
| | | * it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you |
| | | * can use any multiple you want, only the direction matters. |
| | | * |
| | | * If type is ::SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. |
| | | * The first two \c dir parameters are used. The \c dir parameters are as |
| | | * follows (all values are in hundredths of degrees): |
| | | * - Degrees from (1, 0) rotated towards (0, 1). |
| | | * - Degrees towards (0, 0, 1) (device needs at least 3 axes). |
| | | * |
| | | * |
| | | * Example of force coming from the south with all encodings (force coming |
| | | * from the south means the user will have to pull the stick to counteract): |
| | | * \code |
| | | * SDL_HapticDirection direction; |
| | | * |
| | | * // Cartesian directions |
| | | * direction.type = SDL_HAPTIC_CARTESIAN; // Using cartesian direction encoding. |
| | | * direction.dir[0] = 0; // X position |
| | | * direction.dir[1] = 1; // Y position |
| | | * // Assuming the device has 2 axes, we don't need to specify third parameter. |
| | | * |
| | | * // Polar directions |
| | | * direction.type = SDL_HAPTIC_POLAR; // We'll be using polar direction encoding. |
| | | * direction.dir[0] = 18000; // Polar only uses first parameter |
| | | * |
| | | * // Spherical coordinates |
| | | * direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding |
| | | * direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters. |
| | | * \endcode |
| | | * |
| | | * \sa SDL_HAPTIC_POLAR |
| | | * \sa SDL_HAPTIC_CARTESIAN |
| | | * \sa SDL_HAPTIC_SPHERICAL |
| | | * \sa SDL_HapticEffect |
| | | * \sa SDL_HapticNumAxes |
| | | */ |
| | | typedef struct SDL_HapticDirection |
| | | { |
| | | Uint8 type; /**< The type of encoding. */ |
| | | Sint32 dir[3]; /**< The encoded direction. */ |
| | | } SDL_HapticDirection; |
| | | |
| | | |
| | | /** |
| | | * \brief A structure containing a template for a Constant effect. |
| | | * |
| | | * The struct is exclusive to the ::SDL_HAPTIC_CONSTANT effect. |
| | | * |
| | | * A constant effect applies a constant force in the specified direction |
| | | * to the joystick. |
| | | * |
| | | * \sa SDL_HAPTIC_CONSTANT |
| | | * \sa SDL_HapticEffect |
| | | */ |
| | | typedef struct SDL_HapticConstant |
| | | { |
| | | /* Header */ |
| | | Uint16 type; /**< ::SDL_HAPTIC_CONSTANT */ |
| | | SDL_HapticDirection direction; /**< Direction of the effect. */ |
| | | |
| | | /* Replay */ |
| | | Uint32 length; /**< Duration of the effect. */ |
| | | Uint16 delay; /**< Delay before starting the effect. */ |
| | | |
| | | /* Trigger */ |
| | | Uint16 button; /**< Button that triggers the effect. */ |
| | | Uint16 interval; /**< How soon it can be triggered again after button. */ |
| | | |
| | | /* Constant */ |
| | | Sint16 level; /**< Strength of the constant effect. */ |
| | | |
| | | /* Envelope */ |
| | | Uint16 attack_length; /**< Duration of the attack. */ |
| | | Uint16 attack_level; /**< Level at the start of the attack. */ |
| | | Uint16 fade_length; /**< Duration of the fade. */ |
| | | Uint16 fade_level; /**< Level at the end of the fade. */ |
| | | } SDL_HapticConstant; |
| | | |
| | | /** |
| | | * \brief A structure containing a template for a Periodic effect. |
| | | * |
| | | * The struct handles the following effects: |
| | | * - ::SDL_HAPTIC_SINE |
| | | * - ::SDL_HAPTIC_SQUARE |
| | | * - ::SDL_HAPTIC_TRIANGLE |
| | | * - ::SDL_HAPTIC_SAWTOOTHUP |
| | | * - ::SDL_HAPTIC_SAWTOOTHDOWN |
| | | * |
| | | * A periodic effect consists in a wave-shaped effect that repeats itself |
| | | * over time. The type determines the shape of the wave and the parameters |
| | | * determine the dimensions of the wave. |
| | | * |
| | | * Phase is given by hundredth of a cycle meaning that giving the phase a value |
| | | * of 9000 will displace it 25% of its period. Here are sample values: |
| | | * - 0: No phase displacement. |
| | | * - 9000: Displaced 25% of its period. |
| | | * - 18000: Displaced 50% of its period. |
| | | * - 27000: Displaced 75% of its period. |
| | | * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred. |
| | | * |
| | | * Examples: |
| | | * \verbatim |
| | | SDL_HAPTIC_SINE |
| | | __ __ __ __ |
| | | / \ / \ / \ / |
| | | / \__/ \__/ \__/ |
| | | |
| | | SDL_HAPTIC_SQUARE |
| | | __ __ __ __ __ |
| | | | | | | | | | | | | |
| | | | |__| |__| |__| |__| | |
| | | |
| | | SDL_HAPTIC_TRIANGLE |
| | | /\ /\ /\ /\ /\ |
| | | / \ / \ / \ / \ / |
| | | / \/ \/ \/ \/ |
| | | |
| | | SDL_HAPTIC_SAWTOOTHUP |
| | | /| /| /| /| /| /| /| |
| | | / | / | / | / | / | / | / | |
| | | / |/ |/ |/ |/ |/ |/ | |
| | | |
| | | SDL_HAPTIC_SAWTOOTHDOWN |
| | | \ |\ |\ |\ |\ |\ |\ | |
| | | \ | \ | \ | \ | \ | \ | \ | |
| | | \| \| \| \| \| \| \| |
| | | \endverbatim |
| | | * |
| | | * \sa SDL_HAPTIC_SINE |
| | | * \sa SDL_HAPTIC_SQUARE |
| | | * \sa SDL_HAPTIC_TRIANGLE |
| | | * \sa SDL_HAPTIC_SAWTOOTHUP |
| | | * \sa SDL_HAPTIC_SAWTOOTHDOWN |
| | | * \sa SDL_HapticEffect |
| | | */ |
| | | typedef struct SDL_HapticPeriodic |
| | | { |
| | | /* Header */ |
| | | Uint16 type; /**< ::SDL_HAPTIC_SINE, ::SDL_HAPTIC_SQUARE, |
| | | ::SDL_HAPTIC_TRIANGLE, ::SDL_HAPTIC_SAWTOOTHUP or |
| | | ::SDL_HAPTIC_SAWTOOTHDOWN */ |
| | | SDL_HapticDirection direction; /**< Direction of the effect. */ |
| | | |
| | | /* Replay */ |
| | | Uint32 length; /**< Duration of the effect. */ |
| | | Uint16 delay; /**< Delay before starting the effect. */ |
| | | |
| | | /* Trigger */ |
| | | Uint16 button; /**< Button that triggers the effect. */ |
| | | Uint16 interval; /**< How soon it can be triggered again after button. */ |
| | | |
| | | /* Periodic */ |
| | | Uint16 period; /**< Period of the wave. */ |
| | | Sint16 magnitude; /**< Peak value. */ |
| | | Sint16 offset; /**< Mean value of the wave. */ |
| | | Uint16 phase; /**< Horizontal shift given by hundredth of a cycle. */ |
| | | |
| | | /* Envelope */ |
| | | Uint16 attack_length; /**< Duration of the attack. */ |
| | | Uint16 attack_level; /**< Level at the start of the attack. */ |
| | | Uint16 fade_length; /**< Duration of the fade. */ |
| | | Uint16 fade_level; /**< Level at the end of the fade. */ |
| | | } SDL_HapticPeriodic; |
| | | |
| | | /** |
| | | * \brief A structure containing a template for a Condition effect. |
| | | * |
| | | * The struct handles the following effects: |
| | | * - ::SDL_HAPTIC_SPRING: Effect based on axes position. |
| | | * - ::SDL_HAPTIC_DAMPER: Effect based on axes velocity. |
| | | * - ::SDL_HAPTIC_INERTIA: Effect based on axes acceleration. |
| | | * - ::SDL_HAPTIC_FRICTION: Effect based on axes movement. |
| | | * |
| | | * Direction is handled by condition internals instead of a direction member. |
| | | * The condition effect specific members have three parameters. The first |
| | | * refers to the X axis, the second refers to the Y axis and the third |
| | | * refers to the Z axis. The right terms refer to the positive side of the |
| | | * axis and the left terms refer to the negative side of the axis. Please |
| | | * refer to the ::SDL_HapticDirection diagram for which side is positive and |
| | | * which is negative. |
| | | * |
| | | * \sa SDL_HapticDirection |
| | | * \sa SDL_HAPTIC_SPRING |
| | | * \sa SDL_HAPTIC_DAMPER |
| | | * \sa SDL_HAPTIC_INERTIA |
| | | * \sa SDL_HAPTIC_FRICTION |
| | | * \sa SDL_HapticEffect |
| | | */ |
| | | typedef struct SDL_HapticCondition |
| | | { |
| | | /* Header */ |
| | | Uint16 type; /**< ::SDL_HAPTIC_SPRING, ::SDL_HAPTIC_DAMPER, |
| | | ::SDL_HAPTIC_INERTIA or ::SDL_HAPTIC_FRICTION */ |
| | | SDL_HapticDirection direction; /**< Direction of the effect - Not used ATM. */ |
| | | |
| | | /* Replay */ |
| | | Uint32 length; /**< Duration of the effect. */ |
| | | Uint16 delay; /**< Delay before starting the effect. */ |
| | | |
| | | /* Trigger */ |
| | | Uint16 button; /**< Button that triggers the effect. */ |
| | | Uint16 interval; /**< How soon it can be triggered again after button. */ |
| | | |
| | | /* Condition */ |
| | | Uint16 right_sat[3]; /**< Level when joystick is to the positive side. */ |
| | | Uint16 left_sat[3]; /**< Level when joystick is to the negative side. */ |
| | | Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */ |
| | | Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */ |
| | | Uint16 deadband[3]; /**< Size of the dead zone. */ |
| | | Sint16 center[3]; /**< Position of the dead zone. */ |
| | | } SDL_HapticCondition; |
| | | |
| | | /** |
| | | * \brief A structure containing a template for a Ramp effect. |
| | | * |
| | | * This struct is exclusively for the ::SDL_HAPTIC_RAMP effect. |
| | | * |
| | | * The ramp effect starts at start strength and ends at end strength. |
| | | * It augments in linear fashion. If you use attack and fade with a ramp |
| | | * the effects get added to the ramp effect making the effect become |
| | | * quadratic instead of linear. |
| | | * |
| | | * \sa SDL_HAPTIC_RAMP |
| | | * \sa SDL_HapticEffect |
| | | */ |
| | | typedef struct SDL_HapticRamp |
| | | { |
| | | /* Header */ |
| | | Uint16 type; /**< ::SDL_HAPTIC_RAMP */ |
| | | SDL_HapticDirection direction; /**< Direction of the effect. */ |
| | | |
| | | /* Replay */ |
| | | Uint32 length; /**< Duration of the effect. */ |
| | | Uint16 delay; /**< Delay before starting the effect. */ |
| | | |
| | | /* Trigger */ |
| | | Uint16 button; /**< Button that triggers the effect. */ |
| | | Uint16 interval; /**< How soon it can be triggered again after button. */ |
| | | |
| | | /* Ramp */ |
| | | Sint16 start; /**< Beginning strength level. */ |
| | | Sint16 end; /**< Ending strength level. */ |
| | | |
| | | /* Envelope */ |
| | | Uint16 attack_length; /**< Duration of the attack. */ |
| | | Uint16 attack_level; /**< Level at the start of the attack. */ |
| | | Uint16 fade_length; /**< Duration of the fade. */ |
| | | Uint16 fade_level; /**< Level at the end of the fade. */ |
| | | } SDL_HapticRamp; |
| | | |
| | | /** |
| | | * \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect. |
| | | * |
| | | * A custom force feedback effect is much like a periodic effect, where the |
| | | * application can define its exact shape. You will have to allocate the |
| | | * data yourself. Data should consist of channels * samples Uint16 samples. |
| | | * |
| | | * If channels is one, the effect is rotated using the defined direction. |
| | | * Otherwise it uses the samples in data for the different axes. |
| | | * |
| | | * \sa SDL_HAPTIC_CUSTOM |
| | | * \sa SDL_HapticEffect |
| | | */ |
| | | typedef struct SDL_HapticCustom |
| | | { |
| | | /* Header */ |
| | | Uint16 type; /**< ::SDL_HAPTIC_CUSTOM */ |
| | | SDL_HapticDirection direction; /**< Direction of the effect. */ |
| | | |
| | | /* Replay */ |
| | | Uint32 length; /**< Duration of the effect. */ |
| | | Uint16 delay; /**< Delay before starting the effect. */ |
| | | |
| | | /* Trigger */ |
| | | Uint16 button; /**< Button that triggers the effect. */ |
| | | Uint16 interval; /**< How soon it can be triggered again after button. */ |
| | | |
| | | /* Custom */ |
| | | Uint8 channels; /**< Axes to use, minimum of one. */ |
| | | Uint16 period; /**< Sample periods. */ |
| | | Uint16 samples; /**< Amount of samples. */ |
| | | Uint16 *data; /**< Should contain channels*samples items. */ |
| | | |
| | | /* Envelope */ |
| | | Uint16 attack_length; /**< Duration of the attack. */ |
| | | Uint16 attack_level; /**< Level at the start of the attack. */ |
| | | Uint16 fade_length; /**< Duration of the fade. */ |
| | | Uint16 fade_level; /**< Level at the end of the fade. */ |
| | | } SDL_HapticCustom; |
| | | |
| | | /** |
| | | * \brief The generic template for any haptic effect. |
| | | * |
| | | * All values max at 32767 (0x7FFF). Signed values also can be negative. |
| | | * Time values unless specified otherwise are in milliseconds. |
| | | * |
| | | * You can also pass ::SDL_HAPTIC_INFINITY to length instead of a 0-32767 |
| | | * value. Neither delay, interval, attack_length nor fade_length support |
| | | * ::SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends. |
| | | * |
| | | * Additionally, the ::SDL_HAPTIC_RAMP effect does not support a duration of |
| | | * ::SDL_HAPTIC_INFINITY. |
| | | * |
| | | * Button triggers may not be supported on all devices, it is advised to not |
| | | * use them if possible. Buttons start at index 1 instead of index 0 like |
| | | * the joystick. |
| | | * |
| | | * If both attack_length and fade_level are 0, the envelope is not used, |
| | | * otherwise both values are used. |
| | | * |
| | | * Common parts: |
| | | * \code |
| | | * // Replay - All effects have this |
| | | * Uint32 length; // Duration of effect (ms). |
| | | * Uint16 delay; // Delay before starting effect. |
| | | * |
| | | * // Trigger - All effects have this |
| | | * Uint16 button; // Button that triggers effect. |
| | | * Uint16 interval; // How soon before effect can be triggered again. |
| | | * |
| | | * // Envelope - All effects except condition effects have this |
| | | * Uint16 attack_length; // Duration of the attack (ms). |
| | | * Uint16 attack_level; // Level at the start of the attack. |
| | | * Uint16 fade_length; // Duration of the fade out (ms). |
| | | * Uint16 fade_level; // Level at the end of the fade. |
| | | * \endcode |
| | | * |
| | | * |
| | | * Here we have an example of a constant effect evolution in time: |
| | | * \verbatim |
| | | Strength |
| | | ^ |
| | | | |
| | | | effect level --> _________________ |
| | | | / \ |
| | | | / \ |
| | | | / \ |
| | | | / \ |
| | | | attack_level --> | \ |
| | | | | | <--- fade_level |
| | | | |
| | | +--------------------------------------------------> Time |
| | | [--] [---] |
| | | attack_length fade_length |
| | | |
| | | [------------------][-----------------------] |
| | | delay length |
| | | \endverbatim |
| | | * |
| | | * Note either the attack_level or the fade_level may be above the actual |
| | | * effect level. |
| | | * |
| | | * \sa SDL_HapticConstant |
| | | * \sa SDL_HapticPeriodic |
| | | * \sa SDL_HapticCondition |
| | | * \sa SDL_HapticRamp |
| | | * \sa SDL_HapticCustom |
| | | */ |
| | | typedef union SDL_HapticEffect |
| | | { |
| | | /* Common for all force feedback effects */ |
| | | Uint16 type; /**< Effect type. */ |
| | | SDL_HapticConstant constant; /**< Constant effect. */ |
| | | SDL_HapticPeriodic periodic; /**< Periodic effect. */ |
| | | SDL_HapticCondition condition; /**< Condition effect. */ |
| | | SDL_HapticRamp ramp; /**< Ramp effect. */ |
| | | SDL_HapticCustom custom; /**< Custom effect. */ |
| | | } SDL_HapticEffect; |
| | | |
| | | |
| | | /* Function prototypes */ |
| | | /** |
| | | * \brief Count the number of haptic devices attached to the system. |
| | | * |
| | | * \return Number of haptic devices detected on the system. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_NumHaptics(void); |
| | | |
| | | /** |
| | | * \brief Get the implementation dependent name of a Haptic device. |
| | | * |
| | | * This can be called before any joysticks are opened. |
| | | * If no name can be found, this function returns NULL. |
| | | * |
| | | * \param device_index Index of the device to get its name. |
| | | * \return Name of the device or NULL on error. |
| | | * |
| | | * \sa SDL_NumHaptics |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index); |
| | | |
| | | /** |
| | | * \brief Opens a Haptic device for usage. |
| | | * |
| | | * The index passed as an argument refers to the N'th Haptic device on this |
| | | * system. |
| | | * |
| | | * When opening a haptic device, its gain will be set to maximum and |
| | | * autocenter will be disabled. To modify these values use |
| | | * SDL_HapticSetGain() and SDL_HapticSetAutocenter(). |
| | | * |
| | | * \param device_index Index of the device to open. |
| | | * \return Device identifier or NULL on error. |
| | | * |
| | | * \sa SDL_HapticIndex |
| | | * \sa SDL_HapticOpenFromMouse |
| | | * \sa SDL_HapticOpenFromJoystick |
| | | * \sa SDL_HapticClose |
| | | * \sa SDL_HapticSetGain |
| | | * \sa SDL_HapticSetAutocenter |
| | | * \sa SDL_HapticPause |
| | | * \sa SDL_HapticStopAll |
| | | */ |
| | | extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpen(int device_index); |
| | | |
| | | /** |
| | | * \brief Checks if the haptic device at index has been opened. |
| | | * |
| | | * \param device_index Index to check to see if it has been opened. |
| | | * \return 1 if it has been opened or 0 if it hasn't. |
| | | * |
| | | * \sa SDL_HapticOpen |
| | | * \sa SDL_HapticIndex |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticOpened(int device_index); |
| | | |
| | | /** |
| | | * \brief Gets the index of a haptic device. |
| | | * |
| | | * \param haptic Haptic device to get the index of. |
| | | * \return The index of the haptic device or -1 on error. |
| | | * |
| | | * \sa SDL_HapticOpen |
| | | * \sa SDL_HapticOpened |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticIndex(SDL_Haptic * haptic); |
| | | |
| | | /** |
| | | * \brief Gets whether or not the current mouse has haptic capabilities. |
| | | * |
| | | * \return SDL_TRUE if the mouse is haptic, SDL_FALSE if it isn't. |
| | | * |
| | | * \sa SDL_HapticOpenFromMouse |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_MouseIsHaptic(void); |
| | | |
| | | /** |
| | | * \brief Tries to open a haptic device from the current mouse. |
| | | * |
| | | * \return The haptic device identifier or NULL on error. |
| | | * |
| | | * \sa SDL_MouseIsHaptic |
| | | * \sa SDL_HapticOpen |
| | | */ |
| | | extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromMouse(void); |
| | | |
| | | /** |
| | | * \brief Checks to see if a joystick has haptic features. |
| | | * |
| | | * \param joystick Joystick to test for haptic capabilities. |
| | | * \return 1 if the joystick is haptic, 0 if it isn't |
| | | * or -1 if an error ocurred. |
| | | * |
| | | * \sa SDL_HapticOpenFromJoystick |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); |
| | | |
| | | /** |
| | | * \brief Opens a Haptic device for usage from a Joystick device. |
| | | * |
| | | * You must still close the haptic device seperately. It will not be closed |
| | | * with the joystick. |
| | | * |
| | | * When opening from a joystick you should first close the haptic device before |
| | | * closing the joystick device. If not, on some implementations the haptic |
| | | * device will also get unallocated and you'll be unable to use force feedback |
| | | * on that device. |
| | | * |
| | | * \param joystick Joystick to create a haptic device from. |
| | | * \return A valid haptic device identifier on success or NULL on error. |
| | | * |
| | | * \sa SDL_HapticOpen |
| | | * \sa SDL_HapticClose |
| | | */ |
| | | extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromJoystick(SDL_Joystick * |
| | | joystick); |
| | | |
| | | /** |
| | | * \brief Closes a Haptic device previously opened with SDL_HapticOpen(). |
| | | * |
| | | * \param haptic Haptic device to close. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_HapticClose(SDL_Haptic * haptic); |
| | | |
| | | /** |
| | | * \brief Returns the number of effects a haptic device can store. |
| | | * |
| | | * On some platforms this isn't fully supported, and therefore is an |
| | | * approximation. Always check to see if your created effect was actually |
| | | * created and do not rely solely on SDL_HapticNumEffects(). |
| | | * |
| | | * \param haptic The haptic device to query effect max. |
| | | * \return The number of effects the haptic device can store or |
| | | * -1 on error. |
| | | * |
| | | * \sa SDL_HapticNumEffectsPlaying |
| | | * \sa SDL_HapticQuery |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic); |
| | | |
| | | /** |
| | | * \brief Returns the number of effects a haptic device can play at the same |
| | | * time. |
| | | * |
| | | * This is not supported on all platforms, but will always return a value. |
| | | * Added here for the sake of completeness. |
| | | * |
| | | * \param haptic The haptic device to query maximum playing effects. |
| | | * \return The number of effects the haptic device can play at the same time |
| | | * or -1 on error. |
| | | * |
| | | * \sa SDL_HapticNumEffects |
| | | * \sa SDL_HapticQuery |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); |
| | | |
| | | /** |
| | | * \brief Gets the haptic devices supported features in bitwise matter. |
| | | * |
| | | * Example: |
| | | * \code |
| | | * if (SDL_HapticQueryEffects(haptic) & SDL_HAPTIC_CONSTANT) { |
| | | * printf("We have constant haptic effect!"); |
| | | * } |
| | | * \endcode |
| | | * |
| | | * \param haptic The haptic device to query. |
| | | * \return Haptic features in bitwise manner (OR'd). |
| | | * |
| | | * \sa SDL_HapticNumEffects |
| | | * \sa SDL_HapticEffectSupported |
| | | */ |
| | | extern DECLSPEC unsigned int SDLCALL SDL_HapticQuery(SDL_Haptic * haptic); |
| | | |
| | | |
| | | /** |
| | | * \brief Gets the number of haptic axes the device has. |
| | | * |
| | | * \sa SDL_HapticDirection |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticNumAxes(SDL_Haptic * haptic); |
| | | |
| | | /** |
| | | * \brief Checks to see if effect is supported by haptic. |
| | | * |
| | | * \param haptic Haptic device to check on. |
| | | * \param effect Effect to check to see if it is supported. |
| | | * \return SDL_TRUE if effect is supported, SDL_FALSE if it isn't or -1 on error. |
| | | * |
| | | * \sa SDL_HapticQuery |
| | | * \sa SDL_HapticNewEffect |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticEffectSupported(SDL_Haptic * haptic, |
| | | SDL_HapticEffect * |
| | | effect); |
| | | |
| | | /** |
| | | * \brief Creates a new haptic effect on the device. |
| | | * |
| | | * \param haptic Haptic device to create the effect on. |
| | | * \param effect Properties of the effect to create. |
| | | * \return The id of the effect on success or -1 on error. |
| | | * |
| | | * \sa SDL_HapticUpdateEffect |
| | | * \sa SDL_HapticRunEffect |
| | | * \sa SDL_HapticDestroyEffect |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticNewEffect(SDL_Haptic * haptic, |
| | | SDL_HapticEffect * effect); |
| | | |
| | | /** |
| | | * \brief Updates the properties of an effect. |
| | | * |
| | | * Can be used dynamically, although behaviour when dynamically changing |
| | | * direction may be strange. Specifically the effect may reupload itself |
| | | * and start playing from the start. You cannot change the type either when |
| | | * running SDL_HapticUpdateEffect(). |
| | | * |
| | | * \param haptic Haptic device that has the effect. |
| | | * \param effect Effect to update. |
| | | * \param data New effect properties to use. |
| | | * \return The id of the effect on success or -1 on error. |
| | | * |
| | | * \sa SDL_HapticNewEffect |
| | | * \sa SDL_HapticRunEffect |
| | | * \sa SDL_HapticDestroyEffect |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticUpdateEffect(SDL_Haptic * haptic, |
| | | int effect, |
| | | SDL_HapticEffect * data); |
| | | |
| | | /** |
| | | * \brief Runs the haptic effect on its associated haptic device. |
| | | * |
| | | * If iterations are ::SDL_HAPTIC_INFINITY, it'll run the effect over and over |
| | | * repeating the envelope (attack and fade) every time. If you only want the |
| | | * effect to last forever, set ::SDL_HAPTIC_INFINITY in the effect's length |
| | | * parameter. |
| | | * |
| | | * \param haptic Haptic device to run the effect on. |
| | | * \param effect Identifier of the haptic effect to run. |
| | | * \param iterations Number of iterations to run the effect. Use |
| | | * ::SDL_HAPTIC_INFINITY for infinity. |
| | | * \return 0 on success or -1 on error. |
| | | * |
| | | * \sa SDL_HapticStopEffect |
| | | * \sa SDL_HapticDestroyEffect |
| | | * \sa SDL_HapticGetEffectStatus |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticRunEffect(SDL_Haptic * haptic, |
| | | int effect, |
| | | Uint32 iterations); |
| | | |
| | | /** |
| | | * \brief Stops the haptic effect on its associated haptic device. |
| | | * |
| | | * \param haptic Haptic device to stop the effect on. |
| | | * \param effect Identifier of the effect to stop. |
| | | * \return 0 on success or -1 on error. |
| | | * |
| | | * \sa SDL_HapticRunEffect |
| | | * \sa SDL_HapticDestroyEffect |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticStopEffect(SDL_Haptic * haptic, |
| | | int effect); |
| | | |
| | | /** |
| | | * \brief Destroys a haptic effect on the device. |
| | | * |
| | | * This will stop the effect if it's running. Effects are automatically |
| | | * destroyed when the device is closed. |
| | | * |
| | | * \param haptic Device to destroy the effect on. |
| | | * \param effect Identifier of the effect to destroy. |
| | | * |
| | | * \sa SDL_HapticNewEffect |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_HapticDestroyEffect(SDL_Haptic * haptic, |
| | | int effect); |
| | | |
| | | /** |
| | | * \brief Gets the status of the current effect on the haptic device. |
| | | * |
| | | * Device must support the ::SDL_HAPTIC_STATUS feature. |
| | | * |
| | | * \param haptic Haptic device to query the effect status on. |
| | | * \param effect Identifier of the effect to query its status. |
| | | * \return 0 if it isn't playing, ::SDL_HAPTIC_PLAYING if it is playing |
| | | * or -1 on error. |
| | | * |
| | | * \sa SDL_HapticRunEffect |
| | | * \sa SDL_HapticStopEffect |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticGetEffectStatus(SDL_Haptic * haptic, |
| | | int effect); |
| | | |
| | | /** |
| | | * \brief Sets the global gain of the device. |
| | | * |
| | | * Device must support the ::SDL_HAPTIC_GAIN feature. |
| | | * |
| | | * The user may specify the maximum gain by setting the environment variable |
| | | * ::SDL_HAPTIC_GAIN_MAX which should be between 0 and 100. All calls to |
| | | * SDL_HapticSetGain() will scale linearly using ::SDL_HAPTIC_GAIN_MAX as the |
| | | * maximum. |
| | | * |
| | | * \param haptic Haptic device to set the gain on. |
| | | * \param gain Value to set the gain to, should be between 0 and 100. |
| | | * \return 0 on success or -1 on error. |
| | | * |
| | | * \sa SDL_HapticQuery |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticSetGain(SDL_Haptic * haptic, int gain); |
| | | |
| | | /** |
| | | * \brief Sets the global autocenter of the device. |
| | | * |
| | | * Autocenter should be between 0 and 100. Setting it to 0 will disable |
| | | * autocentering. |
| | | * |
| | | * Device must support the ::SDL_HAPTIC_AUTOCENTER feature. |
| | | * |
| | | * \param haptic Haptic device to set autocentering on. |
| | | * \param autocenter Value to set autocenter to, 0 disables autocentering. |
| | | * \return 0 on success or -1 on error. |
| | | * |
| | | * \sa SDL_HapticQuery |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticSetAutocenter(SDL_Haptic * haptic, |
| | | int autocenter); |
| | | |
| | | /** |
| | | * \brief Pauses a haptic device. |
| | | * |
| | | * Device must support the ::SDL_HAPTIC_PAUSE feature. Call |
| | | * SDL_HapticUnpause() to resume playback. |
| | | * |
| | | * Do not modify the effects nor add new ones while the device is paused. |
| | | * That can cause all sorts of weird errors. |
| | | * |
| | | * \param haptic Haptic device to pause. |
| | | * \return 0 on success or -1 on error. |
| | | * |
| | | * \sa SDL_HapticUnpause |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic); |
| | | |
| | | /** |
| | | * \brief Unpauses a haptic device. |
| | | * |
| | | * Call to unpause after SDL_HapticPause(). |
| | | * |
| | | * \param haptic Haptic device to pause. |
| | | * \return 0 on success or -1 on error. |
| | | * |
| | | * \sa SDL_HapticPause |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticUnpause(SDL_Haptic * haptic); |
| | | |
| | | /** |
| | | * \brief Stops all the currently playing effects on a haptic device. |
| | | * |
| | | * \param haptic Haptic device to stop. |
| | | * \return 0 on success or -1 on error. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticStopAll(SDL_Haptic * haptic); |
| | | |
| | | /** |
| | | * \brief Checks to see if rumble is supported on a haptic device.. |
| | | * |
| | | * \param haptic Haptic device to check to see if it supports rumble. |
| | | * \return SDL_TRUE if effect is supported, SDL_FALSE if it isn't or -1 on error. |
| | | * |
| | | * \sa SDL_HapticRumbleInit |
| | | * \sa SDL_HapticRumblePlay |
| | | * \sa SDL_HapticRumbleStop |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticRumbleSupported(SDL_Haptic * haptic); |
| | | |
| | | /** |
| | | * \brief Initializes the haptic device for simple rumble playback. |
| | | * |
| | | * \param haptic Haptic device to initialize for simple rumble playback. |
| | | * \return 0 on success or -1 on error. |
| | | * |
| | | * \sa SDL_HapticOpen |
| | | * \sa SDL_HapticRumbleSupported |
| | | * \sa SDL_HapticRumblePlay |
| | | * \sa SDL_HapticRumbleStop |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticRumbleInit(SDL_Haptic * haptic); |
| | | |
| | | /** |
| | | * \brief Runs simple rumble on a haptic device |
| | | * |
| | | * \param haptic Haptic device to play rumble effect on. |
| | | * \param strength Strength of the rumble to play as a 0-1 float value. |
| | | * \param length Length of the rumble to play in milliseconds. |
| | | * \return 0 on success or -1 on error. |
| | | * |
| | | * \sa SDL_HapticRumbleSupported |
| | | * \sa SDL_HapticRumbleInit |
| | | * \sa SDL_HapticRumbleStop |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticRumblePlay(SDL_Haptic * haptic, float strength, Uint32 length ); |
| | | |
| | | /** |
| | | * \brief Stops the simple rumble on a haptic device. |
| | | * |
| | | * \param haptic Haptic to stop the rumble on. |
| | | * \return 0 on success or -1 on error. |
| | | * |
| | | * \sa SDL_HapticRumbleSupported |
| | | * \sa SDL_HapticRumbleInit |
| | | * \sa SDL_HapticRumblePlay |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_HapticRumbleStop(SDL_Haptic * haptic); |
| | | |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_haptic_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_hints.h |
| | | * |
| | | * Official documentation for SDL configuration variables |
| | | * |
| | | * This file contains functions to set and get configuration hints, |
| | | * as well as listing each of them alphabetically. |
| | | * |
| | | * The convention for naming hints is SDL_HINT_X, where "SDL_X" is |
| | | * the environment variable that can be used to override the default. |
| | | * |
| | | * In general these hints are just that - they may or may not be |
| | | * supported or applicable on any given platform, but they provide |
| | | * a way for an application or user to give the library a hint as |
| | | * to how they would like the library to work. |
| | | */ |
| | | |
| | | #ifndef _SDL_hints_h |
| | | #define _SDL_hints_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief A variable controlling how 3D acceleration is used to accelerate the SDL 1.2 screen surface. |
| | | * |
| | | * SDL can try to accelerate the SDL 1.2 screen surface by using streaming |
| | | * textures with a 3D rendering engine. This variable controls whether and |
| | | * how this is done. |
| | | * |
| | | * This variable can be set to the following values: |
| | | * "0" - Disable 3D acceleration |
| | | * "1" - Enable 3D acceleration, using the default renderer. |
| | | * "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.) |
| | | * |
| | | * By default SDL tries to make a best guess for each platform whether |
| | | * to use acceleration or not. |
| | | */ |
| | | #define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION" |
| | | |
| | | /** |
| | | * \brief A variable specifying which render driver to use. |
| | | * |
| | | * If the application doesn't pick a specific renderer to use, this variable |
| | | * specifies the name of the preferred renderer. If the preferred renderer |
| | | * can't be initialized, the normal default renderer is used. |
| | | * |
| | | * This variable is case insensitive and can be set to the following values: |
| | | * "direct3d" |
| | | * "opengl" |
| | | * "opengles2" |
| | | * "opengles" |
| | | * "software" |
| | | * |
| | | * The default varies by platform, but it's the first one in the list that |
| | | * is available on the current platform. |
| | | */ |
| | | #define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER" |
| | | |
| | | /** |
| | | * \brief A variable controlling whether the OpenGL render driver uses shaders if they are available. |
| | | * |
| | | * This variable can be set to the following values: |
| | | * "0" - Disable shaders |
| | | * "1" - Enable shaders |
| | | * |
| | | * By default shaders are used if OpenGL supports them. |
| | | */ |
| | | #define SDL_HINT_RENDER_OPENGL_SHADERS "SDL_RENDER_OPENGL_SHADERS" |
| | | |
| | | /** |
| | | * \brief A variable controlling the scaling quality |
| | | * |
| | | * This variable can be set to the following values: |
| | | * "0" or "nearest" - Nearest pixel sampling |
| | | * "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D) |
| | | * "2" or "best" - Anisotropic filtering (supported by Direct3D) |
| | | * |
| | | * By default nearest pixel sampling is used |
| | | */ |
| | | #define SDL_HINT_RENDER_SCALE_QUALITY "SDL_RENDER_SCALE_QUALITY" |
| | | |
| | | /** |
| | | * \brief A variable controlling whether updates to the SDL 1.2 screen surface should be synchronized with the vertical refresh, to avoid tearing. |
| | | * |
| | | * This variable can be set to the following values: |
| | | * "0" - Disable vsync |
| | | * "1" - Enable vsync |
| | | * |
| | | * By default SDL does not sync screen surface updates with vertical refresh. |
| | | */ |
| | | #define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC" |
| | | |
| | | /** |
| | | * \brief A variable controlling whether the X11 VidMode extension should be used. |
| | | * |
| | | * This variable can be set to the following values: |
| | | * "0" - Disable XVidMode |
| | | * "1" - Enable XVidMode |
| | | * |
| | | * By default SDL will use XVidMode if it is available. |
| | | */ |
| | | #define SDL_HINT_VIDEO_X11_XVIDMODE "SDL_VIDEO_X11_XVIDMODE" |
| | | |
| | | /** |
| | | * \brief A variable controlling whether the X11 Xinerama extension should be used. |
| | | * |
| | | * This variable can be set to the following values: |
| | | * "0" - Disable Xinerama |
| | | * "1" - Enable Xinerama |
| | | * |
| | | * By default SDL will use Xinerama if it is available. |
| | | */ |
| | | #define SDL_HINT_VIDEO_X11_XINERAMA "SDL_VIDEO_X11_XINERAMA" |
| | | |
| | | /** |
| | | * \brief A variable controlling whether the X11 XRandR extension should be used. |
| | | * |
| | | * This variable can be set to the following values: |
| | | * "0" - Disable XRandR |
| | | * "1" - Enable XRandR |
| | | * |
| | | * By default SDL will not use XRandR because of window manager issues. |
| | | */ |
| | | #define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR" |
| | | |
| | | /** |
| | | * \brief A variable controlling whether grabbing input grabs the keyboard |
| | | * |
| | | * This variable can be set to the following values: |
| | | * "0" - Grab will affect only the mouse |
| | | * "1" - Grab will affect mouse and keyboard |
| | | * |
| | | * By default SDL will not grab the keyboard so system shortcuts still work. |
| | | */ |
| | | #define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD" |
| | | |
| | | /** |
| | | * \brief Minimize your SDL_Window if it loses key focus when in Fullscreen mode. Defaults to true. |
| | | * |
| | | */ |
| | | #define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS" |
| | | |
| | | |
| | | /** |
| | | * \brief A variable controlling whether the idle timer is disabled on iOS. |
| | | * |
| | | * When an iOS app does not receive touches for some time, the screen is |
| | | * dimmed automatically. For games where the accelerometer is the only input |
| | | * this is problematic. This functionality can be disabled by setting this |
| | | * hint. |
| | | * |
| | | * This variable can be set to the following values: |
| | | * "0" - Enable idle timer |
| | | * "1" - Disable idle timer |
| | | */ |
| | | #define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED" |
| | | |
| | | /** |
| | | * \brief A variable controlling which orientations are allowed on iOS. |
| | | * |
| | | * In some circumstances it is necessary to be able to explicitly control |
| | | * which UI orientations are allowed. |
| | | * |
| | | * This variable is a space delimited list of the following values: |
| | | * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown" |
| | | */ |
| | | #define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" |
| | | |
| | | |
| | | /** |
| | | * \brief A variable that lets you disable the detection and use of Xinput gamepad devices |
| | | * |
| | | * The variable can be set to the following values: |
| | | * "0" - Disable XInput timer (only uses direct input) |
| | | * "1" - Enable XInput timer (the default) |
| | | */ |
| | | #define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" |
| | | |
| | | |
| | | /** |
| | | * \brief A variable that lets you manually hint extra gamecontroller db entries |
| | | * |
| | | * The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h |
| | | * |
| | | * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) |
| | | * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() |
| | | */ |
| | | #define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG" |
| | | |
| | | |
| | | /** |
| | | * \brief If set to 0 then never set the top most bit on a SDL Window, even if the video mode expects it. |
| | | * This is a debugging aid for developers and not expected to be used by end users. The default is "1" |
| | | * |
| | | * This variable can be set to the following values: |
| | | * "0" - don't allow topmost |
| | | * "1" - allow topmost |
| | | */ |
| | | #define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST" |
| | | |
| | | |
| | | |
| | | /** |
| | | * \brief An enumeration of hint priorities |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_HINT_DEFAULT, |
| | | SDL_HINT_NORMAL, |
| | | SDL_HINT_OVERRIDE |
| | | } SDL_HintPriority; |
| | | |
| | | |
| | | /** |
| | | * \brief Set a hint with a specific priority |
| | | * |
| | | * The priority controls the behavior when setting a hint that already |
| | | * has a value. Hints will replace existing hints of their priority and |
| | | * lower. Environment variables are considered to have override priority. |
| | | * |
| | | * \return SDL_TRUE if the hint was set, SDL_FALSE otherwise |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name, |
| | | const char *value, |
| | | SDL_HintPriority priority); |
| | | |
| | | /** |
| | | * \brief Set a hint with normal priority |
| | | * |
| | | * \return SDL_TRUE if the hint was set, SDL_FALSE otherwise |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name, |
| | | const char *value); |
| | | |
| | | |
| | | /** |
| | | * \brief Get a hint |
| | | * |
| | | * \return The string value of a hint variable. |
| | | */ |
| | | extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name); |
| | | |
| | | /** |
| | | * \brief Clear all hints |
| | | * |
| | | * This function is called during SDL_Quit() to free stored hints. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_ClearHints(void); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_hints_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_joystick.h |
| | | * |
| | | * Include file for SDL joystick event handling |
| | | * |
| | | * The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks, with the exact joystick |
| | | * behind a device_index changing as joysticks are plugged and unplugged. |
| | | * |
| | | * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted |
| | | * then it will get a new instance_id, instance_id's are monotonically increasing identifiers of a joystick plugged in. |
| | | * |
| | | * The term JoystickGUID is a stable 128-bit identifier for a joystick device that does not change over time, it identifies class of |
| | | * the device (a X360 wired controller for example). This identifier is platform dependent. |
| | | * |
| | | * |
| | | */ |
| | | |
| | | #ifndef _SDL_joystick_h |
| | | #define _SDL_joystick_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \file SDL_joystick.h |
| | | * |
| | | * In order to use these functions, SDL_Init() must have been called |
| | | * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system |
| | | * for joysticks, and load appropriate drivers. |
| | | */ |
| | | |
| | | /* The joystick structure used to identify an SDL joystick */ |
| | | struct _SDL_Joystick; |
| | | typedef struct _SDL_Joystick SDL_Joystick; |
| | | |
| | | /* A structure that encodes the stable unique id for a joystick device */ |
| | | typedef struct { |
| | | Uint8 data[16]; |
| | | } SDL_JoystickGUID; |
| | | |
| | | typedef Sint32 SDL_JoystickID; |
| | | |
| | | |
| | | /* Function prototypes */ |
| | | /** |
| | | * Count the number of joysticks attached to the system right now |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); |
| | | |
| | | /** |
| | | * Get the implementation dependent name of a joystick. |
| | | * This can be called before any joysticks are opened. |
| | | * If no name can be found, this function returns NULL. |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); |
| | | |
| | | /** |
| | | * Open a joystick for use. |
| | | * The index passed as an argument refers tothe N'th joystick on the system. |
| | | * This index is the value which will identify this joystick in future joystick |
| | | * events. |
| | | * |
| | | * \return A joystick identifier, or NULL if an error occurred. |
| | | */ |
| | | extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); |
| | | |
| | | /** |
| | | * Return the name for this currently opened joystick. |
| | | * If no name can be found, this function returns NULL. |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_JoystickName(SDL_Joystick * joystick); |
| | | |
| | | /** |
| | | * Return the GUID for the joystick at this index |
| | | */ |
| | | extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetDeviceGUID(int device_index); |
| | | |
| | | /** |
| | | * Return the GUID for this opened joystick |
| | | */ |
| | | extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick * joystick); |
| | | |
| | | /** |
| | | * Return a string representation for this guid. pszGUID must point to at least 33 bytes |
| | | * (32 for the string plus a NULL terminator). |
| | | */ |
| | | extern DECLSPEC void SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID); |
| | | |
| | | /** |
| | | * convert a string into a joystick formatted guid |
| | | */ |
| | | extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUIDFromString(const char *pchGUID); |
| | | |
| | | /** |
| | | * Returns SDL_TRUE if the joystick has been opened and currently connected, or SDL_FALSE if it has not. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAttached(SDL_Joystick * joystick); |
| | | |
| | | /** |
| | | * Get the instance ID of an opened joystick or -1 if the joystick is invalid. |
| | | */ |
| | | extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickInstanceID(SDL_Joystick * joystick); |
| | | |
| | | /** |
| | | * Get the number of general axis controls on a joystick. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick * joystick); |
| | | |
| | | /** |
| | | * Get the number of trackballs on a joystick. |
| | | * |
| | | * Joystick trackballs have only relative motion events associated |
| | | * with them and their state cannot be polled. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick * joystick); |
| | | |
| | | /** |
| | | * Get the number of POV hats on a joystick. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick * joystick); |
| | | |
| | | /** |
| | | * Get the number of buttons on a joystick. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick * joystick); |
| | | |
| | | /** |
| | | * Update the current state of the open joysticks. |
| | | * |
| | | * This is called automatically by the event loop if any joystick |
| | | * events are enabled. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); |
| | | |
| | | /** |
| | | * Enable/disable joystick event polling. |
| | | * |
| | | * If joystick events are disabled, you must call SDL_JoystickUpdate() |
| | | * yourself and check the state of the joystick when you want joystick |
| | | * information. |
| | | * |
| | | * The state can be one of ::SDL_QUERY, ::SDL_ENABLE or ::SDL_IGNORE. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); |
| | | |
| | | /** |
| | | * Get the current state of an axis control on a joystick. |
| | | * |
| | | * The state is a value ranging from -32768 to 32767. |
| | | * |
| | | * The axis indices start at index 0. |
| | | */ |
| | | extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick * joystick, |
| | | int axis); |
| | | |
| | | /** |
| | | * \name Hat positions |
| | | */ |
| | | /*@{*/ |
| | | #define SDL_HAT_CENTERED 0x00 |
| | | #define SDL_HAT_UP 0x01 |
| | | #define SDL_HAT_RIGHT 0x02 |
| | | #define SDL_HAT_DOWN 0x04 |
| | | #define SDL_HAT_LEFT 0x08 |
| | | #define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP) |
| | | #define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) |
| | | #define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) |
| | | #define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) |
| | | /*@}*/ |
| | | |
| | | /** |
| | | * Get the current state of a POV hat on a joystick. |
| | | * |
| | | * The hat indices start at index 0. |
| | | * |
| | | * \return The return value is one of the following positions: |
| | | * - ::SDL_HAT_CENTERED |
| | | * - ::SDL_HAT_UP |
| | | * - ::SDL_HAT_RIGHT |
| | | * - ::SDL_HAT_DOWN |
| | | * - ::SDL_HAT_LEFT |
| | | * - ::SDL_HAT_RIGHTUP |
| | | * - ::SDL_HAT_RIGHTDOWN |
| | | * - ::SDL_HAT_LEFTUP |
| | | * - ::SDL_HAT_LEFTDOWN |
| | | */ |
| | | extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick * joystick, |
| | | int hat); |
| | | |
| | | /** |
| | | * Get the ball axis change since the last poll. |
| | | * |
| | | * \return 0, or -1 if you passed it invalid parameters. |
| | | * |
| | | * The ball indices start at index 0. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick * joystick, |
| | | int ball, int *dx, int *dy); |
| | | |
| | | /** |
| | | * Get the current state of a button on a joystick. |
| | | * |
| | | * The button indices start at index 0. |
| | | */ |
| | | extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick * joystick, |
| | | int button); |
| | | |
| | | /** |
| | | * Close a joystick previously opened with SDL_JoystickOpen(). |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick * joystick); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_joystick_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_keyboard.h |
| | | * |
| | | * Include file for SDL keyboard event handling |
| | | */ |
| | | |
| | | #ifndef _SDL_keyboard_h |
| | | #define _SDL_keyboard_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | #include "SDL_keycode.h" |
| | | #include "SDL_video.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief The SDL keysym structure, used in key events. |
| | | */ |
| | | typedef struct SDL_Keysym |
| | | { |
| | | SDL_Scancode scancode; /**< SDL physical key code - see ::SDL_Scancode for details */ |
| | | SDL_Keycode sym; /**< SDL virtual key code - see ::SDL_Keycode for details */ |
| | | Uint16 mod; /**< current key modifiers */ |
| | | Uint32 unicode; /**< \deprecated use SDL_TextInputEvent instead */ |
| | | } SDL_Keysym; |
| | | |
| | | /* Function prototypes */ |
| | | |
| | | /** |
| | | * \brief Get the window which currently has keyboard focus. |
| | | */ |
| | | extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void); |
| | | |
| | | /** |
| | | * \brief Get a snapshot of the current state of the keyboard. |
| | | * |
| | | * \param numkeys if non-NULL, receives the length of the returned array. |
| | | * |
| | | * \return An array of key states. Indexes into this array are obtained by using ::SDL_Scancode values. |
| | | * |
| | | * \b Example: |
| | | * \code |
| | | * Uint8 *state = SDL_GetKeyboardState(NULL); |
| | | * if ( state[SDL_SCANCODE_RETURN] ) { |
| | | * printf("<RETURN> is pressed.\n"); |
| | | * } |
| | | * \endcode |
| | | */ |
| | | extern DECLSPEC Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys); |
| | | |
| | | /** |
| | | * \brief Get the current key modifier state for the keyboard. |
| | | */ |
| | | extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void); |
| | | |
| | | /** |
| | | * \brief Set the current key modifier state for the keyboard. |
| | | * |
| | | * \note This does not change the keyboard state, only the key modifier flags. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate); |
| | | |
| | | /** |
| | | * \brief Get the key code corresponding to the given scancode according |
| | | * to the current keyboard layout. |
| | | * |
| | | * See ::SDL_Keycode for details. |
| | | * |
| | | * \sa SDL_GetKeyName() |
| | | */ |
| | | extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode); |
| | | |
| | | /** |
| | | * \brief Get the scancode corresponding to the given key code according to the |
| | | * current keyboard layout. |
| | | * |
| | | * See ::SDL_Scancode for details. |
| | | * |
| | | * \sa SDL_GetScancodeName() |
| | | */ |
| | | extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key); |
| | | |
| | | /** |
| | | * \brief Get a human-readable name for a scancode. |
| | | * |
| | | * \return A pointer to the name for the scancode. |
| | | * If the scancode doesn't have a name, this function returns |
| | | * an empty string (""). |
| | | * |
| | | * \sa SDL_Scancode |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode); |
| | | |
| | | /** |
| | | * \brief Get a scancode from a human-readable name |
| | | * |
| | | * \return scancode, or SDL_SCANCODE_UNKNOWN if the name wasn't recognized |
| | | * |
| | | * \sa SDL_Scancode |
| | | */ |
| | | extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name); |
| | | |
| | | /** |
| | | * \brief Get a human-readable name for a key. |
| | | * |
| | | * \return A pointer to a UTF-8 string that stays valid at least until the next |
| | | * call to this function. If you need it around any longer, you must |
| | | * copy it. If the key doesn't have a name, this function returns an |
| | | * empty string (""). |
| | | * |
| | | * \sa SDL_Key |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key); |
| | | |
| | | /** |
| | | * \brief Get a key code from a human-readable name |
| | | * |
| | | * \return key code, or SDLK_UNKNOWN if the name wasn't recognized |
| | | * |
| | | * \sa SDL_Keycode |
| | | */ |
| | | extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name); |
| | | |
| | | /** |
| | | * \brief Start accepting Unicode text input events. |
| | | * This function will show the on-screen keyboard if supported. |
| | | * |
| | | * \sa SDL_StopTextInput() |
| | | * \sa SDL_SetTextInputRect() |
| | | * \sa SDL_HasScreenKeyboardSupport() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_StartTextInput(void); |
| | | |
| | | /** |
| | | * \brief Return whether or not Unicode text input events are enabled. |
| | | * |
| | | * \sa SDL_StartTextInput() |
| | | * \sa SDL_StopTextInput() |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputActive(void); |
| | | |
| | | /** |
| | | * \brief Stop receiving any text input events. |
| | | * This function will hide the on-screen keyboard if supported. |
| | | * |
| | | * \sa SDL_StartTextInput() |
| | | * \sa SDL_HasScreenKeyboardSupport() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_StopTextInput(void); |
| | | |
| | | /** |
| | | * \brief Set the rectangle used to type Unicode text inputs. |
| | | * This is used as a hint for IME and on-screen keyboard placement. |
| | | * |
| | | * \sa SDL_StartTextInput() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetTextInputRect(SDL_Rect *rect); |
| | | |
| | | /** |
| | | * \brief Returns whether the platform has some screen keyboard support. |
| | | * |
| | | * \return SDL_TRUE if some keyboard support is available else SDL_FALSE. |
| | | * |
| | | * \note Not all screen keyboard functions are supported on all platforms. |
| | | * |
| | | * \sa SDL_IsScreenKeyboardShown() |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void); |
| | | |
| | | /** |
| | | * \brief Returns whether the screen keyboard is shown for given window. |
| | | * |
| | | * \param window The window for which screen keyboard should be queried. |
| | | * |
| | | * \return SDL_TRUE if screen keyboard is shown else SDL_FALSE. |
| | | * |
| | | * \sa SDL_HasScreenKeyboardSupport() |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenKeyboardShown(SDL_Window *window); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_keyboard_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_keycode.h |
| | | * |
| | | * Defines constants which identify keyboard keys and modifiers. |
| | | */ |
| | | |
| | | #ifndef _SDL_keycode_h |
| | | #define _SDL_keycode_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_scancode.h" |
| | | |
| | | /** |
| | | * \brief The SDL virtual key representation. |
| | | * |
| | | * Values of this type are used to represent keyboard keys using the current |
| | | * layout of the keyboard. These values include Unicode values representing |
| | | * the unmodified character that would be generated by pressing the key, or |
| | | * an SDLK_* constant for those keys that do not generate characters. |
| | | */ |
| | | typedef Sint32 SDL_Keycode; |
| | | |
| | | #define SDLK_SCANCODE_MASK (1<<30) |
| | | #define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK) |
| | | |
| | | enum |
| | | { |
| | | SDLK_UNKNOWN = 0, |
| | | |
| | | SDLK_RETURN = '\r', |
| | | SDLK_ESCAPE = '\033', |
| | | SDLK_BACKSPACE = '\b', |
| | | SDLK_TAB = '\t', |
| | | SDLK_SPACE = ' ', |
| | | SDLK_EXCLAIM = '!', |
| | | SDLK_QUOTEDBL = '"', |
| | | SDLK_HASH = '#', |
| | | SDLK_PERCENT = '%', |
| | | SDLK_DOLLAR = '$', |
| | | SDLK_AMPERSAND = '&', |
| | | SDLK_QUOTE = '\'', |
| | | SDLK_LEFTPAREN = '(', |
| | | SDLK_RIGHTPAREN = ')', |
| | | SDLK_ASTERISK = '*', |
| | | SDLK_PLUS = '+', |
| | | SDLK_COMMA = ',', |
| | | SDLK_MINUS = '-', |
| | | SDLK_PERIOD = '.', |
| | | SDLK_SLASH = '/', |
| | | SDLK_0 = '0', |
| | | SDLK_1 = '1', |
| | | SDLK_2 = '2', |
| | | SDLK_3 = '3', |
| | | SDLK_4 = '4', |
| | | SDLK_5 = '5', |
| | | SDLK_6 = '6', |
| | | SDLK_7 = '7', |
| | | SDLK_8 = '8', |
| | | SDLK_9 = '9', |
| | | SDLK_COLON = ':', |
| | | SDLK_SEMICOLON = ';', |
| | | SDLK_LESS = '<', |
| | | SDLK_EQUALS = '=', |
| | | SDLK_GREATER = '>', |
| | | SDLK_QUESTION = '?', |
| | | SDLK_AT = '@', |
| | | /* |
| | | Skip uppercase letters |
| | | */ |
| | | SDLK_LEFTBRACKET = '[', |
| | | SDLK_BACKSLASH = '\\', |
| | | SDLK_RIGHTBRACKET = ']', |
| | | SDLK_CARET = '^', |
| | | SDLK_UNDERSCORE = '_', |
| | | SDLK_BACKQUOTE = '`', |
| | | SDLK_a = 'a', |
| | | SDLK_b = 'b', |
| | | SDLK_c = 'c', |
| | | SDLK_d = 'd', |
| | | SDLK_e = 'e', |
| | | SDLK_f = 'f', |
| | | SDLK_g = 'g', |
| | | SDLK_h = 'h', |
| | | SDLK_i = 'i', |
| | | SDLK_j = 'j', |
| | | SDLK_k = 'k', |
| | | SDLK_l = 'l', |
| | | SDLK_m = 'm', |
| | | SDLK_n = 'n', |
| | | SDLK_o = 'o', |
| | | SDLK_p = 'p', |
| | | SDLK_q = 'q', |
| | | SDLK_r = 'r', |
| | | SDLK_s = 's', |
| | | SDLK_t = 't', |
| | | SDLK_u = 'u', |
| | | SDLK_v = 'v', |
| | | SDLK_w = 'w', |
| | | SDLK_x = 'x', |
| | | SDLK_y = 'y', |
| | | SDLK_z = 'z', |
| | | |
| | | SDLK_CAPSLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK), |
| | | |
| | | SDLK_F1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1), |
| | | SDLK_F2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2), |
| | | SDLK_F3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F3), |
| | | SDLK_F4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F4), |
| | | SDLK_F5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F5), |
| | | SDLK_F6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F6), |
| | | SDLK_F7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F7), |
| | | SDLK_F8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F8), |
| | | SDLK_F9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F9), |
| | | SDLK_F10 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F10), |
| | | SDLK_F11 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F11), |
| | | SDLK_F12 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F12), |
| | | |
| | | SDLK_PRINTSCREEN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRINTSCREEN), |
| | | SDLK_SCROLLLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SCROLLLOCK), |
| | | SDLK_PAUSE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAUSE), |
| | | SDLK_INSERT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT), |
| | | SDLK_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME), |
| | | SDLK_PAGEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP), |
| | | SDLK_DELETE = '\177', |
| | | SDLK_END = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END), |
| | | SDLK_PAGEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN), |
| | | SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT), |
| | | SDLK_LEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LEFT), |
| | | SDLK_DOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DOWN), |
| | | SDLK_UP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UP), |
| | | |
| | | SDLK_NUMLOCKCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_NUMLOCKCLEAR), |
| | | SDLK_KP_DIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DIVIDE), |
| | | SDLK_KP_MULTIPLY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MULTIPLY), |
| | | SDLK_KP_MINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MINUS), |
| | | SDLK_KP_PLUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUS), |
| | | SDLK_KP_ENTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_ENTER), |
| | | SDLK_KP_1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_1), |
| | | SDLK_KP_2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_2), |
| | | SDLK_KP_3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_3), |
| | | SDLK_KP_4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_4), |
| | | SDLK_KP_5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_5), |
| | | SDLK_KP_6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_6), |
| | | SDLK_KP_7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_7), |
| | | SDLK_KP_8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_8), |
| | | SDLK_KP_9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_9), |
| | | SDLK_KP_0 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_0), |
| | | SDLK_KP_PERIOD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERIOD), |
| | | |
| | | SDLK_APPLICATION = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APPLICATION), |
| | | SDLK_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_POWER), |
| | | SDLK_KP_EQUALS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALS), |
| | | SDLK_F13 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F13), |
| | | SDLK_F14 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F14), |
| | | SDLK_F15 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F15), |
| | | SDLK_F16 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F16), |
| | | SDLK_F17 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F17), |
| | | SDLK_F18 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F18), |
| | | SDLK_F19 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F19), |
| | | SDLK_F20 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F20), |
| | | SDLK_F21 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F21), |
| | | SDLK_F22 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F22), |
| | | SDLK_F23 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F23), |
| | | SDLK_F24 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F24), |
| | | SDLK_EXECUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXECUTE), |
| | | SDLK_HELP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HELP), |
| | | SDLK_MENU = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MENU), |
| | | SDLK_SELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SELECT), |
| | | SDLK_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_STOP), |
| | | SDLK_AGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AGAIN), |
| | | SDLK_UNDO = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UNDO), |
| | | SDLK_CUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CUT), |
| | | SDLK_COPY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COPY), |
| | | SDLK_PASTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PASTE), |
| | | SDLK_FIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FIND), |
| | | SDLK_MUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MUTE), |
| | | SDLK_VOLUMEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEUP), |
| | | SDLK_VOLUMEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEDOWN), |
| | | SDLK_KP_COMMA = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COMMA), |
| | | SDLK_KP_EQUALSAS400 = |
| | | SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALSAS400), |
| | | |
| | | SDLK_ALTERASE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ALTERASE), |
| | | SDLK_SYSREQ = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SYSREQ), |
| | | SDLK_CANCEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CANCEL), |
| | | SDLK_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEAR), |
| | | SDLK_PRIOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRIOR), |
| | | SDLK_RETURN2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RETURN2), |
| | | SDLK_SEPARATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SEPARATOR), |
| | | SDLK_OUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OUT), |
| | | SDLK_OPER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OPER), |
| | | SDLK_CLEARAGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEARAGAIN), |
| | | SDLK_CRSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CRSEL), |
| | | SDLK_EXSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXSEL), |
| | | |
| | | SDLK_KP_00 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00), |
| | | SDLK_KP_000 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000), |
| | | SDLK_THOUSANDSSEPARATOR = |
| | | SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR), |
| | | SDLK_DECIMALSEPARATOR = |
| | | SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR), |
| | | SDLK_CURRENCYUNIT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT), |
| | | SDLK_CURRENCYSUBUNIT = |
| | | SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT), |
| | | SDLK_KP_LEFTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN), |
| | | SDLK_KP_RIGHTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN), |
| | | SDLK_KP_LEFTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE), |
| | | SDLK_KP_RIGHTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE), |
| | | SDLK_KP_TAB = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB), |
| | | SDLK_KP_BACKSPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE), |
| | | SDLK_KP_A = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A), |
| | | SDLK_KP_B = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B), |
| | | SDLK_KP_C = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C), |
| | | SDLK_KP_D = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D), |
| | | SDLK_KP_E = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E), |
| | | SDLK_KP_F = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F), |
| | | SDLK_KP_XOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR), |
| | | SDLK_KP_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER), |
| | | SDLK_KP_PERCENT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT), |
| | | SDLK_KP_LESS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS), |
| | | SDLK_KP_GREATER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER), |
| | | SDLK_KP_AMPERSAND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND), |
| | | SDLK_KP_DBLAMPERSAND = |
| | | SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND), |
| | | SDLK_KP_VERTICALBAR = |
| | | SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR), |
| | | SDLK_KP_DBLVERTICALBAR = |
| | | SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR), |
| | | SDLK_KP_COLON = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON), |
| | | SDLK_KP_HASH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH), |
| | | SDLK_KP_SPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE), |
| | | SDLK_KP_AT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT), |
| | | SDLK_KP_EXCLAM = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM), |
| | | SDLK_KP_MEMSTORE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE), |
| | | SDLK_KP_MEMRECALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL), |
| | | SDLK_KP_MEMCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR), |
| | | SDLK_KP_MEMADD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD), |
| | | SDLK_KP_MEMSUBTRACT = |
| | | SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT), |
| | | SDLK_KP_MEMMULTIPLY = |
| | | SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY), |
| | | SDLK_KP_MEMDIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE), |
| | | SDLK_KP_PLUSMINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS), |
| | | SDLK_KP_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR), |
| | | SDLK_KP_CLEARENTRY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY), |
| | | SDLK_KP_BINARY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY), |
| | | SDLK_KP_OCTAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL), |
| | | SDLK_KP_DECIMAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL), |
| | | SDLK_KP_HEXADECIMAL = |
| | | SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL), |
| | | |
| | | SDLK_LCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL), |
| | | SDLK_LSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT), |
| | | SDLK_LALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT), |
| | | SDLK_LGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI), |
| | | SDLK_RCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL), |
| | | SDLK_RSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT), |
| | | SDLK_RALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT), |
| | | SDLK_RGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI), |
| | | |
| | | SDLK_MODE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE), |
| | | |
| | | SDLK_AUDIONEXT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIONEXT), |
| | | SDLK_AUDIOPREV = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPREV), |
| | | SDLK_AUDIOSTOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOSTOP), |
| | | SDLK_AUDIOPLAY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPLAY), |
| | | SDLK_AUDIOMUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOMUTE), |
| | | SDLK_MEDIASELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIASELECT), |
| | | SDLK_WWW = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WWW), |
| | | SDLK_MAIL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MAIL), |
| | | SDLK_CALCULATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALCULATOR), |
| | | SDLK_COMPUTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COMPUTER), |
| | | SDLK_AC_SEARCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH), |
| | | SDLK_AC_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME), |
| | | SDLK_AC_BACK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK), |
| | | SDLK_AC_FORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD), |
| | | SDLK_AC_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP), |
| | | SDLK_AC_REFRESH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH), |
| | | SDLK_AC_BOOKMARKS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS), |
| | | |
| | | SDLK_BRIGHTNESSDOWN = |
| | | SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSDOWN), |
| | | SDLK_BRIGHTNESSUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSUP), |
| | | SDLK_DISPLAYSWITCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DISPLAYSWITCH), |
| | | SDLK_KBDILLUMTOGGLE = |
| | | SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMTOGGLE), |
| | | SDLK_KBDILLUMDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN), |
| | | SDLK_KBDILLUMUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP), |
| | | SDLK_EJECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT), |
| | | SDLK_SLEEP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP) |
| | | }; |
| | | |
| | | /** |
| | | * \brief Enumeration of valid key mods (possibly OR'd together). |
| | | */ |
| | | typedef enum |
| | | { |
| | | KMOD_NONE = 0x0000, |
| | | KMOD_LSHIFT = 0x0001, |
| | | KMOD_RSHIFT = 0x0002, |
| | | KMOD_LCTRL = 0x0040, |
| | | KMOD_RCTRL = 0x0080, |
| | | KMOD_LALT = 0x0100, |
| | | KMOD_RALT = 0x0200, |
| | | KMOD_LGUI = 0x0400, |
| | | KMOD_RGUI = 0x0800, |
| | | KMOD_NUM = 0x1000, |
| | | KMOD_CAPS = 0x2000, |
| | | KMOD_MODE = 0x4000, |
| | | KMOD_RESERVED = 0x8000 |
| | | } SDL_Keymod; |
| | | |
| | | #define KMOD_CTRL (KMOD_LCTRL|KMOD_RCTRL) |
| | | #define KMOD_SHIFT (KMOD_LSHIFT|KMOD_RSHIFT) |
| | | #define KMOD_ALT (KMOD_LALT|KMOD_RALT) |
| | | #define KMOD_GUI (KMOD_LGUI|KMOD_RGUI) |
| | | |
| | | #endif /* _SDL_keycode_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_loadso.h |
| | | * |
| | | * System dependent library loading routines |
| | | * |
| | | * Some things to keep in mind: |
| | | * \li These functions only work on C function names. Other languages may |
| | | * have name mangling and intrinsic language support that varies from |
| | | * compiler to compiler. |
| | | * \li Make sure you declare your function pointers with the same calling |
| | | * convention as the actual library function. Your code will crash |
| | | * mysteriously if you do not do this. |
| | | * \li Avoid namespace collisions. If you load a symbol from the library, |
| | | * it is not defined whether or not it goes into the global symbol |
| | | * namespace for the application. If it does and it conflicts with |
| | | * symbols in your code or other shared libraries, you will not get |
| | | * the results you expect. :) |
| | | */ |
| | | |
| | | #ifndef _SDL_loadso_h |
| | | #define _SDL_loadso_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * This function dynamically loads a shared object and returns a pointer |
| | | * to the object handle (or NULL if there was an error). |
| | | * The 'sofile' parameter is a system dependent name of the object file. |
| | | */ |
| | | extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile); |
| | | |
| | | /** |
| | | * Given an object handle, this function looks up the address of the |
| | | * named function in the shared object and returns it. This address |
| | | * is no longer valid after calling SDL_UnloadObject(). |
| | | */ |
| | | extern DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, |
| | | const char *name); |
| | | |
| | | /** |
| | | * Unload a shared object from memory. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_loadso_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_log.h |
| | | * |
| | | * Simple log messages with categories and priorities. |
| | | * |
| | | * By default logs are quiet, but if you're debugging SDL you might want: |
| | | * |
| | | * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); |
| | | * |
| | | * Here's where the messages go on different platforms: |
| | | * Windows: debug output stream |
| | | * Android: log output |
| | | * Others: standard error output (stderr) |
| | | */ |
| | | |
| | | #ifndef _SDL_log_h |
| | | #define _SDL_log_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | |
| | | /** |
| | | * \brief The maximum size of a log message |
| | | * |
| | | * Messages longer than the maximum size will be truncated |
| | | */ |
| | | #define SDL_MAX_LOG_MESSAGE 4096 |
| | | |
| | | /** |
| | | * \brief The predefined log categories |
| | | * |
| | | * By default the application category is enabled at the INFO level, |
| | | * the assert category is enabled at the WARN level, test is enabled |
| | | * at the VERBOSE level and all other categories are enabled at the |
| | | * CRITICAL level. |
| | | */ |
| | | enum |
| | | { |
| | | SDL_LOG_CATEGORY_APPLICATION, |
| | | SDL_LOG_CATEGORY_ERROR, |
| | | SDL_LOG_CATEGORY_ASSERT, |
| | | SDL_LOG_CATEGORY_SYSTEM, |
| | | SDL_LOG_CATEGORY_AUDIO, |
| | | SDL_LOG_CATEGORY_VIDEO, |
| | | SDL_LOG_CATEGORY_RENDER, |
| | | SDL_LOG_CATEGORY_INPUT, |
| | | SDL_LOG_CATEGORY_TEST, |
| | | |
| | | /* Reserved for future SDL library use */ |
| | | SDL_LOG_CATEGORY_RESERVED1, |
| | | SDL_LOG_CATEGORY_RESERVED2, |
| | | SDL_LOG_CATEGORY_RESERVED3, |
| | | SDL_LOG_CATEGORY_RESERVED4, |
| | | SDL_LOG_CATEGORY_RESERVED5, |
| | | SDL_LOG_CATEGORY_RESERVED6, |
| | | SDL_LOG_CATEGORY_RESERVED7, |
| | | SDL_LOG_CATEGORY_RESERVED8, |
| | | SDL_LOG_CATEGORY_RESERVED9, |
| | | SDL_LOG_CATEGORY_RESERVED10, |
| | | |
| | | /* Beyond this point is reserved for application use, e.g. |
| | | enum { |
| | | MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM, |
| | | MYAPP_CATEGORY_AWESOME2, |
| | | MYAPP_CATEGORY_AWESOME3, |
| | | ... |
| | | }; |
| | | */ |
| | | SDL_LOG_CATEGORY_CUSTOM |
| | | }; |
| | | |
| | | /** |
| | | * \brief The predefined log priorities |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_LOG_PRIORITY_VERBOSE = 1, |
| | | SDL_LOG_PRIORITY_DEBUG, |
| | | SDL_LOG_PRIORITY_INFO, |
| | | SDL_LOG_PRIORITY_WARN, |
| | | SDL_LOG_PRIORITY_ERROR, |
| | | SDL_LOG_PRIORITY_CRITICAL, |
| | | SDL_NUM_LOG_PRIORITIES |
| | | } SDL_LogPriority; |
| | | |
| | | |
| | | /** |
| | | * \brief Set the priority of all log categories |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogSetAllPriority(SDL_LogPriority priority); |
| | | |
| | | /** |
| | | * \brief Set the priority of a particular log category |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogSetPriority(int category, |
| | | SDL_LogPriority priority); |
| | | |
| | | /** |
| | | * \brief Get the priority of a particular log category |
| | | */ |
| | | extern DECLSPEC SDL_LogPriority SDLCALL SDL_LogGetPriority(int category); |
| | | |
| | | /** |
| | | * \brief Reset all priorities to default. |
| | | * |
| | | * \note This is called in SDL_Quit(). |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void); |
| | | |
| | | /** |
| | | * \brief Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_Log(const char *fmt, ...); |
| | | |
| | | /** |
| | | * \brief Log a message with SDL_LOG_PRIORITY_VERBOSE |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, const char *fmt, ...); |
| | | |
| | | /** |
| | | * \brief Log a message with SDL_LOG_PRIORITY_DEBUG |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogDebug(int category, const char *fmt, ...); |
| | | |
| | | /** |
| | | * \brief Log a message with SDL_LOG_PRIORITY_INFO |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogInfo(int category, const char *fmt, ...); |
| | | |
| | | /** |
| | | * \brief Log a message with SDL_LOG_PRIORITY_WARN |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogWarn(int category, const char *fmt, ...); |
| | | |
| | | /** |
| | | * \brief Log a message with SDL_LOG_PRIORITY_ERROR |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogError(int category, const char *fmt, ...); |
| | | |
| | | /** |
| | | * \brief Log a message with SDL_LOG_PRIORITY_CRITICAL |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogCritical(int category, const char *fmt, ...); |
| | | |
| | | /** |
| | | * \brief Log a message with the specified category and priority. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogMessage(int category, |
| | | SDL_LogPriority priority, |
| | | const char *fmt, ...); |
| | | |
| | | /** |
| | | * \brief Log a message with the specified category and priority. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogMessageV(int category, |
| | | SDL_LogPriority priority, |
| | | const char *fmt, va_list ap); |
| | | |
| | | /** |
| | | * \brief The prototype for the log output function |
| | | */ |
| | | typedef void (*SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message); |
| | | |
| | | /** |
| | | * \brief Get the current log output function. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata); |
| | | |
| | | /** |
| | | * \brief This function allows you to replace the default log output |
| | | * function with one of your own. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_log_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | #ifndef _SDL_main_h |
| | | #define _SDL_main_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | |
| | | /** |
| | | * \file SDL_main.h |
| | | * |
| | | * Redefine main() on some platforms so that it is called by SDL. |
| | | */ |
| | | |
| | | #if defined(__WIN32__) || defined(__IPHONEOS__) || defined(__ANDROID__) |
| | | #ifndef SDL_MAIN_HANDLED |
| | | #define SDL_MAIN_NEEDED |
| | | #endif |
| | | #endif |
| | | |
| | | #ifdef __cplusplus |
| | | #define C_LINKAGE "C" |
| | | #else |
| | | #define C_LINKAGE |
| | | #endif /* __cplusplus */ |
| | | |
| | | /** |
| | | * \file SDL_main.h |
| | | * |
| | | * The application's main() function must be called with C linkage, |
| | | * and should be declared like this: |
| | | * \code |
| | | * #ifdef __cplusplus |
| | | * extern "C" |
| | | * #endif |
| | | * int main(int argc, char *argv[]) |
| | | * { |
| | | * } |
| | | * \endcode |
| | | */ |
| | | |
| | | #ifdef SDL_MAIN_NEEDED |
| | | #define main SDL_main |
| | | #endif |
| | | |
| | | /** |
| | | * The prototype for the application's main() function |
| | | */ |
| | | extern C_LINKAGE int SDL_main(int argc, char *argv[]); |
| | | |
| | | |
| | | #include "begin_code.h" |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | #ifdef __WIN32__ |
| | | |
| | | /** |
| | | * This can be called to set the application class at startup |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RegisterApp(char *name, Uint32 style, |
| | | void *hInst); |
| | | extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); |
| | | |
| | | #endif /* __WIN32__ */ |
| | | |
| | | |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_main_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | #ifndef _SDL_messagebox_h |
| | | #define _SDL_messagebox_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_video.h" /* For SDL_Window */ |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief SDL_MessageBox flags. If supported will display warning icon, etc. |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */ |
| | | SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */ |
| | | SDL_MESSAGEBOX_INFORMATION = 0x00000040 /**< informational dialog */ |
| | | } SDL_MessageBoxFlags; |
| | | |
| | | /** |
| | | * \brief Flags for SDL_MessageBoxButtonData. |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001, /**< Marks the default button when return is hit */ |
| | | SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002 /**< Marks the default button when escape is hit */ |
| | | } SDL_MessageBoxButtonFlags; |
| | | |
| | | /** |
| | | * \brief Individual button data. |
| | | */ |
| | | typedef struct |
| | | { |
| | | Uint32 flags; /**< ::SDL_MessageBoxButtonFlags */ |
| | | int buttonid; /**< User defined button id (value returned via SDL_ShowMessageBox) */ |
| | | const char * text; /**< The UTF-8 button text */ |
| | | } SDL_MessageBoxButtonData; |
| | | |
| | | /** |
| | | * \brief RGB value used in a message box color scheme |
| | | */ |
| | | typedef struct |
| | | { |
| | | Uint8 r, g, b; |
| | | } SDL_MessageBoxColor; |
| | | |
| | | typedef enum |
| | | { |
| | | SDL_MESSAGEBOX_COLOR_BACKGROUND, |
| | | SDL_MESSAGEBOX_COLOR_TEXT, |
| | | SDL_MESSAGEBOX_COLOR_BUTTON_BORDER, |
| | | SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND, |
| | | SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED, |
| | | SDL_MESSAGEBOX_COLOR_MAX |
| | | } SDL_MessageBoxColorType; |
| | | |
| | | /** |
| | | * \brief A set of colors to use for message box dialogs |
| | | */ |
| | | typedef struct |
| | | { |
| | | SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX]; |
| | | } SDL_MessageBoxColorScheme; |
| | | |
| | | /** |
| | | * \brief MessageBox structure containing title, text, window, etc. |
| | | */ |
| | | typedef struct |
| | | { |
| | | Uint32 flags; /**< ::SDL_MessageBoxFlags */ |
| | | SDL_Window *window; /**< Parent window, can be NULL */ |
| | | const char *title; /**< UTF-8 title */ |
| | | const char *message; /**< UTF-8 message text */ |
| | | |
| | | int numbuttons; |
| | | const SDL_MessageBoxButtonData *buttons; |
| | | |
| | | const SDL_MessageBoxColorScheme *colorScheme; /**< ::SDL_MessageBoxColorScheme, can be NULL to use system settings */ |
| | | } SDL_MessageBoxData; |
| | | |
| | | /** |
| | | * \brief Create a modal message box. |
| | | * |
| | | * \param messageboxdata The SDL_MessageBoxData structure with title, text, etc. |
| | | * \param buttonid The pointer to which user id of hit button should be copied. |
| | | * |
| | | * \return -1 on error, otherwise 0 and buttonid contains user id of button |
| | | * hit or -1 if dialog was closed. |
| | | * |
| | | * \note This function should be called on the thread that created the parent |
| | | * window, or on the main thread if the messagebox has no parent. It will |
| | | * block execution of that thread until the user clicks a button or |
| | | * closes the messagebox. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); |
| | | |
| | | /** |
| | | * \brief Create a simple modal message box |
| | | * |
| | | * \param flags ::SDL_MessageBoxFlags |
| | | * \param title UTF-8 title text |
| | | * \param message UTF-8 message text |
| | | * \param window The parent window, or NULL for no parent |
| | | * |
| | | * \return 0 on success, -1 on error |
| | | * |
| | | * \sa SDL_ShowMessageBox |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_messagebox_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_mouse.h |
| | | * |
| | | * Include file for SDL mouse event handling. |
| | | */ |
| | | |
| | | #ifndef _SDL_mouse_h |
| | | #define _SDL_mouse_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | #include "SDL_video.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | typedef struct SDL_Cursor SDL_Cursor; /* Implementation dependent */ |
| | | |
| | | /** |
| | | * \brief Cursor types for SDL_CreateSystemCursor. |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_SYSTEM_CURSOR_ARROW, /**< Arrow */ |
| | | SDL_SYSTEM_CURSOR_IBEAM, /**< I-beam */ |
| | | SDL_SYSTEM_CURSOR_WAIT, /**< Wait */ |
| | | SDL_SYSTEM_CURSOR_CROSSHAIR, /**< Crosshair */ |
| | | SDL_SYSTEM_CURSOR_WAITARROW, /**< Small wait cursor (or Wait if not available) */ |
| | | SDL_SYSTEM_CURSOR_SIZENWSE, /**< Double arrow pointing northwest and southeast */ |
| | | SDL_SYSTEM_CURSOR_SIZENESW, /**< Double arrow pointing northeast and southwest */ |
| | | SDL_SYSTEM_CURSOR_SIZEWE, /**< Double arrow pointing west and east */ |
| | | SDL_SYSTEM_CURSOR_SIZENS, /**< Double arrow pointing north and south */ |
| | | SDL_SYSTEM_CURSOR_SIZEALL, /**< Four pointed arrow pointing north, south, east, and west */ |
| | | SDL_SYSTEM_CURSOR_NO, /**< Slashed circle or crossbones */ |
| | | SDL_SYSTEM_CURSOR_HAND, /**< Hand */ |
| | | SDL_NUM_SYSTEM_CURSORS |
| | | } SDL_SystemCursor; |
| | | |
| | | /* Function prototypes */ |
| | | |
| | | /** |
| | | * \brief Get the window which currently has mouse focus. |
| | | */ |
| | | extern DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void); |
| | | |
| | | /** |
| | | * \brief Retrieve the current state of the mouse. |
| | | * |
| | | * The current button state is returned as a button bitmask, which can |
| | | * be tested using the SDL_BUTTON(X) macros, and x and y are set to the |
| | | * mouse cursor position relative to the focus window for the currently |
| | | * selected mouse. You can pass NULL for either x or y. |
| | | */ |
| | | extern DECLSPEC Uint32 SDLCALL SDL_GetMouseState(int *x, int *y); |
| | | |
| | | /** |
| | | * \brief Retrieve the relative state of the mouse. |
| | | * |
| | | * The current button state is returned as a button bitmask, which can |
| | | * be tested using the SDL_BUTTON(X) macros, and x and y are set to the |
| | | * mouse deltas since the last call to SDL_GetRelativeMouseState(). |
| | | */ |
| | | extern DECLSPEC Uint32 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); |
| | | |
| | | /** |
| | | * \brief Moves the mouse to the given position within the window. |
| | | * |
| | | * \param window The window to move the mouse into, or NULL for the current mouse focus |
| | | * \param x The x coordinate within the window |
| | | * \param y The y coordinate within the window |
| | | * |
| | | * \note This function generates a mouse motion event |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, |
| | | int x, int y); |
| | | |
| | | /** |
| | | * \brief Set relative mouse mode. |
| | | * |
| | | * \param enabled Whether or not to enable relative mode |
| | | * |
| | | * \return 0 on success, or -1 if relative mode is not supported. |
| | | * |
| | | * While the mouse is in relative mode, the cursor is hidden, and the |
| | | * driver will try to report continuous motion in the current window. |
| | | * Only relative motion events will be delivered, the mouse position |
| | | * will not change. |
| | | * |
| | | * \note This function will flush any pending mouse motion. |
| | | * |
| | | * \sa SDL_GetRelativeMouseMode() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetRelativeMouseMode(SDL_bool enabled); |
| | | |
| | | /** |
| | | * \brief Query whether relative mouse mode is enabled. |
| | | * |
| | | * \sa SDL_SetRelativeMouseMode() |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_GetRelativeMouseMode(void); |
| | | |
| | | /** |
| | | * \brief Create a cursor, using the specified bitmap data and |
| | | * mask (in MSB format). |
| | | * |
| | | * The cursor width must be a multiple of 8 bits. |
| | | * |
| | | * The cursor is created in black and white according to the following: |
| | | * <table> |
| | | * <tr><td> data </td><td> mask </td><td> resulting pixel on screen </td></tr> |
| | | * <tr><td> 0 </td><td> 1 </td><td> White </td></tr> |
| | | * <tr><td> 1 </td><td> 1 </td><td> Black </td></tr> |
| | | * <tr><td> 0 </td><td> 0 </td><td> Transparent </td></tr> |
| | | * <tr><td> 1 </td><td> 0 </td><td> Inverted color if possible, black |
| | | * if not. </td></tr> |
| | | * </table> |
| | | * |
| | | * \sa SDL_FreeCursor() |
| | | */ |
| | | extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateCursor(const Uint8 * data, |
| | | const Uint8 * mask, |
| | | int w, int h, int hot_x, |
| | | int hot_y); |
| | | |
| | | /** |
| | | * \brief Create a color cursor. |
| | | * |
| | | * \sa SDL_FreeCursor() |
| | | */ |
| | | extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateColorCursor(SDL_Surface *surface, |
| | | int hot_x, |
| | | int hot_y); |
| | | |
| | | /** |
| | | * \brief Create a system cursor. |
| | | * |
| | | * \sa SDL_FreeCursor() |
| | | */ |
| | | extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateSystemCursor(SDL_SystemCursor id); |
| | | |
| | | /** |
| | | * \brief Set the active cursor. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor * cursor); |
| | | |
| | | /** |
| | | * \brief Return the active cursor. |
| | | */ |
| | | extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetCursor(void); |
| | | |
| | | /** |
| | | * \brief Return the default cursor. |
| | | */ |
| | | extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetDefaultCursor(void); |
| | | |
| | | /** |
| | | * \brief Frees a cursor created with SDL_CreateCursor(). |
| | | * |
| | | * \sa SDL_CreateCursor() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor * cursor); |
| | | |
| | | /** |
| | | * \brief Toggle whether or not the cursor is shown. |
| | | * |
| | | * \param toggle 1 to show the cursor, 0 to hide it, -1 to query the current |
| | | * state. |
| | | * |
| | | * \return 1 if the cursor is shown, or 0 if the cursor is hidden. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); |
| | | |
| | | /** |
| | | * Used as a mask when testing buttons in buttonstate. |
| | | * - Button 1: Left mouse button |
| | | * - Button 2: Middle mouse button |
| | | * - Button 3: Right mouse button |
| | | */ |
| | | #define SDL_BUTTON(X) (1 << ((X)-1)) |
| | | #define SDL_BUTTON_LEFT 1 |
| | | #define SDL_BUTTON_MIDDLE 2 |
| | | #define SDL_BUTTON_RIGHT 3 |
| | | #define SDL_BUTTON_X1 4 |
| | | #define SDL_BUTTON_X2 5 |
| | | #define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) |
| | | #define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) |
| | | #define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) |
| | | #define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) |
| | | #define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_mouse_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | #ifndef _SDL_mutex_h |
| | | #define _SDL_mutex_h |
| | | |
| | | /** |
| | | * \file SDL_mutex.h |
| | | * |
| | | * Functions to provide thread synchronization primitives. |
| | | */ |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * Synchronization functions which can time out return this value |
| | | * if they time out. |
| | | */ |
| | | #define SDL_MUTEX_TIMEDOUT 1 |
| | | |
| | | /** |
| | | * This is the timeout value which corresponds to never time out. |
| | | */ |
| | | #define SDL_MUTEX_MAXWAIT (~(Uint32)0) |
| | | |
| | | |
| | | /** |
| | | * \name Mutex functions |
| | | */ |
| | | /*@{*/ |
| | | |
| | | /* The SDL mutex structure, defined in SDL_mutex.c */ |
| | | struct SDL_mutex; |
| | | typedef struct SDL_mutex SDL_mutex; |
| | | |
| | | /** |
| | | * Create a mutex, initialized unlocked. |
| | | */ |
| | | extern DECLSPEC SDL_mutex *SDLCALL SDL_CreateMutex(void); |
| | | |
| | | /** |
| | | * Lock the mutex. |
| | | * |
| | | * \return 0, or -1 on error. |
| | | */ |
| | | #define SDL_mutexP(m) SDL_LockMutex(m) |
| | | extern DECLSPEC int SDLCALL SDL_LockMutex(SDL_mutex * mutex); |
| | | |
| | | /** |
| | | * Try to lock the mutex |
| | | * |
| | | * \return 0, SDL_MUTEX_TIMEDOUT, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_TryLockMutex(SDL_mutex * mutex); |
| | | |
| | | /** |
| | | * Unlock the mutex. |
| | | * |
| | | * \return 0, or -1 on error. |
| | | * |
| | | * \warning It is an error to unlock a mutex that has not been locked by |
| | | * the current thread, and doing so results in undefined behavior. |
| | | */ |
| | | #define SDL_mutexV(m) SDL_UnlockMutex(m) |
| | | extern DECLSPEC int SDLCALL SDL_UnlockMutex(SDL_mutex * mutex); |
| | | |
| | | /** |
| | | * Destroy a mutex. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex * mutex); |
| | | |
| | | /*@}*//*Mutex functions*/ |
| | | |
| | | |
| | | /** |
| | | * \name Semaphore functions |
| | | */ |
| | | /*@{*/ |
| | | |
| | | /* The SDL semaphore structure, defined in SDL_sem.c */ |
| | | struct SDL_semaphore; |
| | | typedef struct SDL_semaphore SDL_sem; |
| | | |
| | | /** |
| | | * Create a semaphore, initialized with value, returns NULL on failure. |
| | | */ |
| | | extern DECLSPEC SDL_sem *SDLCALL SDL_CreateSemaphore(Uint32 initial_value); |
| | | |
| | | /** |
| | | * Destroy a semaphore. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem * sem); |
| | | |
| | | /** |
| | | * This function suspends the calling thread until the semaphore pointed |
| | | * to by \c sem has a positive count. It then atomically decreases the |
| | | * semaphore count. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem * sem); |
| | | |
| | | /** |
| | | * Non-blocking variant of SDL_SemWait(). |
| | | * |
| | | * \return 0 if the wait succeeds, ::SDL_MUTEX_TIMEDOUT if the wait would |
| | | * block, and -1 on error. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem * sem); |
| | | |
| | | /** |
| | | * Variant of SDL_SemWait() with a timeout in milliseconds. |
| | | * |
| | | * \return 0 if the wait succeeds, ::SDL_MUTEX_TIMEDOUT if the wait does not |
| | | * succeed in the allotted time, and -1 on error. |
| | | * |
| | | * \warning On some platforms this function is implemented by looping with a |
| | | * delay of 1 ms, and so should be avoided if possible. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem * sem, Uint32 ms); |
| | | |
| | | /** |
| | | * Atomically increases the semaphore's count (not blocking). |
| | | * |
| | | * \return 0, or -1 on error. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem * sem); |
| | | |
| | | /** |
| | | * Returns the current count of the semaphore. |
| | | */ |
| | | extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem * sem); |
| | | |
| | | /*@}*//*Semaphore functions*/ |
| | | |
| | | |
| | | /** |
| | | * \name Condition variable functions |
| | | */ |
| | | /*@{*/ |
| | | |
| | | /* The SDL condition variable structure, defined in SDL_cond.c */ |
| | | struct SDL_cond; |
| | | typedef struct SDL_cond SDL_cond; |
| | | |
| | | /** |
| | | * Create a condition variable. |
| | | * |
| | | * Typical use of condition variables: |
| | | * |
| | | * Thread A: |
| | | * SDL_LockMutex(lock); |
| | | * while ( ! condition ) { |
| | | * SDL_CondWait(cond, lock); |
| | | * } |
| | | * SDL_UnlockMutex(lock); |
| | | * |
| | | * Thread B: |
| | | * SDL_LockMutex(lock); |
| | | * ... |
| | | * condition = true; |
| | | * ... |
| | | * SDL_CondSignal(cond); |
| | | * SDL_UnlockMutex(lock); |
| | | * |
| | | * There is some discussion whether to signal the condition variable |
| | | * with the mutex locked or not. There is some potential performance |
| | | * benefit to unlocking first on some platforms, but there are some |
| | | * potential race conditions depending on how your code is structured. |
| | | * |
| | | * In general it's safer to signal the condition variable while the |
| | | * mutex is locked. |
| | | */ |
| | | extern DECLSPEC SDL_cond *SDLCALL SDL_CreateCond(void); |
| | | |
| | | /** |
| | | * Destroy a condition variable. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond * cond); |
| | | |
| | | /** |
| | | * Restart one of the threads that are waiting on the condition variable. |
| | | * |
| | | * \return 0 or -1 on error. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond * cond); |
| | | |
| | | /** |
| | | * Restart all threads that are waiting on the condition variable. |
| | | * |
| | | * \return 0 or -1 on error. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond * cond); |
| | | |
| | | /** |
| | | * Wait on the condition variable, unlocking the provided mutex. |
| | | * |
| | | * \warning The mutex must be locked before entering this function! |
| | | * |
| | | * The mutex is re-locked once the condition variable is signaled. |
| | | * |
| | | * \return 0 when it is signaled, or -1 on error. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex); |
| | | |
| | | /** |
| | | * Waits for at most \c ms milliseconds, and returns 0 if the condition |
| | | * variable is signaled, ::SDL_MUTEX_TIMEDOUT if the condition is not |
| | | * signaled in the allotted time, and -1 on error. |
| | | * |
| | | * \warning On some platforms this function is implemented by looping with a |
| | | * delay of 1 ms, and so should be avoided if possible. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond * cond, |
| | | SDL_mutex * mutex, Uint32 ms); |
| | | |
| | | /*@}*//*Condition variable functions*/ |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_mutex_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | |
| | | #ifndef _SDLname_h_ |
| | | #define _SDLname_h_ |
| | | |
| | | #if defined(__STDC__) || defined(__cplusplus) |
| | | #define NeedFunctionPrototypes 1 |
| | | #endif |
| | | |
| | | #define SDL_NAME(X) SDL_##X |
| | | |
| | | #endif /* _SDLname_h_ */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_opengles.h |
| | | * |
| | | * This is a simple file to encapsulate the OpenGL ES 1.X API headers. |
| | | */ |
| | | |
| | | #ifdef __IPHONEOS__ |
| | | #include <OpenGLES/ES1/gl.h> |
| | | #include <OpenGLES/ES1/glext.h> |
| | | #else |
| | | #include <GLES/gl.h> |
| | | #include <GLES/glext.h> |
| | | #endif |
| | | |
| | | #ifndef APIENTRY |
| | | #define APIENTRY |
| | | #endif |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_opengles.h |
| | | * |
| | | * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. |
| | | */ |
| | | |
| | | #ifdef __IPHONEOS__ |
| | | #include <OpenGLES/ES2/gl.h> |
| | | #include <OpenGLES/ES2/glext.h> |
| | | #else |
| | | #include <GLES2/gl2.h> |
| | | #include <GLES2/gl2ext.h> |
| | | #endif |
| | | |
| | | #ifndef APIENTRY |
| | | #define APIENTRY |
| | | #endif |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_pixels.h |
| | | * |
| | | * Header for the enumerated pixel format definitions. |
| | | */ |
| | | |
| | | #ifndef _SDL_pixels_h |
| | | #define _SDL_pixels_h |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \name Transparency definitions |
| | | * |
| | | * These define alpha as the opacity of a surface. |
| | | */ |
| | | /*@{*/ |
| | | #define SDL_ALPHA_OPAQUE 255 |
| | | #define SDL_ALPHA_TRANSPARENT 0 |
| | | /*@}*/ |
| | | |
| | | /** Pixel type. */ |
| | | enum |
| | | { |
| | | SDL_PIXELTYPE_UNKNOWN, |
| | | SDL_PIXELTYPE_INDEX1, |
| | | SDL_PIXELTYPE_INDEX4, |
| | | SDL_PIXELTYPE_INDEX8, |
| | | SDL_PIXELTYPE_PACKED8, |
| | | SDL_PIXELTYPE_PACKED16, |
| | | SDL_PIXELTYPE_PACKED32, |
| | | SDL_PIXELTYPE_ARRAYU8, |
| | | SDL_PIXELTYPE_ARRAYU16, |
| | | SDL_PIXELTYPE_ARRAYU32, |
| | | SDL_PIXELTYPE_ARRAYF16, |
| | | SDL_PIXELTYPE_ARRAYF32 |
| | | }; |
| | | |
| | | /** Bitmap pixel order, high bit -> low bit. */ |
| | | enum |
| | | { |
| | | SDL_BITMAPORDER_NONE, |
| | | SDL_BITMAPORDER_4321, |
| | | SDL_BITMAPORDER_1234 |
| | | }; |
| | | |
| | | /** Packed component order, high bit -> low bit. */ |
| | | enum |
| | | { |
| | | SDL_PACKEDORDER_NONE, |
| | | SDL_PACKEDORDER_XRGB, |
| | | SDL_PACKEDORDER_RGBX, |
| | | SDL_PACKEDORDER_ARGB, |
| | | SDL_PACKEDORDER_RGBA, |
| | | SDL_PACKEDORDER_XBGR, |
| | | SDL_PACKEDORDER_BGRX, |
| | | SDL_PACKEDORDER_ABGR, |
| | | SDL_PACKEDORDER_BGRA |
| | | }; |
| | | |
| | | /** Array component order, low byte -> high byte. */ |
| | | enum |
| | | { |
| | | SDL_ARRAYORDER_NONE, |
| | | SDL_ARRAYORDER_RGB, |
| | | SDL_ARRAYORDER_RGBA, |
| | | SDL_ARRAYORDER_ARGB, |
| | | SDL_ARRAYORDER_BGR, |
| | | SDL_ARRAYORDER_BGRA, |
| | | SDL_ARRAYORDER_ABGR |
| | | }; |
| | | |
| | | /** Packed component layout. */ |
| | | enum |
| | | { |
| | | SDL_PACKEDLAYOUT_NONE, |
| | | SDL_PACKEDLAYOUT_332, |
| | | SDL_PACKEDLAYOUT_4444, |
| | | SDL_PACKEDLAYOUT_1555, |
| | | SDL_PACKEDLAYOUT_5551, |
| | | SDL_PACKEDLAYOUT_565, |
| | | SDL_PACKEDLAYOUT_8888, |
| | | SDL_PACKEDLAYOUT_2101010, |
| | | SDL_PACKEDLAYOUT_1010102 |
| | | }; |
| | | |
| | | #define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D) |
| | | |
| | | #define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \ |
| | | ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ |
| | | ((bits) << 8) | ((bytes) << 0)) |
| | | |
| | | #define SDL_PIXELFLAG(X) (((X) >> 28) & 0x0F) |
| | | #define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F) |
| | | #define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F) |
| | | #define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F) |
| | | #define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF) |
| | | #define SDL_BYTESPERPIXEL(X) \ |
| | | (SDL_ISPIXELFORMAT_FOURCC(X) ? \ |
| | | ((((X) == SDL_PIXELFORMAT_YUY2) || \ |
| | | ((X) == SDL_PIXELFORMAT_UYVY) || \ |
| | | ((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF)) |
| | | |
| | | #define SDL_ISPIXELFORMAT_INDEXED(format) \ |
| | | (!SDL_ISPIXELFORMAT_FOURCC(format) && \ |
| | | ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \ |
| | | (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ |
| | | (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))) |
| | | |
| | | #define SDL_ISPIXELFORMAT_ALPHA(format) \ |
| | | (!SDL_ISPIXELFORMAT_FOURCC(format) && \ |
| | | ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \ |
| | | (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \ |
| | | (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \ |
| | | (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) |
| | | |
| | | /* The flag is set to 1 because 0x1? is not in the printable ASCII range */ |
| | | #define SDL_ISPIXELFORMAT_FOURCC(format) \ |
| | | ((format) && (SDL_PIXELFLAG(format) != 1)) |
| | | |
| | | /* Note: If you modify this list, update SDL_GetPixelFormatName() */ |
| | | enum |
| | | { |
| | | SDL_PIXELFORMAT_UNKNOWN, |
| | | SDL_PIXELFORMAT_INDEX1LSB = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, |
| | | 1, 0), |
| | | SDL_PIXELFORMAT_INDEX1MSB = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, |
| | | 1, 0), |
| | | SDL_PIXELFORMAT_INDEX4LSB = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, |
| | | 4, 0), |
| | | SDL_PIXELFORMAT_INDEX4MSB = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, |
| | | 4, 0), |
| | | SDL_PIXELFORMAT_INDEX8 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1), |
| | | SDL_PIXELFORMAT_RGB332 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB, |
| | | SDL_PACKEDLAYOUT_332, 8, 1), |
| | | SDL_PIXELFORMAT_RGB444 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, |
| | | SDL_PACKEDLAYOUT_4444, 12, 2), |
| | | SDL_PIXELFORMAT_RGB555 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, |
| | | SDL_PACKEDLAYOUT_1555, 15, 2), |
| | | SDL_PIXELFORMAT_BGR555 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, |
| | | SDL_PACKEDLAYOUT_1555, 15, 2), |
| | | SDL_PIXELFORMAT_ARGB4444 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, |
| | | SDL_PACKEDLAYOUT_4444, 16, 2), |
| | | SDL_PIXELFORMAT_RGBA4444 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, |
| | | SDL_PACKEDLAYOUT_4444, 16, 2), |
| | | SDL_PIXELFORMAT_ABGR4444 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, |
| | | SDL_PACKEDLAYOUT_4444, 16, 2), |
| | | SDL_PIXELFORMAT_BGRA4444 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, |
| | | SDL_PACKEDLAYOUT_4444, 16, 2), |
| | | SDL_PIXELFORMAT_ARGB1555 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, |
| | | SDL_PACKEDLAYOUT_1555, 16, 2), |
| | | SDL_PIXELFORMAT_RGBA5551 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, |
| | | SDL_PACKEDLAYOUT_5551, 16, 2), |
| | | SDL_PIXELFORMAT_ABGR1555 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, |
| | | SDL_PACKEDLAYOUT_1555, 16, 2), |
| | | SDL_PIXELFORMAT_BGRA5551 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, |
| | | SDL_PACKEDLAYOUT_5551, 16, 2), |
| | | SDL_PIXELFORMAT_RGB565 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, |
| | | SDL_PACKEDLAYOUT_565, 16, 2), |
| | | SDL_PIXELFORMAT_BGR565 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, |
| | | SDL_PACKEDLAYOUT_565, 16, 2), |
| | | SDL_PIXELFORMAT_RGB24 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, |
| | | 24, 3), |
| | | SDL_PIXELFORMAT_BGR24 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0, |
| | | 24, 3), |
| | | SDL_PIXELFORMAT_RGB888 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, |
| | | SDL_PACKEDLAYOUT_8888, 24, 4), |
| | | SDL_PIXELFORMAT_RGBX8888 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, |
| | | SDL_PACKEDLAYOUT_8888, 24, 4), |
| | | SDL_PIXELFORMAT_BGR888 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, |
| | | SDL_PACKEDLAYOUT_8888, 24, 4), |
| | | SDL_PIXELFORMAT_BGRX8888 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, |
| | | SDL_PACKEDLAYOUT_8888, 24, 4), |
| | | SDL_PIXELFORMAT_ARGB8888 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, |
| | | SDL_PACKEDLAYOUT_8888, 32, 4), |
| | | SDL_PIXELFORMAT_RGBA8888 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA, |
| | | SDL_PACKEDLAYOUT_8888, 32, 4), |
| | | SDL_PIXELFORMAT_ABGR8888 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, |
| | | SDL_PACKEDLAYOUT_8888, 32, 4), |
| | | SDL_PIXELFORMAT_BGRA8888 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA, |
| | | SDL_PACKEDLAYOUT_8888, 32, 4), |
| | | SDL_PIXELFORMAT_ARGB2101010 = |
| | | SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, |
| | | SDL_PACKEDLAYOUT_2101010, 32, 4), |
| | | |
| | | SDL_PIXELFORMAT_YV12 = /**< Planar mode: Y + V + U (3 planes) */ |
| | | SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), |
| | | SDL_PIXELFORMAT_IYUV = /**< Planar mode: Y + U + V (3 planes) */ |
| | | SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'), |
| | | SDL_PIXELFORMAT_YUY2 = /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */ |
| | | SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'), |
| | | SDL_PIXELFORMAT_UYVY = /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */ |
| | | SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), |
| | | SDL_PIXELFORMAT_YVYU = /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */ |
| | | SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U') |
| | | }; |
| | | |
| | | typedef struct SDL_Color |
| | | { |
| | | Uint8 r; |
| | | Uint8 g; |
| | | Uint8 b; |
| | | Uint8 a; |
| | | } SDL_Color; |
| | | #define SDL_Colour SDL_Color |
| | | |
| | | typedef struct SDL_Palette |
| | | { |
| | | int ncolors; |
| | | SDL_Color *colors; |
| | | Uint32 version; |
| | | int refcount; |
| | | } SDL_Palette; |
| | | |
| | | /** |
| | | * \note Everything in the pixel format structure is read-only. |
| | | */ |
| | | typedef struct SDL_PixelFormat |
| | | { |
| | | Uint32 format; |
| | | SDL_Palette *palette; |
| | | Uint8 BitsPerPixel; |
| | | Uint8 BytesPerPixel; |
| | | Uint8 padding[2]; |
| | | Uint32 Rmask; |
| | | Uint32 Gmask; |
| | | Uint32 Bmask; |
| | | Uint32 Amask; |
| | | Uint8 Rloss; |
| | | Uint8 Gloss; |
| | | Uint8 Bloss; |
| | | Uint8 Aloss; |
| | | Uint8 Rshift; |
| | | Uint8 Gshift; |
| | | Uint8 Bshift; |
| | | Uint8 Ashift; |
| | | int refcount; |
| | | struct SDL_PixelFormat *next; |
| | | } SDL_PixelFormat; |
| | | |
| | | /** |
| | | * \brief Get the human readable name of a pixel format |
| | | */ |
| | | extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format); |
| | | |
| | | /** |
| | | * \brief Convert one of the enumerated pixel formats to a bpp and RGBA masks. |
| | | * |
| | | * \return SDL_TRUE, or SDL_FALSE if the conversion wasn't possible. |
| | | * |
| | | * \sa SDL_MasksToPixelFormatEnum() |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format, |
| | | int *bpp, |
| | | Uint32 * Rmask, |
| | | Uint32 * Gmask, |
| | | Uint32 * Bmask, |
| | | Uint32 * Amask); |
| | | |
| | | /** |
| | | * \brief Convert a bpp and RGBA masks to an enumerated pixel format. |
| | | * |
| | | * \return The pixel format, or ::SDL_PIXELFORMAT_UNKNOWN if the conversion |
| | | * wasn't possible. |
| | | * |
| | | * \sa SDL_PixelFormatEnumToMasks() |
| | | */ |
| | | extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp, |
| | | Uint32 Rmask, |
| | | Uint32 Gmask, |
| | | Uint32 Bmask, |
| | | Uint32 Amask); |
| | | |
| | | /** |
| | | * \brief Create an SDL_PixelFormat structure from a pixel format enum. |
| | | */ |
| | | extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format); |
| | | |
| | | /** |
| | | * \brief Free an SDL_PixelFormat structure. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format); |
| | | |
| | | /** |
| | | * \brief Create a palette structure with the specified number of color |
| | | * entries. |
| | | * |
| | | * \return A new palette, or NULL if there wasn't enough memory. |
| | | * |
| | | * \note The palette entries are initialized to white. |
| | | * |
| | | * \sa SDL_FreePalette() |
| | | */ |
| | | extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors); |
| | | |
| | | /** |
| | | * \brief Set the palette for a pixel format structure. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format, |
| | | SDL_Palette *palette); |
| | | |
| | | /** |
| | | * \brief Set a range of colors in a palette. |
| | | * |
| | | * \param palette The palette to modify. |
| | | * \param colors An array of colors to copy into the palette. |
| | | * \param firstcolor The index of the first palette entry to modify. |
| | | * \param ncolors The number of entries to modify. |
| | | * |
| | | * \return 0 on success, or -1 if not all of the colors could be set. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette, |
| | | const SDL_Color * colors, |
| | | int firstcolor, int ncolors); |
| | | |
| | | /** |
| | | * \brief Free a palette created with SDL_AllocPalette(). |
| | | * |
| | | * \sa SDL_AllocPalette() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette); |
| | | |
| | | /** |
| | | * \brief Maps an RGB triple to an opaque pixel value for a given pixel format. |
| | | * |
| | | * \sa SDL_MapRGBA |
| | | */ |
| | | extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format, |
| | | Uint8 r, Uint8 g, Uint8 b); |
| | | |
| | | /** |
| | | * \brief Maps an RGBA quadruple to a pixel value for a given pixel format. |
| | | * |
| | | * \sa SDL_MapRGB |
| | | */ |
| | | extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format, |
| | | Uint8 r, Uint8 g, Uint8 b, |
| | | Uint8 a); |
| | | |
| | | /** |
| | | * \brief Get the RGB components from a pixel of the specified format. |
| | | * |
| | | * \sa SDL_GetRGBA |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, |
| | | const SDL_PixelFormat * format, |
| | | Uint8 * r, Uint8 * g, Uint8 * b); |
| | | |
| | | /** |
| | | * \brief Get the RGBA components from a pixel of the specified format. |
| | | * |
| | | * \sa SDL_GetRGB |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, |
| | | const SDL_PixelFormat * format, |
| | | Uint8 * r, Uint8 * g, Uint8 * b, |
| | | Uint8 * a); |
| | | |
| | | /** |
| | | * \brief Calculate a 256 entry gamma ramp for a gamma value. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_CalculateGammaRamp(float gamma, Uint16 * ramp); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_pixels_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_platform.h |
| | | * |
| | | * Try to get a standard set of platform defines. |
| | | */ |
| | | |
| | | #ifndef _SDL_platform_h |
| | | #define _SDL_platform_h |
| | | |
| | | #if defined(_AIX) |
| | | #undef __AIX__ |
| | | #define __AIX__ 1 |
| | | #endif |
| | | #if defined(__BEOS__) |
| | | #undef __BEOS__ |
| | | #define __BEOS__ 1 |
| | | #endif |
| | | #if defined(__HAIKU__) |
| | | #undef __HAIKU__ |
| | | #define __HAIKU__ 1 |
| | | #endif |
| | | #if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) |
| | | #undef __BSDI__ |
| | | #define __BSDI__ 1 |
| | | #endif |
| | | #if defined(_arch_dreamcast) |
| | | #undef __DREAMCAST__ |
| | | #define __DREAMCAST__ 1 |
| | | #endif |
| | | #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) |
| | | #undef __FREEBSD__ |
| | | #define __FREEBSD__ 1 |
| | | #endif |
| | | #if defined(hpux) || defined(__hpux) || defined(__hpux__) |
| | | #undef __HPUX__ |
| | | #define __HPUX__ 1 |
| | | #endif |
| | | #if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) |
| | | #undef __IRIX__ |
| | | #define __IRIX__ 1 |
| | | #endif |
| | | #if defined(linux) || defined(__linux) || defined(__linux__) |
| | | #undef __LINUX__ |
| | | #define __LINUX__ 1 |
| | | #endif |
| | | #if defined(ANDROID) |
| | | #undef __ANDROID__ |
| | | #undef __LINUX__ /*do we need to do this?*/ |
| | | #define __ANDROID__ 1 |
| | | #endif |
| | | |
| | | #if defined(__APPLE__) |
| | | /* lets us know what version of Mac OS X we're compiling on */ |
| | | #include "AvailabilityMacros.h" |
| | | #include "TargetConditionals.h" |
| | | #if TARGET_OS_IPHONE |
| | | /* if compiling for iPhone */ |
| | | #undef __IPHONEOS__ |
| | | #define __IPHONEOS__ 1 |
| | | #undef __MACOSX__ |
| | | #else |
| | | /* if not compiling for iPhone */ |
| | | #undef __MACOSX__ |
| | | #define __MACOSX__ 1 |
| | | #endif /* TARGET_OS_IPHONE */ |
| | | #endif /* defined(__APPLE__) */ |
| | | |
| | | #if defined(__NetBSD__) |
| | | #undef __NETBSD__ |
| | | #define __NETBSD__ 1 |
| | | #endif |
| | | #if defined(__OpenBSD__) |
| | | #undef __OPENBSD__ |
| | | #define __OPENBSD__ 1 |
| | | #endif |
| | | #if defined(__OS2__) |
| | | #undef __OS2__ |
| | | #define __OS2__ 1 |
| | | #endif |
| | | #if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) |
| | | #undef __OSF__ |
| | | #define __OSF__ 1 |
| | | #endif |
| | | #if defined(__QNXNTO__) |
| | | #undef __QNXNTO__ |
| | | #define __QNXNTO__ 1 |
| | | #endif |
| | | #if defined(riscos) || defined(__riscos) || defined(__riscos__) |
| | | #undef __RISCOS__ |
| | | #define __RISCOS__ 1 |
| | | #endif |
| | | #if defined(__SVR4) |
| | | #undef __SOLARIS__ |
| | | #define __SOLARIS__ 1 |
| | | #endif |
| | | #if defined(WIN32) || defined(_WIN32) |
| | | #undef __WIN32__ |
| | | #define __WIN32__ 1 |
| | | #endif |
| | | #if defined(__PSP__) |
| | | #undef __PSP__ |
| | | #define __PSP__ 1 |
| | | #endif |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Gets the name of the platform. |
| | | */ |
| | | extern DECLSPEC const char * SDLCALL SDL_GetPlatform (void); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_platform_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | #ifndef _SDL_power_h |
| | | #define _SDL_power_h |
| | | |
| | | /** |
| | | * \file SDL_power.h |
| | | * |
| | | * Header for the SDL power management routines. |
| | | */ |
| | | |
| | | #include "SDL_stdinc.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief The basic state for the system's power supply. |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_POWERSTATE_UNKNOWN, /**< cannot determine power status */ |
| | | SDL_POWERSTATE_ON_BATTERY, /**< Not plugged in, running on the battery */ |
| | | SDL_POWERSTATE_NO_BATTERY, /**< Plugged in, no battery available */ |
| | | SDL_POWERSTATE_CHARGING, /**< Plugged in, charging battery */ |
| | | SDL_POWERSTATE_CHARGED /**< Plugged in, battery charged */ |
| | | } SDL_PowerState; |
| | | |
| | | |
| | | /** |
| | | * \brief Get the current power supply details. |
| | | * |
| | | * \param secs Seconds of battery life left. You can pass a NULL here if |
| | | * you don't care. Will return -1 if we can't determine a |
| | | * value, or we're not running on a battery. |
| | | * |
| | | * \param pct Percentage of battery life left, between 0 and 100. You can |
| | | * pass a NULL here if you don't care. Will return -1 if we |
| | | * can't determine a value, or we're not running on a battery. |
| | | * |
| | | * \return The state of the battery (if any). |
| | | */ |
| | | extern DECLSPEC SDL_PowerState SDLCALL SDL_GetPowerInfo(int *secs, int *pct); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_power_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_quit.h |
| | | * |
| | | * Include file for SDL quit event handling. |
| | | */ |
| | | |
| | | #ifndef _SDL_quit_h |
| | | #define _SDL_quit_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | |
| | | /** |
| | | * \file SDL_quit.h |
| | | * |
| | | * An ::SDL_QUIT event is generated when the user tries to close the application |
| | | * window. If it is ignored or filtered out, the window will remain open. |
| | | * If it is not ignored or filtered, it is queued normally and the window |
| | | * is allowed to close. When the window is closed, screen updates will |
| | | * complete, but have no effect. |
| | | * |
| | | * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) |
| | | * and SIGTERM (system termination request), if handlers do not already |
| | | * exist, that generate ::SDL_QUIT events as well. There is no way |
| | | * to determine the cause of an ::SDL_QUIT event, but setting a signal |
| | | * handler in your application will override the default generation of |
| | | * quit events for that signal. |
| | | * |
| | | * \sa SDL_Quit() |
| | | */ |
| | | |
| | | /* There are no functions directly affecting the quit event */ |
| | | |
| | | #define SDL_QuitRequested() \ |
| | | (SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT) > 0)) |
| | | |
| | | #endif /* _SDL_quit_h */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_rect.h |
| | | * |
| | | * Header file for SDL_rect definition and management functions. |
| | | */ |
| | | |
| | | #ifndef _SDL_rect_h |
| | | #define _SDL_rect_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | #include "SDL_pixels.h" |
| | | #include "SDL_rwops.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief The structure that defines a point |
| | | * |
| | | * \sa SDL_EnclosePoints |
| | | */ |
| | | typedef struct |
| | | { |
| | | int x; |
| | | int y; |
| | | } SDL_Point; |
| | | |
| | | /** |
| | | * \brief A rectangle, with the origin at the upper left. |
| | | * |
| | | * \sa SDL_RectEmpty |
| | | * \sa SDL_RectEquals |
| | | * \sa SDL_HasIntersection |
| | | * \sa SDL_IntersectRect |
| | | * \sa SDL_UnionRect |
| | | * \sa SDL_EnclosePoints |
| | | */ |
| | | typedef struct SDL_Rect |
| | | { |
| | | int x, y; |
| | | int w, h; |
| | | } SDL_Rect; |
| | | |
| | | /** |
| | | * \brief Returns true if the rectangle has no area. |
| | | */ |
| | | SDL_FORCE_INLINE SDL_bool SDL_RectEmpty(const SDL_Rect *r) |
| | | { |
| | | return ((!r) || (r->w <= 0) || (r->h <= 0)) ? SDL_TRUE : SDL_FALSE; |
| | | } |
| | | |
| | | /** |
| | | * \brief Returns true if the two rectangles are equal. |
| | | */ |
| | | SDL_FORCE_INLINE SDL_bool SDL_RectEquals(const SDL_Rect *a, const SDL_Rect *b) |
| | | { |
| | | return (a && b && (a->x == b->x) && (a->y == b->y) && |
| | | (a->w == b->w) && (a->h == b->h)) ? SDL_TRUE : SDL_FALSE; |
| | | } |
| | | |
| | | /** |
| | | * \brief Determine whether two rectangles intersect. |
| | | * |
| | | * \return SDL_TRUE if there is an intersection, SDL_FALSE otherwise. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersection(const SDL_Rect * A, |
| | | const SDL_Rect * B); |
| | | |
| | | /** |
| | | * \brief Calculate the intersection of two rectangles. |
| | | * |
| | | * \return SDL_TRUE if there is an intersection, SDL_FALSE otherwise. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRect(const SDL_Rect * A, |
| | | const SDL_Rect * B, |
| | | SDL_Rect * result); |
| | | |
| | | /** |
| | | * \brief Calculate the union of two rectangles. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_UnionRect(const SDL_Rect * A, |
| | | const SDL_Rect * B, |
| | | SDL_Rect * result); |
| | | |
| | | /** |
| | | * \brief Calculate a minimal rectangle enclosing a set of points |
| | | * |
| | | * \return SDL_TRUE if any points were within the clipping rect |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_EnclosePoints(const SDL_Point * points, |
| | | int count, |
| | | const SDL_Rect * clip, |
| | | SDL_Rect * result); |
| | | |
| | | /** |
| | | * \brief Calculate the intersection of a rectangle and line segment. |
| | | * |
| | | * \return SDL_TRUE if there is an intersection, SDL_FALSE otherwise. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRectAndLine(const SDL_Rect * |
| | | rect, int *X1, |
| | | int *Y1, int *X2, |
| | | int *Y2); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_rect_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_render.h |
| | | * |
| | | * Header file for SDL 2D rendering functions. |
| | | * |
| | | * This API supports the following features: |
| | | * * single pixel points |
| | | * * single pixel lines |
| | | * * filled rectangles |
| | | * * texture images |
| | | * |
| | | * The primitives may be drawn in opaque, blended, or additive modes. |
| | | * |
| | | * The texture images may be drawn in opaque, blended, or additive modes. |
| | | * They can have an additional color tint or alpha modulation applied to |
| | | * them, and may also be stretched with linear interpolation. |
| | | * |
| | | * This API is designed to accelerate simple 2D operations. You may |
| | | * want more functionality such as rotation and particle effects and |
| | | * in that case you should use SDL's OpenGL/Direct3D support or one |
| | | * of the many good 3D engines. |
| | | */ |
| | | |
| | | #ifndef _SDL_render_h |
| | | #define _SDL_render_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_rect.h" |
| | | #include "SDL_video.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Flags used when creating a rendering context |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_RENDERER_SOFTWARE = 0x00000001, /**< The renderer is a software fallback */ |
| | | SDL_RENDERER_ACCELERATED = 0x00000002, /**< The renderer uses hardware |
| | | acceleration */ |
| | | SDL_RENDERER_PRESENTVSYNC = 0x00000004, /**< Present is synchronized |
| | | with the refresh rate */ |
| | | SDL_RENDERER_TARGETTEXTURE = 0x00000008 /**< The renderer supports |
| | | rendering to texture */ |
| | | } SDL_RendererFlags; |
| | | |
| | | /** |
| | | * \brief Information on the capabilities of a render driver or context. |
| | | */ |
| | | typedef struct SDL_RendererInfo |
| | | { |
| | | const char *name; /**< The name of the renderer */ |
| | | Uint32 flags; /**< Supported ::SDL_RendererFlags */ |
| | | Uint32 num_texture_formats; /**< The number of available texture formats */ |
| | | Uint32 texture_formats[16]; /**< The available texture formats */ |
| | | int max_texture_width; /**< The maximimum texture width */ |
| | | int max_texture_height; /**< The maximimum texture height */ |
| | | } SDL_RendererInfo; |
| | | |
| | | /** |
| | | * \brief The access pattern allowed for a texture. |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */ |
| | | SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */ |
| | | SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */ |
| | | } SDL_TextureAccess; |
| | | |
| | | /** |
| | | * \brief The texture channel modulation used in SDL_RenderCopy(). |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_TEXTUREMODULATE_NONE = 0x00000000, /**< No modulation */ |
| | | SDL_TEXTUREMODULATE_COLOR = 0x00000001, /**< srcC = srcC * color */ |
| | | SDL_TEXTUREMODULATE_ALPHA = 0x00000002 /**< srcA = srcA * alpha */ |
| | | } SDL_TextureModulate; |
| | | |
| | | /** |
| | | * \brief Flip constants for SDL_RenderCopyEx |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_FLIP_NONE = 0x00000000, /**< Do not flip */ |
| | | SDL_FLIP_HORIZONTAL = 0x00000001, /**< flip horizontally */ |
| | | SDL_FLIP_VERTICAL = 0x00000002 /**< flip vertically */ |
| | | } SDL_RendererFlip; |
| | | |
| | | /** |
| | | * \brief A structure representing rendering state |
| | | */ |
| | | struct SDL_Renderer; |
| | | typedef struct SDL_Renderer SDL_Renderer; |
| | | |
| | | /** |
| | | * \brief An efficient driver-specific representation of pixel data |
| | | */ |
| | | struct SDL_Texture; |
| | | typedef struct SDL_Texture SDL_Texture; |
| | | |
| | | |
| | | /* Function prototypes */ |
| | | |
| | | /** |
| | | * \brief Get the number of 2D rendering drivers available for the current |
| | | * display. |
| | | * |
| | | * A render driver is a set of code that handles rendering and texture |
| | | * management on a particular display. Normally there is only one, but |
| | | * some drivers may have several available with different capabilities. |
| | | * |
| | | * \sa SDL_GetRenderDriverInfo() |
| | | * \sa SDL_CreateRenderer() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void); |
| | | |
| | | /** |
| | | * \brief Get information about a specific 2D rendering driver for the current |
| | | * display. |
| | | * |
| | | * \param index The index of the driver to query information about. |
| | | * \param info A pointer to an SDL_RendererInfo struct to be filled with |
| | | * information on the rendering driver. |
| | | * |
| | | * \return 0 on success, -1 if the index was out of range. |
| | | * |
| | | * \sa SDL_CreateRenderer() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetRenderDriverInfo(int index, |
| | | SDL_RendererInfo * info); |
| | | |
| | | /** |
| | | * \brief Create a window and default renderer |
| | | * |
| | | * \param width The width of the window |
| | | * \param height The height of the window |
| | | * \param window_flags The flags used to create the window |
| | | * \param window A pointer filled with the window, or NULL on error |
| | | * \param renderer A pointer filled with the renderer, or NULL on error |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer( |
| | | int width, int height, Uint32 window_flags, |
| | | SDL_Window **window, SDL_Renderer **renderer); |
| | | |
| | | |
| | | /** |
| | | * \brief Create a 2D rendering context for a window. |
| | | * |
| | | * \param window The window where rendering is displayed. |
| | | * \param index The index of the rendering driver to initialize, or -1 to |
| | | * initialize the first one supporting the requested flags. |
| | | * \param flags ::SDL_RendererFlags. |
| | | * |
| | | * \return A valid rendering context or NULL if there was an error. |
| | | * |
| | | * \sa SDL_CreateSoftwareRenderer() |
| | | * \sa SDL_GetRendererInfo() |
| | | * \sa SDL_DestroyRenderer() |
| | | */ |
| | | extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window, |
| | | int index, Uint32 flags); |
| | | |
| | | /** |
| | | * \brief Create a 2D software rendering context for a surface. |
| | | * |
| | | * \param surface The surface where rendering is done. |
| | | * |
| | | * \return A valid rendering context or NULL if there was an error. |
| | | * |
| | | * \sa SDL_CreateRenderer() |
| | | * \sa SDL_DestroyRenderer() |
| | | */ |
| | | extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface); |
| | | |
| | | /** |
| | | * \brief Get the renderer associated with a window. |
| | | */ |
| | | extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Get information about a rendering context. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer * renderer, |
| | | SDL_RendererInfo * info); |
| | | |
| | | /** |
| | | * \brief Get the output size of a rendering context. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, |
| | | int *w, int *h); |
| | | |
| | | /** |
| | | * \brief Create a texture for a rendering context. |
| | | * |
| | | * \param renderer The renderer. |
| | | * \param format The format of the texture. |
| | | * \param access One of the enumerated values in ::SDL_TextureAccess. |
| | | * \param w The width of the texture in pixels. |
| | | * \param h The height of the texture in pixels. |
| | | * |
| | | * \return The created texture is returned, or 0 if no rendering context was |
| | | * active, the format was unsupported, or the width or height were out |
| | | * of range. |
| | | * |
| | | * \sa SDL_QueryTexture() |
| | | * \sa SDL_UpdateTexture() |
| | | * \sa SDL_DestroyTexture() |
| | | */ |
| | | extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, |
| | | Uint32 format, |
| | | int access, int w, |
| | | int h); |
| | | |
| | | /** |
| | | * \brief Create a texture from an existing surface. |
| | | * |
| | | * \param renderer The renderer. |
| | | * \param surface The surface containing pixel data used to fill the texture. |
| | | * |
| | | * \return The created texture is returned, or 0 on error. |
| | | * |
| | | * \note The surface is not modified or freed by this function. |
| | | * |
| | | * \sa SDL_QueryTexture() |
| | | * \sa SDL_DestroyTexture() |
| | | */ |
| | | extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface); |
| | | |
| | | /** |
| | | * \brief Query the attributes of a texture |
| | | * |
| | | * \param texture A texture to be queried. |
| | | * \param format A pointer filled in with the raw format of the texture. The |
| | | * actual format may differ, but pixel transfers will use this |
| | | * format. |
| | | * \param access A pointer filled in with the actual access to the texture. |
| | | * \param w A pointer filled in with the width of the texture in pixels. |
| | | * \param h A pointer filled in with the height of the texture in pixels. |
| | | * |
| | | * \return 0 on success, or -1 if the texture is not valid. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_QueryTexture(SDL_Texture * texture, |
| | | Uint32 * format, int *access, |
| | | int *w, int *h); |
| | | |
| | | /** |
| | | * \brief Set an additional color value used in render copy operations. |
| | | * |
| | | * \param texture The texture to update. |
| | | * \param r The red color value multiplied into copy operations. |
| | | * \param g The green color value multiplied into copy operations. |
| | | * \param b The blue color value multiplied into copy operations. |
| | | * |
| | | * \return 0 on success, or -1 if the texture is not valid or color modulation |
| | | * is not supported. |
| | | * |
| | | * \sa SDL_GetTextureColorMod() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetTextureColorMod(SDL_Texture * texture, |
| | | Uint8 r, Uint8 g, Uint8 b); |
| | | |
| | | |
| | | /** |
| | | * \brief Get the additional color value used in render copy operations. |
| | | * |
| | | * \param texture The texture to query. |
| | | * \param r A pointer filled in with the current red color value. |
| | | * \param g A pointer filled in with the current green color value. |
| | | * \param b A pointer filled in with the current blue color value. |
| | | * |
| | | * \return 0 on success, or -1 if the texture is not valid. |
| | | * |
| | | * \sa SDL_SetTextureColorMod() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetTextureColorMod(SDL_Texture * texture, |
| | | Uint8 * r, Uint8 * g, |
| | | Uint8 * b); |
| | | |
| | | /** |
| | | * \brief Set an additional alpha value used in render copy operations. |
| | | * |
| | | * \param texture The texture to update. |
| | | * \param alpha The alpha value multiplied into copy operations. |
| | | * |
| | | * \return 0 on success, or -1 if the texture is not valid or alpha modulation |
| | | * is not supported. |
| | | * |
| | | * \sa SDL_GetTextureAlphaMod() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetTextureAlphaMod(SDL_Texture * texture, |
| | | Uint8 alpha); |
| | | |
| | | /** |
| | | * \brief Get the additional alpha value used in render copy operations. |
| | | * |
| | | * \param texture The texture to query. |
| | | * \param alpha A pointer filled in with the current alpha value. |
| | | * |
| | | * \return 0 on success, or -1 if the texture is not valid. |
| | | * |
| | | * \sa SDL_SetTextureAlphaMod() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetTextureAlphaMod(SDL_Texture * texture, |
| | | Uint8 * alpha); |
| | | |
| | | /** |
| | | * \brief Set the blend mode used for texture copy operations. |
| | | * |
| | | * \param texture The texture to update. |
| | | * \param blendMode ::SDL_BlendMode to use for texture blending. |
| | | * |
| | | * \return 0 on success, or -1 if the texture is not valid or the blend mode is |
| | | * not supported. |
| | | * |
| | | * \note If the blend mode is not supported, the closest supported mode is |
| | | * chosen. |
| | | * |
| | | * \sa SDL_GetTextureBlendMode() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_Texture * texture, |
| | | SDL_BlendMode blendMode); |
| | | |
| | | /** |
| | | * \brief Get the blend mode used for texture copy operations. |
| | | * |
| | | * \param texture The texture to query. |
| | | * \param blendMode A pointer filled in with the current blend mode. |
| | | * |
| | | * \return 0 on success, or -1 if the texture is not valid. |
| | | * |
| | | * \sa SDL_SetTextureBlendMode() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture * texture, |
| | | SDL_BlendMode *blendMode); |
| | | |
| | | /** |
| | | * \brief Update the given texture rectangle with new pixel data. |
| | | * |
| | | * \param texture The texture to update |
| | | * \param rect A pointer to the rectangle of pixels to update, or NULL to |
| | | * update the entire texture. |
| | | * \param pixels The raw pixel data. |
| | | * \param pitch The number of bytes between rows of pixel data. |
| | | * |
| | | * \return 0 on success, or -1 if the texture is not valid. |
| | | * |
| | | * \note This is a fairly slow function. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_UpdateTexture(SDL_Texture * texture, |
| | | const SDL_Rect * rect, |
| | | const void *pixels, int pitch); |
| | | |
| | | /** |
| | | * \brief Lock a portion of the texture for write-only pixel access. |
| | | * |
| | | * \param texture The texture to lock for access, which was created with |
| | | * ::SDL_TEXTUREACCESS_STREAMING. |
| | | * \param rect A pointer to the rectangle to lock for access. If the rect |
| | | * is NULL, the entire texture will be locked. |
| | | * \param pixels This is filled in with a pointer to the locked pixels, |
| | | * appropriately offset by the locked area. |
| | | * \param pitch This is filled in with the pitch of the locked pixels. |
| | | * |
| | | * \return 0 on success, or -1 if the texture is not valid or was not created with ::SDL_TEXTUREACCESS_STREAMING. |
| | | * |
| | | * \sa SDL_UnlockTexture() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_LockTexture(SDL_Texture * texture, |
| | | const SDL_Rect * rect, |
| | | void **pixels, int *pitch); |
| | | |
| | | /** |
| | | * \brief Unlock a texture, uploading the changes to video memory, if needed. |
| | | * |
| | | * \sa SDL_LockTexture() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture * texture); |
| | | |
| | | /** |
| | | * \brief Determines whether a window supports the use of render targets |
| | | * |
| | | * \param renderer The renderer that will be checked |
| | | * |
| | | * \return SDL_TRUE if supported, SDL_FALSE if not. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_RenderTargetSupported(SDL_Renderer *renderer); |
| | | |
| | | /** |
| | | * \brief Set a texture as the current rendering target. |
| | | * |
| | | * \param renderer The renderer. |
| | | * \param texture The targeted texture, which must be created with the SDL_TEXTUREACCESS_TARGET flag, or NULL for the default render target |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | * |
| | | * \sa SDL_GetRenderTarget() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetRenderTarget(SDL_Renderer *renderer, |
| | | SDL_Texture *texture); |
| | | |
| | | /** |
| | | * \brief Get the current render target or NULL for the default render target. |
| | | * |
| | | * \return The current render target |
| | | * |
| | | * \sa SDL_SetRenderTarget() |
| | | */ |
| | | extern DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *renderer); |
| | | |
| | | /** |
| | | * \brief Set device independent resolution for rendering |
| | | * |
| | | * \param renderer The renderer for which resolution should be set. |
| | | * \param w The width of the logical resolution |
| | | * \param h The height of the logical resolution |
| | | * |
| | | * This function uses the viewport and scaling functionality to allow a fixed logical |
| | | * resolution for rendering, regardless of the actual output resolution. If the actual |
| | | * output resolution doesn't have the same aspect ratio the output rendering will be |
| | | * centered within the output display. |
| | | * |
| | | * If the output display is a window, mouse events in the window will be filtered |
| | | * and scaled so they seem to arrive within the logical resolution. |
| | | * |
| | | * \note If this function results in scaling or subpixel drawing by the |
| | | * rendering backend, it will be handled using the appropriate |
| | | * quality hints. |
| | | * |
| | | * \sa SDL_RenderGetLogicalSize() |
| | | * \sa SDL_RenderSetScale() |
| | | * \sa SDL_RenderSetViewport() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderSetLogicalSize(SDL_Renderer * renderer, int w, int h); |
| | | |
| | | /** |
| | | * \brief Get device independent resolution for rendering |
| | | * |
| | | * \param renderer The renderer from which resolution should be queried. |
| | | * \param w A pointer filled with the width of the logical resolution |
| | | * \param h A pointer filled with the height of the logical resolution |
| | | * |
| | | * \sa SDL_RenderSetLogicalSize() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h); |
| | | |
| | | /** |
| | | * \brief Set the drawing area for rendering on the current target. |
| | | * |
| | | * \param renderer The renderer for which the drawing area should be set. |
| | | * \param rect The rectangle representing the drawing area, or NULL to set the viewport to the entire target. |
| | | * |
| | | * The x,y of the viewport rect represents the origin for rendering. |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | * |
| | | * \note If the window associated with the renderer is resized, the viewport is automatically reset. |
| | | * |
| | | * \sa SDL_RenderGetViewport() |
| | | * \sa SDL_RenderSetLogicalSize() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderSetViewport(SDL_Renderer * renderer, |
| | | const SDL_Rect * rect); |
| | | |
| | | /** |
| | | * \brief Get the drawing area for the current target. |
| | | * |
| | | * \sa SDL_RenderSetViewport() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_RenderGetViewport(SDL_Renderer * renderer, |
| | | SDL_Rect * rect); |
| | | |
| | | /** |
| | | * \brief Set the clip rectangle for the current target. |
| | | * |
| | | * \param renderer The renderer for which clip rectangle should be set. |
| | | * \param rect A pointer to the rectangle to set as the clip rectangle, or |
| | | * NULL to disable clipping. |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | * |
| | | * \sa SDL_RenderGetClipRect() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderSetClipRect(SDL_Renderer * renderer, |
| | | const SDL_Rect * rect); |
| | | |
| | | /** |
| | | * \brief Get the clip rectangle for the current target. |
| | | * |
| | | * \param renderer The renderer from which clip rectangle should be queried. |
| | | * \param rect A pointer filled in with the current clip rectangle, or |
| | | * an empty rectangle if clipping is disabled. |
| | | * |
| | | * \sa SDL_RenderSetClipRect() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_RenderGetClipRect(SDL_Renderer * renderer, |
| | | SDL_Rect * rect); |
| | | |
| | | /** |
| | | * \brief Set the drawing scale for rendering on the current target. |
| | | * |
| | | * \param renderer The renderer for which the drawing scale should be set. |
| | | * \param scaleX The horizontal scaling factor |
| | | * \param scaleY The vertical scaling factor |
| | | * |
| | | * The drawing coordinates are scaled by the x/y scaling factors |
| | | * before they are used by the renderer. This allows resolution |
| | | * independent drawing with a single coordinate system. |
| | | * |
| | | * \note If this results in scaling or subpixel drawing by the |
| | | * rendering backend, it will be handled using the appropriate |
| | | * quality hints. For best results use integer scaling factors. |
| | | * |
| | | * \sa SDL_RenderGetScale() |
| | | * \sa SDL_RenderSetLogicalSize() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderSetScale(SDL_Renderer * renderer, |
| | | float scaleX, float scaleY); |
| | | |
| | | /** |
| | | * \brief Get the drawing scale for the current target. |
| | | * |
| | | * \param renderer The renderer from which drawing scale should be queried. |
| | | * \param scaleX A pointer filled in with the horizontal scaling factor |
| | | * \param scaleY A pointer filled in with the vertical scaling factor |
| | | * |
| | | * \sa SDL_RenderSetScale() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_RenderGetScale(SDL_Renderer * renderer, |
| | | float *scaleX, float *scaleY); |
| | | |
| | | /** |
| | | * \brief Set the color used for drawing operations (Rect, Line and Clear). |
| | | * |
| | | * \param renderer The renderer for which drawing color should be set. |
| | | * \param r The red value used to draw on the rendering target. |
| | | * \param g The green value used to draw on the rendering target. |
| | | * \param b The blue value used to draw on the rendering target. |
| | | * \param a The alpha value used to draw on the rendering target, usually |
| | | * ::SDL_ALPHA_OPAQUE (255). |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDL_SetRenderDrawColor(SDL_Renderer * renderer, |
| | | Uint8 r, Uint8 g, Uint8 b, |
| | | Uint8 a); |
| | | |
| | | /** |
| | | * \brief Get the color used for drawing operations (Rect, Line and Clear). |
| | | * |
| | | * \param renderer The renderer from which drawing color should be queried. |
| | | * \param r A pointer to the red value used to draw on the rendering target. |
| | | * \param g A pointer to the green value used to draw on the rendering target. |
| | | * \param b A pointer to the blue value used to draw on the rendering target. |
| | | * \param a A pointer to the alpha value used to draw on the rendering target, |
| | | * usually ::SDL_ALPHA_OPAQUE (255). |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDL_GetRenderDrawColor(SDL_Renderer * renderer, |
| | | Uint8 * r, Uint8 * g, Uint8 * b, |
| | | Uint8 * a); |
| | | |
| | | /** |
| | | * \brief Set the blend mode used for drawing operations (Fill and Line). |
| | | * |
| | | * \param renderer The renderer for which blend mode should be set. |
| | | * \param blendMode ::SDL_BlendMode to use for blending. |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | * |
| | | * \note If the blend mode is not supported, the closest supported mode is |
| | | * chosen. |
| | | * |
| | | * \sa SDL_GetRenderDrawBlendMode() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer * renderer, |
| | | SDL_BlendMode blendMode); |
| | | |
| | | /** |
| | | * \brief Get the blend mode used for drawing operations. |
| | | * |
| | | * \param renderer The renderer from which blend mode should be queried. |
| | | * \param blendMode A pointer filled in with the current blend mode. |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | * |
| | | * \sa SDL_SetRenderDrawBlendMode() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer * renderer, |
| | | SDL_BlendMode *blendMode); |
| | | |
| | | /** |
| | | * \brief Clear the current rendering target with the drawing color |
| | | * |
| | | * This function clears the entire rendering target, ignoring the viewport. |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderClear(SDL_Renderer * renderer); |
| | | |
| | | /** |
| | | * \brief Draw a point on the current rendering target. |
| | | * |
| | | * \param renderer The renderer which should draw a point. |
| | | * \param x The x coordinate of the point. |
| | | * \param y The y coordinate of the point. |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderDrawPoint(SDL_Renderer * renderer, |
| | | int x, int y); |
| | | |
| | | /** |
| | | * \brief Draw multiple points on the current rendering target. |
| | | * |
| | | * \param renderer The renderer which should draw multiple points. |
| | | * \param points The points to draw |
| | | * \param count The number of points to draw |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderDrawPoints(SDL_Renderer * renderer, |
| | | const SDL_Point * points, |
| | | int count); |
| | | |
| | | /** |
| | | * \brief Draw a line on the current rendering target. |
| | | * |
| | | * \param renderer The renderer which should draw a line. |
| | | * \param x1 The x coordinate of the start point. |
| | | * \param y1 The y coordinate of the start point. |
| | | * \param x2 The x coordinate of the end point. |
| | | * \param y2 The y coordinate of the end point. |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderDrawLine(SDL_Renderer * renderer, |
| | | int x1, int y1, int x2, int y2); |
| | | |
| | | /** |
| | | * \brief Draw a series of connected lines on the current rendering target. |
| | | * |
| | | * \param renderer The renderer which should draw multiple lines. |
| | | * \param points The points along the lines |
| | | * \param count The number of points, drawing count-1 lines |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderDrawLines(SDL_Renderer * renderer, |
| | | const SDL_Point * points, |
| | | int count); |
| | | |
| | | /** |
| | | * \brief Draw a rectangle on the current rendering target. |
| | | * |
| | | * \param renderer The renderer which should draw a rectangle. |
| | | * \param rect A pointer to the destination rectangle, or NULL to outline the entire rendering target. |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderDrawRect(SDL_Renderer * renderer, |
| | | const SDL_Rect * rect); |
| | | |
| | | /** |
| | | * \brief Draw some number of rectangles on the current rendering target. |
| | | * |
| | | * \param renderer The renderer which should draw multiple rectangles. |
| | | * \param rects A pointer to an array of destination rectangles. |
| | | * \param count The number of rectangles. |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderDrawRects(SDL_Renderer * renderer, |
| | | const SDL_Rect * rects, |
| | | int count); |
| | | |
| | | /** |
| | | * \brief Fill a rectangle on the current rendering target with the drawing color. |
| | | * |
| | | * \param renderer The renderer which should fill a rectangle. |
| | | * \param rect A pointer to the destination rectangle, or NULL for the entire |
| | | * rendering target. |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderFillRect(SDL_Renderer * renderer, |
| | | const SDL_Rect * rect); |
| | | |
| | | /** |
| | | * \brief Fill some number of rectangles on the current rendering target with the drawing color. |
| | | * |
| | | * \param renderer The renderer which should fill multiple rectangles. |
| | | * \param rects A pointer to an array of destination rectangles. |
| | | * \param count The number of rectangles. |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderFillRects(SDL_Renderer * renderer, |
| | | const SDL_Rect * rects, |
| | | int count); |
| | | |
| | | /** |
| | | * \brief Copy a portion of the texture to the current rendering target. |
| | | * |
| | | * \param renderer The renderer which should copy parts of a texture. |
| | | * \param texture The source texture. |
| | | * \param srcrect A pointer to the source rectangle, or NULL for the entire |
| | | * texture. |
| | | * \param dstrect A pointer to the destination rectangle, or NULL for the |
| | | * entire rendering target. |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, |
| | | SDL_Texture * texture, |
| | | const SDL_Rect * srcrect, |
| | | const SDL_Rect * dstrect); |
| | | |
| | | /** |
| | | * \brief Copy a portion of the source texture to the current rendering target, rotating it by angle around the given center |
| | | * |
| | | * \param renderer The renderer which should copy parts of a texture. |
| | | * \param texture The source texture. |
| | | * \param srcrect A pointer to the source rectangle, or NULL for the entire |
| | | * texture. |
| | | * \param dstrect A pointer to the destination rectangle, or NULL for the |
| | | * entire rendering target. |
| | | * \param angle An angle in degrees that indicates the rotation that will be applied to dstrect |
| | | * \param center A pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done aroud dstrect.w/2, dstrect.h/2) |
| | | * \param flip An SDL_RendererFlip value stating which flipping actions should be performed on the texture |
| | | * |
| | | * \return 0 on success, or -1 on error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderCopyEx(SDL_Renderer * renderer, |
| | | SDL_Texture * texture, |
| | | const SDL_Rect * srcrect, |
| | | const SDL_Rect * dstrect, |
| | | const double angle, |
| | | const SDL_Point *center, |
| | | const SDL_RendererFlip flip); |
| | | |
| | | /** |
| | | * \brief Read pixels from the current rendering target. |
| | | * |
| | | * \param renderer The renderer from which pixels should be read. |
| | | * \param rect A pointer to the rectangle to read, or NULL for the entire |
| | | * render target. |
| | | * \param format The desired format of the pixel data, or 0 to use the format |
| | | * of the rendering target |
| | | * \param pixels A pointer to be filled in with the pixel data |
| | | * \param pitch The pitch of the pixels parameter. |
| | | * |
| | | * \return 0 on success, or -1 if pixel reading is not supported. |
| | | * |
| | | * \warning This is a very slow operation, and should not be used frequently. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_RenderReadPixels(SDL_Renderer * renderer, |
| | | const SDL_Rect * rect, |
| | | Uint32 format, |
| | | void *pixels, int pitch); |
| | | |
| | | /** |
| | | * \brief Update the screen with rendering performed. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer); |
| | | |
| | | /** |
| | | * \brief Destroy the specified texture. |
| | | * |
| | | * \sa SDL_CreateTexture() |
| | | * \sa SDL_CreateTextureFromSurface() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_Texture * texture); |
| | | |
| | | /** |
| | | * \brief Destroy the rendering context for a window and free associated |
| | | * textures. |
| | | * |
| | | * \sa SDL_CreateRenderer() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_Renderer * renderer); |
| | | |
| | | |
| | | /** |
| | | * \brief Bind the texture to the current OpenGL/ES/ES2 context for use with |
| | | * OpenGL instructions. |
| | | * |
| | | * \param texture The SDL texture to bind |
| | | * \param texw A pointer to a float that will be filled with the texture width |
| | | * \param texh A pointer to a float that will be filled with the texture height |
| | | * |
| | | * \return 0 on success, or -1 if the operation is not supported |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh); |
| | | |
| | | /** |
| | | * \brief Unbind a texture from the current OpenGL/ES/ES2 context. |
| | | * |
| | | * \param texture The SDL texture to unbind |
| | | * |
| | | * \return 0 on success, or -1 if the operation is not supported |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GL_UnbindTexture(SDL_Texture *texture); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_render_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | #define SDL_REVISION "hg-7246:be3beed886ea" |
| | | #define SDL_REVISION_NUMBER 7246 |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_rwops.h |
| | | * |
| | | * This file provides a general interface for SDL to read and write |
| | | * data streams. It can easily be extended to files, memory, etc. |
| | | */ |
| | | |
| | | #ifndef _SDL_rwops_h |
| | | #define _SDL_rwops_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* RWops Types */ |
| | | #define SDL_RWOPS_UNKNOWN 0 /* Unknown stream type */ |
| | | #define SDL_RWOPS_WINFILE 1 /* Win32 file */ |
| | | #define SDL_RWOPS_STDFILE 2 /* Stdio file */ |
| | | #define SDL_RWOPS_JNIFILE 3 /* Android asset */ |
| | | #define SDL_RWOPS_MEMORY 4 /* Memory stream */ |
| | | #define SDL_RWOPS_MEMORY_RO 5 /* Read-Only memory stream */ |
| | | |
| | | /** |
| | | * This is the read/write operation structure -- very basic. |
| | | */ |
| | | typedef struct SDL_RWops |
| | | { |
| | | /** |
| | | * Return the size of the file in this rwops, or -1 if unknown |
| | | */ |
| | | Sint64 (SDLCALL * size) (struct SDL_RWops * context); |
| | | |
| | | /** |
| | | * Seek to \c offset relative to \c whence, one of stdio's whence values: |
| | | * RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END |
| | | * |
| | | * \return the final offset in the data stream, or -1 on error. |
| | | */ |
| | | Sint64 (SDLCALL * seek) (struct SDL_RWops * context, Sint64 offset, |
| | | int whence); |
| | | |
| | | /** |
| | | * Read up to \c maxnum objects each of size \c size from the data |
| | | * stream to the area pointed at by \c ptr. |
| | | * |
| | | * \return the number of objects read, or 0 at error or end of file. |
| | | */ |
| | | size_t (SDLCALL * read) (struct SDL_RWops * context, void *ptr, |
| | | size_t size, size_t maxnum); |
| | | |
| | | /** |
| | | * Write exactly \c num objects each of size \c size from the area |
| | | * pointed at by \c ptr to data stream. |
| | | * |
| | | * \return the number of objects written, or 0 at error or end of file. |
| | | */ |
| | | size_t (SDLCALL * write) (struct SDL_RWops * context, const void *ptr, |
| | | size_t size, size_t num); |
| | | |
| | | /** |
| | | * Close and free an allocated SDL_RWops structure. |
| | | * |
| | | * \return 0 if successful or -1 on write error when flushing data. |
| | | */ |
| | | int (SDLCALL * close) (struct SDL_RWops * context); |
| | | |
| | | Uint32 type; |
| | | union |
| | | { |
| | | #if defined(ANDROID) |
| | | struct |
| | | { |
| | | void *fileNameRef; |
| | | void *inputStreamRef; |
| | | void *readableByteChannelRef; |
| | | void *readMethod; |
| | | void *assetFileDescriptorRef; |
| | | long position; |
| | | long size; |
| | | long offset; |
| | | int fd; |
| | | } androidio; |
| | | #elif defined(__WIN32__) |
| | | struct |
| | | { |
| | | SDL_bool append; |
| | | void *h; |
| | | struct |
| | | { |
| | | void *data; |
| | | size_t size; |
| | | size_t left; |
| | | } buffer; |
| | | } windowsio; |
| | | #endif |
| | | |
| | | #ifdef HAVE_STDIO_H |
| | | struct |
| | | { |
| | | SDL_bool autoclose; |
| | | FILE *fp; |
| | | } stdio; |
| | | #endif |
| | | struct |
| | | { |
| | | Uint8 *base; |
| | | Uint8 *here; |
| | | Uint8 *stop; |
| | | } mem; |
| | | struct |
| | | { |
| | | void *data1; |
| | | void *data2; |
| | | } unknown; |
| | | } hidden; |
| | | |
| | | } SDL_RWops; |
| | | |
| | | |
| | | /** |
| | | * \name RWFrom functions |
| | | * |
| | | * Functions to create SDL_RWops structures from various data streams. |
| | | */ |
| | | /*@{*/ |
| | | |
| | | extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file, |
| | | const char *mode); |
| | | |
| | | #ifdef HAVE_STDIO_H |
| | | extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp, |
| | | SDL_bool autoclose); |
| | | #else |
| | | extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(void * fp, |
| | | SDL_bool autoclose); |
| | | #endif |
| | | |
| | | extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size); |
| | | extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem, |
| | | int size); |
| | | |
| | | /*@}*//*RWFrom functions*/ |
| | | |
| | | |
| | | extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); |
| | | extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); |
| | | |
| | | #define RW_SEEK_SET 0 /**< Seek from the beginning of data */ |
| | | #define RW_SEEK_CUR 1 /**< Seek relative to current read point */ |
| | | #define RW_SEEK_END 2 /**< Seek relative to the end of data */ |
| | | |
| | | /** |
| | | * \name Read/write macros |
| | | * |
| | | * Macros to easily read and write from an SDL_RWops structure. |
| | | */ |
| | | /*@{*/ |
| | | #define SDL_RWsize(ctx) (ctx)->size(ctx) |
| | | #define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence) |
| | | #define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR) |
| | | #define SDL_RWread(ctx, ptr, size, n) (ctx)->read(ctx, ptr, size, n) |
| | | #define SDL_RWwrite(ctx, ptr, size, n) (ctx)->write(ctx, ptr, size, n) |
| | | #define SDL_RWclose(ctx) (ctx)->close(ctx) |
| | | /*@}*//*Read/write macros*/ |
| | | |
| | | |
| | | /** |
| | | * \name Read endian functions |
| | | * |
| | | * Read an item of the specified endianness and return in native format. |
| | | */ |
| | | /*@{*/ |
| | | extern DECLSPEC Uint8 SDLCALL SDL_ReadU8(SDL_RWops * src); |
| | | extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src); |
| | | extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src); |
| | | extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src); |
| | | extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src); |
| | | extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src); |
| | | extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src); |
| | | /*@}*//*Read endian functions*/ |
| | | |
| | | /** |
| | | * \name Write endian functions |
| | | * |
| | | * Write an item of native format to the specified endianness. |
| | | */ |
| | | /*@{*/ |
| | | extern DECLSPEC size_t SDLCALL SDL_WriteU8(SDL_RWops * dst, Uint8 value); |
| | | extern DECLSPEC size_t SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value); |
| | | extern DECLSPEC size_t SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value); |
| | | extern DECLSPEC size_t SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value); |
| | | extern DECLSPEC size_t SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value); |
| | | extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); |
| | | extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value); |
| | | /*@}*//*Write endian functions*/ |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_rwops_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_scancode.h |
| | | * |
| | | * Defines keyboard scancodes. |
| | | */ |
| | | |
| | | #ifndef _SDL_scancode_h |
| | | #define _SDL_scancode_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | |
| | | /** |
| | | * \brief The SDL keyboard scancode representation. |
| | | * |
| | | * Values of this type are used to represent keyboard keys, among other places |
| | | * in the \link SDL_Keysym::scancode key.keysym.scancode \endlink field of the |
| | | * SDL_Event structure. |
| | | * |
| | | * The values in this enumeration are based on the USB usage page standard: |
| | | * http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_SCANCODE_UNKNOWN = 0, |
| | | |
| | | /** |
| | | * \name Usage page 0x07 |
| | | * |
| | | * These values are from usage page 0x07 (USB keyboard page). |
| | | */ |
| | | /*@{*/ |
| | | |
| | | SDL_SCANCODE_A = 4, |
| | | SDL_SCANCODE_B = 5, |
| | | SDL_SCANCODE_C = 6, |
| | | SDL_SCANCODE_D = 7, |
| | | SDL_SCANCODE_E = 8, |
| | | SDL_SCANCODE_F = 9, |
| | | SDL_SCANCODE_G = 10, |
| | | SDL_SCANCODE_H = 11, |
| | | SDL_SCANCODE_I = 12, |
| | | SDL_SCANCODE_J = 13, |
| | | SDL_SCANCODE_K = 14, |
| | | SDL_SCANCODE_L = 15, |
| | | SDL_SCANCODE_M = 16, |
| | | SDL_SCANCODE_N = 17, |
| | | SDL_SCANCODE_O = 18, |
| | | SDL_SCANCODE_P = 19, |
| | | SDL_SCANCODE_Q = 20, |
| | | SDL_SCANCODE_R = 21, |
| | | SDL_SCANCODE_S = 22, |
| | | SDL_SCANCODE_T = 23, |
| | | SDL_SCANCODE_U = 24, |
| | | SDL_SCANCODE_V = 25, |
| | | SDL_SCANCODE_W = 26, |
| | | SDL_SCANCODE_X = 27, |
| | | SDL_SCANCODE_Y = 28, |
| | | SDL_SCANCODE_Z = 29, |
| | | |
| | | SDL_SCANCODE_1 = 30, |
| | | SDL_SCANCODE_2 = 31, |
| | | SDL_SCANCODE_3 = 32, |
| | | SDL_SCANCODE_4 = 33, |
| | | SDL_SCANCODE_5 = 34, |
| | | SDL_SCANCODE_6 = 35, |
| | | SDL_SCANCODE_7 = 36, |
| | | SDL_SCANCODE_8 = 37, |
| | | SDL_SCANCODE_9 = 38, |
| | | SDL_SCANCODE_0 = 39, |
| | | |
| | | SDL_SCANCODE_RETURN = 40, |
| | | SDL_SCANCODE_ESCAPE = 41, |
| | | SDL_SCANCODE_BACKSPACE = 42, |
| | | SDL_SCANCODE_TAB = 43, |
| | | SDL_SCANCODE_SPACE = 44, |
| | | |
| | | SDL_SCANCODE_MINUS = 45, |
| | | SDL_SCANCODE_EQUALS = 46, |
| | | SDL_SCANCODE_LEFTBRACKET = 47, |
| | | SDL_SCANCODE_RIGHTBRACKET = 48, |
| | | SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return |
| | | * key on ISO keyboards and at the right end |
| | | * of the QWERTY row on ANSI keyboards. |
| | | * Produces REVERSE SOLIDUS (backslash) and |
| | | * VERTICAL LINE in a US layout, REVERSE |
| | | * SOLIDUS and VERTICAL LINE in a UK Mac |
| | | * layout, NUMBER SIGN and TILDE in a UK |
| | | * Windows layout, DOLLAR SIGN and POUND SIGN |
| | | * in a Swiss German layout, NUMBER SIGN and |
| | | * APOSTROPHE in a German layout, GRAVE |
| | | * ACCENT and POUND SIGN in a French Mac |
| | | * layout, and ASTERISK and MICRO SIGN in a |
| | | * French Windows layout. |
| | | */ |
| | | SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code |
| | | * instead of 49 for the same key, but all |
| | | * OSes I've seen treat the two codes |
| | | * identically. So, as an implementor, unless |
| | | * your keyboard generates both of those |
| | | * codes and your OS treats them differently, |
| | | * you should generate SDL_SCANCODE_BACKSLASH |
| | | * instead of this code. As a user, you |
| | | * should not rely on this code because SDL |
| | | * will never generate it with most (all?) |
| | | * keyboards. |
| | | */ |
| | | SDL_SCANCODE_SEMICOLON = 51, |
| | | SDL_SCANCODE_APOSTROPHE = 52, |
| | | SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI |
| | | * and ISO keyboards). Produces GRAVE ACCENT and |
| | | * TILDE in a US Windows layout and in US and UK |
| | | * Mac layouts on ANSI keyboards, GRAVE ACCENT |
| | | * and NOT SIGN in a UK Windows layout, SECTION |
| | | * SIGN and PLUS-MINUS SIGN in US and UK Mac |
| | | * layouts on ISO keyboards, SECTION SIGN and |
| | | * DEGREE SIGN in a Swiss German layout (Mac: |
| | | * only on ISO keyboards), CIRCUMFLEX ACCENT and |
| | | * DEGREE SIGN in a German layout (Mac: only on |
| | | * ISO keyboards), SUPERSCRIPT TWO and TILDE in a |
| | | * French Windows layout, COMMERCIAL AT and |
| | | * NUMBER SIGN in a French Mac layout on ISO |
| | | * keyboards, and LESS-THAN SIGN and GREATER-THAN |
| | | * SIGN in a Swiss German, German, or French Mac |
| | | * layout on ANSI keyboards. |
| | | */ |
| | | SDL_SCANCODE_COMMA = 54, |
| | | SDL_SCANCODE_PERIOD = 55, |
| | | SDL_SCANCODE_SLASH = 56, |
| | | |
| | | SDL_SCANCODE_CAPSLOCK = 57, |
| | | |
| | | SDL_SCANCODE_F1 = 58, |
| | | SDL_SCANCODE_F2 = 59, |
| | | SDL_SCANCODE_F3 = 60, |
| | | SDL_SCANCODE_F4 = 61, |
| | | SDL_SCANCODE_F5 = 62, |
| | | SDL_SCANCODE_F6 = 63, |
| | | SDL_SCANCODE_F7 = 64, |
| | | SDL_SCANCODE_F8 = 65, |
| | | SDL_SCANCODE_F9 = 66, |
| | | SDL_SCANCODE_F10 = 67, |
| | | SDL_SCANCODE_F11 = 68, |
| | | SDL_SCANCODE_F12 = 69, |
| | | |
| | | SDL_SCANCODE_PRINTSCREEN = 70, |
| | | SDL_SCANCODE_SCROLLLOCK = 71, |
| | | SDL_SCANCODE_PAUSE = 72, |
| | | SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but |
| | | does send code 73, not 117) */ |
| | | SDL_SCANCODE_HOME = 74, |
| | | SDL_SCANCODE_PAGEUP = 75, |
| | | SDL_SCANCODE_DELETE = 76, |
| | | SDL_SCANCODE_END = 77, |
| | | SDL_SCANCODE_PAGEDOWN = 78, |
| | | SDL_SCANCODE_RIGHT = 79, |
| | | SDL_SCANCODE_LEFT = 80, |
| | | SDL_SCANCODE_DOWN = 81, |
| | | SDL_SCANCODE_UP = 82, |
| | | |
| | | SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards |
| | | */ |
| | | SDL_SCANCODE_KP_DIVIDE = 84, |
| | | SDL_SCANCODE_KP_MULTIPLY = 85, |
| | | SDL_SCANCODE_KP_MINUS = 86, |
| | | SDL_SCANCODE_KP_PLUS = 87, |
| | | SDL_SCANCODE_KP_ENTER = 88, |
| | | SDL_SCANCODE_KP_1 = 89, |
| | | SDL_SCANCODE_KP_2 = 90, |
| | | SDL_SCANCODE_KP_3 = 91, |
| | | SDL_SCANCODE_KP_4 = 92, |
| | | SDL_SCANCODE_KP_5 = 93, |
| | | SDL_SCANCODE_KP_6 = 94, |
| | | SDL_SCANCODE_KP_7 = 95, |
| | | SDL_SCANCODE_KP_8 = 96, |
| | | SDL_SCANCODE_KP_9 = 97, |
| | | SDL_SCANCODE_KP_0 = 98, |
| | | SDL_SCANCODE_KP_PERIOD = 99, |
| | | |
| | | SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO |
| | | * keyboards have over ANSI ones, |
| | | * located between left shift and Y. |
| | | * Produces GRAVE ACCENT and TILDE in a |
| | | * US or UK Mac layout, REVERSE SOLIDUS |
| | | * (backslash) and VERTICAL LINE in a |
| | | * US or UK Windows layout, and |
| | | * LESS-THAN SIGN and GREATER-THAN SIGN |
| | | * in a Swiss German, German, or French |
| | | * layout. */ |
| | | SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */ |
| | | SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag, |
| | | * not a physical key - but some Mac keyboards |
| | | * do have a power key. */ |
| | | SDL_SCANCODE_KP_EQUALS = 103, |
| | | SDL_SCANCODE_F13 = 104, |
| | | SDL_SCANCODE_F14 = 105, |
| | | SDL_SCANCODE_F15 = 106, |
| | | SDL_SCANCODE_F16 = 107, |
| | | SDL_SCANCODE_F17 = 108, |
| | | SDL_SCANCODE_F18 = 109, |
| | | SDL_SCANCODE_F19 = 110, |
| | | SDL_SCANCODE_F20 = 111, |
| | | SDL_SCANCODE_F21 = 112, |
| | | SDL_SCANCODE_F22 = 113, |
| | | SDL_SCANCODE_F23 = 114, |
| | | SDL_SCANCODE_F24 = 115, |
| | | SDL_SCANCODE_EXECUTE = 116, |
| | | SDL_SCANCODE_HELP = 117, |
| | | SDL_SCANCODE_MENU = 118, |
| | | SDL_SCANCODE_SELECT = 119, |
| | | SDL_SCANCODE_STOP = 120, |
| | | SDL_SCANCODE_AGAIN = 121, /**< redo */ |
| | | SDL_SCANCODE_UNDO = 122, |
| | | SDL_SCANCODE_CUT = 123, |
| | | SDL_SCANCODE_COPY = 124, |
| | | SDL_SCANCODE_PASTE = 125, |
| | | SDL_SCANCODE_FIND = 126, |
| | | SDL_SCANCODE_MUTE = 127, |
| | | SDL_SCANCODE_VOLUMEUP = 128, |
| | | SDL_SCANCODE_VOLUMEDOWN = 129, |
| | | /* not sure whether there's a reason to enable these */ |
| | | /* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */ |
| | | /* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */ |
| | | /* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */ |
| | | SDL_SCANCODE_KP_COMMA = 133, |
| | | SDL_SCANCODE_KP_EQUALSAS400 = 134, |
| | | |
| | | SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see |
| | | footnotes in USB doc */ |
| | | SDL_SCANCODE_INTERNATIONAL2 = 136, |
| | | SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */ |
| | | SDL_SCANCODE_INTERNATIONAL4 = 138, |
| | | SDL_SCANCODE_INTERNATIONAL5 = 139, |
| | | SDL_SCANCODE_INTERNATIONAL6 = 140, |
| | | SDL_SCANCODE_INTERNATIONAL7 = 141, |
| | | SDL_SCANCODE_INTERNATIONAL8 = 142, |
| | | SDL_SCANCODE_INTERNATIONAL9 = 143, |
| | | SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */ |
| | | SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */ |
| | | SDL_SCANCODE_LANG3 = 146, /**< Katakana */ |
| | | SDL_SCANCODE_LANG4 = 147, /**< Hiragana */ |
| | | SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */ |
| | | SDL_SCANCODE_LANG6 = 149, /**< reserved */ |
| | | SDL_SCANCODE_LANG7 = 150, /**< reserved */ |
| | | SDL_SCANCODE_LANG8 = 151, /**< reserved */ |
| | | SDL_SCANCODE_LANG9 = 152, /**< reserved */ |
| | | |
| | | SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */ |
| | | SDL_SCANCODE_SYSREQ = 154, |
| | | SDL_SCANCODE_CANCEL = 155, |
| | | SDL_SCANCODE_CLEAR = 156, |
| | | SDL_SCANCODE_PRIOR = 157, |
| | | SDL_SCANCODE_RETURN2 = 158, |
| | | SDL_SCANCODE_SEPARATOR = 159, |
| | | SDL_SCANCODE_OUT = 160, |
| | | SDL_SCANCODE_OPER = 161, |
| | | SDL_SCANCODE_CLEARAGAIN = 162, |
| | | SDL_SCANCODE_CRSEL = 163, |
| | | SDL_SCANCODE_EXSEL = 164, |
| | | |
| | | SDL_SCANCODE_KP_00 = 176, |
| | | SDL_SCANCODE_KP_000 = 177, |
| | | SDL_SCANCODE_THOUSANDSSEPARATOR = 178, |
| | | SDL_SCANCODE_DECIMALSEPARATOR = 179, |
| | | SDL_SCANCODE_CURRENCYUNIT = 180, |
| | | SDL_SCANCODE_CURRENCYSUBUNIT = 181, |
| | | SDL_SCANCODE_KP_LEFTPAREN = 182, |
| | | SDL_SCANCODE_KP_RIGHTPAREN = 183, |
| | | SDL_SCANCODE_KP_LEFTBRACE = 184, |
| | | SDL_SCANCODE_KP_RIGHTBRACE = 185, |
| | | SDL_SCANCODE_KP_TAB = 186, |
| | | SDL_SCANCODE_KP_BACKSPACE = 187, |
| | | SDL_SCANCODE_KP_A = 188, |
| | | SDL_SCANCODE_KP_B = 189, |
| | | SDL_SCANCODE_KP_C = 190, |
| | | SDL_SCANCODE_KP_D = 191, |
| | | SDL_SCANCODE_KP_E = 192, |
| | | SDL_SCANCODE_KP_F = 193, |
| | | SDL_SCANCODE_KP_XOR = 194, |
| | | SDL_SCANCODE_KP_POWER = 195, |
| | | SDL_SCANCODE_KP_PERCENT = 196, |
| | | SDL_SCANCODE_KP_LESS = 197, |
| | | SDL_SCANCODE_KP_GREATER = 198, |
| | | SDL_SCANCODE_KP_AMPERSAND = 199, |
| | | SDL_SCANCODE_KP_DBLAMPERSAND = 200, |
| | | SDL_SCANCODE_KP_VERTICALBAR = 201, |
| | | SDL_SCANCODE_KP_DBLVERTICALBAR = 202, |
| | | SDL_SCANCODE_KP_COLON = 203, |
| | | SDL_SCANCODE_KP_HASH = 204, |
| | | SDL_SCANCODE_KP_SPACE = 205, |
| | | SDL_SCANCODE_KP_AT = 206, |
| | | SDL_SCANCODE_KP_EXCLAM = 207, |
| | | SDL_SCANCODE_KP_MEMSTORE = 208, |
| | | SDL_SCANCODE_KP_MEMRECALL = 209, |
| | | SDL_SCANCODE_KP_MEMCLEAR = 210, |
| | | SDL_SCANCODE_KP_MEMADD = 211, |
| | | SDL_SCANCODE_KP_MEMSUBTRACT = 212, |
| | | SDL_SCANCODE_KP_MEMMULTIPLY = 213, |
| | | SDL_SCANCODE_KP_MEMDIVIDE = 214, |
| | | SDL_SCANCODE_KP_PLUSMINUS = 215, |
| | | SDL_SCANCODE_KP_CLEAR = 216, |
| | | SDL_SCANCODE_KP_CLEARENTRY = 217, |
| | | SDL_SCANCODE_KP_BINARY = 218, |
| | | SDL_SCANCODE_KP_OCTAL = 219, |
| | | SDL_SCANCODE_KP_DECIMAL = 220, |
| | | SDL_SCANCODE_KP_HEXADECIMAL = 221, |
| | | |
| | | SDL_SCANCODE_LCTRL = 224, |
| | | SDL_SCANCODE_LSHIFT = 225, |
| | | SDL_SCANCODE_LALT = 226, /**< alt, option */ |
| | | SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */ |
| | | SDL_SCANCODE_RCTRL = 228, |
| | | SDL_SCANCODE_RSHIFT = 229, |
| | | SDL_SCANCODE_RALT = 230, /**< alt gr, option */ |
| | | SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */ |
| | | |
| | | SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered |
| | | * by any of the above, but since there's a |
| | | * special KMOD_MODE for it I'm adding it here |
| | | */ |
| | | |
| | | /*@}*//*Usage page 0x07*/ |
| | | |
| | | /** |
| | | * \name Usage page 0x0C |
| | | * |
| | | * These values are mapped from usage page 0x0C (USB consumer page). |
| | | */ |
| | | /*@{*/ |
| | | |
| | | SDL_SCANCODE_AUDIONEXT = 258, |
| | | SDL_SCANCODE_AUDIOPREV = 259, |
| | | SDL_SCANCODE_AUDIOSTOP = 260, |
| | | SDL_SCANCODE_AUDIOPLAY = 261, |
| | | SDL_SCANCODE_AUDIOMUTE = 262, |
| | | SDL_SCANCODE_MEDIASELECT = 263, |
| | | SDL_SCANCODE_WWW = 264, |
| | | SDL_SCANCODE_MAIL = 265, |
| | | SDL_SCANCODE_CALCULATOR = 266, |
| | | SDL_SCANCODE_COMPUTER = 267, |
| | | SDL_SCANCODE_AC_SEARCH = 268, |
| | | SDL_SCANCODE_AC_HOME = 269, |
| | | SDL_SCANCODE_AC_BACK = 270, |
| | | SDL_SCANCODE_AC_FORWARD = 271, |
| | | SDL_SCANCODE_AC_STOP = 272, |
| | | SDL_SCANCODE_AC_REFRESH = 273, |
| | | SDL_SCANCODE_AC_BOOKMARKS = 274, |
| | | |
| | | /*@}*//*Usage page 0x0C*/ |
| | | |
| | | /** |
| | | * \name Walther keys |
| | | * |
| | | * These are values that Christian Walther added (for mac keyboard?). |
| | | */ |
| | | /*@{*/ |
| | | |
| | | SDL_SCANCODE_BRIGHTNESSDOWN = 275, |
| | | SDL_SCANCODE_BRIGHTNESSUP = 276, |
| | | SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display |
| | | switch, video mode switch */ |
| | | SDL_SCANCODE_KBDILLUMTOGGLE = 278, |
| | | SDL_SCANCODE_KBDILLUMDOWN = 279, |
| | | SDL_SCANCODE_KBDILLUMUP = 280, |
| | | SDL_SCANCODE_EJECT = 281, |
| | | SDL_SCANCODE_SLEEP = 282, |
| | | |
| | | SDL_SCANCODE_APP1 = 283, |
| | | SDL_SCANCODE_APP2 = 284, |
| | | |
| | | /*@}*//*Walther keys*/ |
| | | |
| | | /* Add any other keys here. */ |
| | | |
| | | SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes |
| | | for array bounds */ |
| | | } SDL_Scancode; |
| | | |
| | | #endif /* _SDL_scancode_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | #ifndef _SDL_shape_h |
| | | #define _SDL_shape_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_pixels.h" |
| | | #include "SDL_rect.h" |
| | | #include "SDL_surface.h" |
| | | #include "SDL_video.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** \file SDL_shape.h |
| | | * |
| | | * Header file for the shaped window API. |
| | | */ |
| | | |
| | | #define SDL_NONSHAPEABLE_WINDOW -1 |
| | | #define SDL_INVALID_SHAPE_ARGUMENT -2 |
| | | #define SDL_WINDOW_LACKS_SHAPE -3 |
| | | |
| | | /** |
| | | * \brief Create a window that can be shaped with the specified position, dimensions, and flags. |
| | | * |
| | | * \param title The title of the window, in UTF-8 encoding. |
| | | * \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or |
| | | * ::SDL_WINDOWPOS_UNDEFINED. |
| | | * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or |
| | | * ::SDL_WINDOWPOS_UNDEFINED. |
| | | * \param w The width of the window. |
| | | * \param h The height of the window. |
| | | * \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with any of the following: |
| | | * ::SDL_WINDOW_OPENGL, ::SDL_WINDOW_INPUT_GRABBED, |
| | | * ::SDL_WINDOW_SHOWN, ::SDL_WINDOW_RESIZABLE, |
| | | * ::SDL_WINDOW_MAXIMIZED, ::SDL_WINDOW_MINIMIZED, |
| | | * ::SDL_WINDOW_BORDERLESS is always set, and ::SDL_WINDOW_FULLSCREEN is always unset. |
| | | * |
| | | * \return The window created, or NULL if window creation failed. |
| | | * |
| | | * \sa SDL_DestroyWindow() |
| | | */ |
| | | extern DECLSPEC SDL_Window * SDLCALL SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned int w,unsigned int h,Uint32 flags); |
| | | |
| | | /** |
| | | * \brief Return whether the given window is a shaped window. |
| | | * |
| | | * \param window The window to query for being shaped. |
| | | * |
| | | * \return SDL_TRUE if the window is a window that can be shaped, SDL_FALSE if the window is unshaped or NULL. |
| | | * \sa SDL_CreateShapedWindow |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_IsShapedWindow(const SDL_Window *window); |
| | | |
| | | /** \brief An enum denoting the specific type of contents present in an SDL_WindowShapeParams union. */ |
| | | typedef enum { |
| | | /** \brief The default mode, a binarized alpha cutoff of 1. */ |
| | | ShapeModeDefault, |
| | | /** \brief A binarized alpha cutoff with a given integer value. */ |
| | | ShapeModeBinarizeAlpha, |
| | | /** \brief A binarized alpha cutoff with a given integer value, but with the opposite comparison. */ |
| | | ShapeModeReverseBinarizeAlpha, |
| | | /** \brief A color key is applied. */ |
| | | ShapeModeColorKey |
| | | } WindowShapeMode; |
| | | |
| | | #define SDL_SHAPEMODEALPHA(mode) (mode == ShapeModeDefault || mode == ShapeModeBinarizeAlpha || mode == ShapeModeReverseBinarizeAlpha) |
| | | |
| | | /** \brief A union containing parameters for shaped windows. */ |
| | | typedef union { |
| | | /** \brief a cutoff alpha value for binarization of the window shape's alpha channel. */ |
| | | Uint8 binarizationCutoff; |
| | | SDL_Color colorKey; |
| | | } SDL_WindowShapeParams; |
| | | |
| | | /** \brief A struct that tags the SDL_WindowShapeParams union with an enum describing the type of its contents. */ |
| | | typedef struct SDL_WindowShapeMode { |
| | | /** \brief The mode of these window-shape parameters. */ |
| | | WindowShapeMode mode; |
| | | /** \brief Window-shape parameters. */ |
| | | SDL_WindowShapeParams parameters; |
| | | } SDL_WindowShapeMode; |
| | | |
| | | /** |
| | | * \brief Set the shape and parameters of a shaped window. |
| | | * |
| | | * \param window The shaped window whose parameters should be set. |
| | | * \param shape A surface encoding the desired shape for the window. |
| | | * \param shape_mode The parameters to set for the shaped window. |
| | | * |
| | | * \return 0 on success, SDL_INVALID_SHAPE_ARGUMENT on invalid an invalid shape argument, or SDL_NONSHAPEABLE_WINDOW |
| | | * if the SDL_Window* given does not reference a valid shaped window. |
| | | * |
| | | * \sa SDL_WindowShapeMode |
| | | * \sa SDL_GetShapedWindowMode. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode); |
| | | |
| | | /** |
| | | * \brief Get the shape parameters of a shaped window. |
| | | * |
| | | * \param window The shaped window whose parameters should be retrieved. |
| | | * \param shape_mode An empty shape-mode structure to fill, or NULL to check whether the window has a shape. |
| | | * |
| | | * \return 0 if the window has a shape and, provided shape_mode was not NULL, shape_mode has been filled with the mode |
| | | * data, SDL_NONSHAPEABLE_WINDOW if the SDL_Window given is not a shaped window, or SDL_WINDOW_LACKS_SHAPE if |
| | | * the SDL_Window* given is a shapeable window currently lacking a shape. |
| | | * |
| | | * \sa SDL_WindowShapeMode |
| | | * \sa SDL_SetWindowShape |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetShapedWindowMode(SDL_Window *window,SDL_WindowShapeMode *shape_mode); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_shape_h */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_stdinc.h |
| | | * |
| | | * This is a general header that includes C language support. |
| | | */ |
| | | |
| | | #ifndef _SDL_stdinc_h |
| | | #define _SDL_stdinc_h |
| | | |
| | | #include "SDL_config.h" |
| | | |
| | | #ifdef HAVE_SYS_TYPES_H |
| | | #include <sys/types.h> |
| | | #endif |
| | | #ifdef HAVE_STDIO_H |
| | | #include <stdio.h> |
| | | #endif |
| | | #if defined(STDC_HEADERS) |
| | | # include <stdlib.h> |
| | | # include <stddef.h> |
| | | # include <stdarg.h> |
| | | #else |
| | | # if defined(HAVE_STDLIB_H) |
| | | # include <stdlib.h> |
| | | # elif defined(HAVE_MALLOC_H) |
| | | # include <malloc.h> |
| | | # endif |
| | | # if defined(HAVE_STDDEF_H) |
| | | # include <stddef.h> |
| | | # endif |
| | | # if defined(HAVE_STDARG_H) |
| | | # include <stdarg.h> |
| | | # endif |
| | | #endif |
| | | #ifdef HAVE_STRING_H |
| | | # if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) |
| | | # include <memory.h> |
| | | # endif |
| | | # include <string.h> |
| | | #endif |
| | | #ifdef HAVE_STRINGS_H |
| | | # include <strings.h> |
| | | #endif |
| | | #if defined(HAVE_INTTYPES_H) |
| | | # include <inttypes.h> |
| | | #elif defined(HAVE_STDINT_H) |
| | | # include <stdint.h> |
| | | #endif |
| | | #ifdef HAVE_CTYPE_H |
| | | # include <ctype.h> |
| | | #endif |
| | | #ifdef HAVE_MATH_H |
| | | # include <math.h> |
| | | #endif |
| | | #if defined(HAVE_ICONV) && defined(HAVE_ICONV_H) |
| | | # include <iconv.h> |
| | | #endif |
| | | |
| | | /** |
| | | * The number of elements in an array. |
| | | */ |
| | | #define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) |
| | | #define SDL_TABLESIZE(table) SDL_arraysize(table) |
| | | |
| | | /** |
| | | * \name Cast operators |
| | | * |
| | | * Use proper C++ casts when compiled as C++ to be compatible with the option |
| | | * -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above). |
| | | */ |
| | | /*@{*/ |
| | | #ifdef __cplusplus |
| | | #define SDL_reinterpret_cast(type, expression) reinterpret_cast<type>(expression) |
| | | #define SDL_static_cast(type, expression) static_cast<type>(expression) |
| | | #define SDL_const_cast(type, expression) const_cast<type>(expression) |
| | | #else |
| | | #define SDL_reinterpret_cast(type, expression) ((type)(expression)) |
| | | #define SDL_static_cast(type, expression) ((type)(expression)) |
| | | #define SDL_const_cast(type, expression) ((type)(expression)) |
| | | #endif |
| | | /*@}*//*Cast operators*/ |
| | | |
| | | /* Define a four character code as a Uint32 */ |
| | | #define SDL_FOURCC(A, B, C, D) \ |
| | | ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \ |
| | | (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \ |
| | | (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \ |
| | | (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24)) |
| | | |
| | | /** |
| | | * \name Basic data types |
| | | */ |
| | | /*@{*/ |
| | | |
| | | typedef enum |
| | | { |
| | | SDL_FALSE = 0, |
| | | SDL_TRUE = 1 |
| | | } SDL_bool; |
| | | |
| | | /** |
| | | * \brief A signed 8-bit integer type. |
| | | */ |
| | | typedef int8_t Sint8; |
| | | /** |
| | | * \brief An unsigned 8-bit integer type. |
| | | */ |
| | | typedef uint8_t Uint8; |
| | | /** |
| | | * \brief A signed 16-bit integer type. |
| | | */ |
| | | typedef int16_t Sint16; |
| | | /** |
| | | * \brief An unsigned 16-bit integer type. |
| | | */ |
| | | typedef uint16_t Uint16; |
| | | /** |
| | | * \brief A signed 32-bit integer type. |
| | | */ |
| | | typedef int32_t Sint32; |
| | | /** |
| | | * \brief An unsigned 32-bit integer type. |
| | | */ |
| | | typedef uint32_t Uint32; |
| | | |
| | | /** |
| | | * \brief A signed 64-bit integer type. |
| | | */ |
| | | typedef int64_t Sint64; |
| | | /** |
| | | * \brief An unsigned 64-bit integer type. |
| | | */ |
| | | typedef uint64_t Uint64; |
| | | |
| | | /*@}*//*Basic data types*/ |
| | | |
| | | |
| | | #define SDL_COMPILE_TIME_ASSERT(name, x) \ |
| | | typedef int SDL_dummy_ ## name[(x) * 2 - 1] |
| | | /** \cond */ |
| | | #ifndef DOXYGEN_SHOULD_IGNORE_THIS |
| | | SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); |
| | | SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); |
| | | SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); |
| | | SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); |
| | | SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); |
| | | SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); |
| | | SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); |
| | | SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); |
| | | #endif /* DOXYGEN_SHOULD_IGNORE_THIS */ |
| | | /** \endcond */ |
| | | |
| | | /* Check to make sure enums are the size of ints, for structure packing. |
| | | For both Watcom C/C++ and Borland C/C++ the compiler option that makes |
| | | enums having the size of an int must be enabled. |
| | | This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). |
| | | */ |
| | | |
| | | /** \cond */ |
| | | #ifndef DOXYGEN_SHOULD_IGNORE_THIS |
| | | #if !defined(__ANDROID__) |
| | | /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */ |
| | | typedef enum |
| | | { |
| | | DUMMY_ENUM_VALUE |
| | | } SDL_DUMMY_ENUM; |
| | | |
| | | SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); |
| | | #endif |
| | | #endif /* DOXYGEN_SHOULD_IGNORE_THIS */ |
| | | /** \endcond */ |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | #if defined(HAVE_ALLOCA) && !defined(alloca) |
| | | # if defined(HAVE_ALLOCA_H) |
| | | # include <alloca.h> |
| | | # elif defined(__GNUC__) |
| | | # define alloca __builtin_alloca |
| | | # elif defined(_MSC_VER) |
| | | # include <malloc.h> |
| | | # define alloca _alloca |
| | | # elif defined(__WATCOMC__) |
| | | # include <malloc.h> |
| | | # elif defined(__BORLANDC__) |
| | | # include <malloc.h> |
| | | # elif defined(__DMC__) |
| | | # include <stdlib.h> |
| | | # elif defined(__AIX__) |
| | | #pragma alloca |
| | | # elif defined(__MRC__) |
| | | void *alloca(unsigned); |
| | | # else |
| | | char *alloca(); |
| | | # endif |
| | | #endif |
| | | #ifdef HAVE_ALLOCA |
| | | #define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) |
| | | #define SDL_stack_free(data) |
| | | #else |
| | | #define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) |
| | | #define SDL_stack_free(data) SDL_free(data) |
| | | #endif |
| | | |
| | | |
| | | /* SDL stdinc inline functions: |
| | | |
| | | The theory here is that by default we forcibly inline what we can, and your |
| | | app will use the inline version by default. However we expose a non-inline |
| | | version too, so the symbol is always available in the library even if your app |
| | | bypassed the inline version. The SDL_*_inline versions aren't guaranteed to |
| | | exist, so never call them directly; use SDL_* instead, and trust the system |
| | | to give you the right thing. |
| | | |
| | | The benefit here is that you can dlsym() these functions, which you |
| | | couldn't if you had macros, you can link against a foreign build of SDL |
| | | even if you configured differently, and you can drop the unconfigured SDL |
| | | headers into a project without #defining HAVE_MALLOC (etc) and still link. |
| | | */ |
| | | |
| | | extern DECLSPEC void *SDLCALL SDL_malloc(size_t size); |
| | | #ifdef HAVE_MALLOC |
| | | SDL_FORCE_INLINE void *SDL_malloc_inline(size_t size) { return malloc(size); } |
| | | #define SDL_malloc SDL_malloc_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); |
| | | #ifdef HAVE_CALLOC |
| | | SDL_FORCE_INLINE void *SDL_calloc_inline(size_t nmemb, size_t size) { return calloc(nmemb, size); } |
| | | #define SDL_calloc SDL_calloc_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); |
| | | #ifdef HAVE_REALLOC |
| | | SDL_FORCE_INLINE void *SDL_realloc_inline(void *mem, size_t size) { return realloc(mem, size); } |
| | | #define SDL_realloc SDL_realloc_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC void SDLCALL SDL_free(void *mem); |
| | | #ifdef HAVE_FREE |
| | | SDL_FORCE_INLINE void SDL_free_inline(void *mem) { free(mem); } |
| | | #define SDL_free SDL_free_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); |
| | | #ifdef HAVE_GETENV |
| | | SDL_FORCE_INLINE char *SDL_getenv_inline(const char *name) { return getenv(name); } |
| | | #define SDL_getenv SDL_getenv_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); |
| | | #ifdef HAVE_SETENV |
| | | SDL_FORCE_INLINE int SDL_setenv_inline(const char *name, const char *value, int overwrite) { return setenv(name, value, overwrite); } |
| | | #define SDL_setenv SDL_setenv_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)); |
| | | #ifdef HAVE_QSORT |
| | | SDL_FORCE_INLINE void SDL_qsort_inline(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)) { qsort(base, nmemb, size, compare); } |
| | | #define SDL_qsort SDL_qsort_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC int SDLCALL SDL_abs(int x); |
| | | #ifdef HAVE_ABS |
| | | SDL_FORCE_INLINE int SDL_abs_inline(int x) { return abs(x); } |
| | | #else |
| | | SDL_FORCE_INLINE int SDL_abs_inline(int x) { return ((x) < 0 ? -(x) : (x)); } |
| | | #endif |
| | | #define SDL_abs SDL_abs_inline |
| | | |
| | | /* !!! FIXME: these have side effects. You probably shouldn't use them. */ |
| | | /* !!! FIXME: Maybe we do forceinline functions of SDL_mini, SDL_minf, etc? */ |
| | | #define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) |
| | | #define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) |
| | | |
| | | extern DECLSPEC int SDLCALL SDL_isdigit(int x); |
| | | extern DECLSPEC int SDLCALL SDL_isspace(int x); |
| | | extern DECLSPEC int SDLCALL SDL_toupper(int x); |
| | | extern DECLSPEC int SDLCALL SDL_tolower(int x); |
| | | #ifdef HAVE_CTYPE_H |
| | | SDL_FORCE_INLINE int SDL_isdigit_inline(int x) { return isdigit(x); } |
| | | SDL_FORCE_INLINE int SDL_isspace_inline(int x) { return isspace(x); } |
| | | SDL_FORCE_INLINE int SDL_toupper_inline(int x) { return toupper(x); } |
| | | SDL_FORCE_INLINE int SDL_tolower_inline(int x) { return tolower(x); } |
| | | #else |
| | | SDL_FORCE_INLINE int SDL_isdigit_inline(int x) { return ((x) >= '0') && ((x) <= '9'); } |
| | | SDL_FORCE_INLINE int SDL_isspace_inline(int x) { return ((x) == ' ') || ((x) == '\t') || ((x) == '\r') || ((x) == '\n'); } |
| | | SDL_FORCE_INLINE int SDL_toupper_inline(int x) { return ((x) >= 'a') && ((x) <= 'z') ? ('A'+((x)-'a')) : (x); } |
| | | SDL_FORCE_INLINE int SDL_tolower_inline(int x) { return ((x) >= 'A') && ((x) <= 'Z') ? ('a'+((x)-'A')) : (x); } |
| | | #endif |
| | | #define SDL_isdigit SDL_isdigit_inline |
| | | #define SDL_isspace SDL_isspace_inline |
| | | #define SDL_toupper SDL_toupper_inline |
| | | #define SDL_tolower SDL_tolower_inline |
| | | |
| | | extern DECLSPEC void *SDLCALL SDL_memset(void *dst, int c, size_t len); |
| | | #ifdef HAVE_MEMSET |
| | | SDL_FORCE_INLINE void *SDL_memset_inline(void *dst, int c, size_t len) { return memset(dst, c, len); } |
| | | #define SDL_memset SDL_memset_inline |
| | | #endif |
| | | |
| | | #define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) |
| | | #define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) |
| | | |
| | | /* !!! FIXME: does this _really_ beat memset() on any modern platform? */ |
| | | SDL_FORCE_INLINE void SDL_memset4(void *dst, int val, size_t len) |
| | | { |
| | | #if defined(__GNUC__) && defined(i386) |
| | | int u0, u1, u2; |
| | | __asm__ __volatile__ ( |
| | | "cld \n\t" |
| | | "rep ; stosl \n\t" |
| | | : "=&D" (u0), "=&a" (u1), "=&c" (u2) |
| | | : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, len)) |
| | | : "memory" |
| | | ); |
| | | /* !!! FIXME: amd64? */ |
| | | #else |
| | | size_t _n = (len + 3) / 4; |
| | | Uint32 *_p = SDL_static_cast(Uint32 *, dst); |
| | | Uint32 _val = (val); |
| | | if (len == 0) |
| | | return; |
| | | switch (len % 4) |
| | | { |
| | | case 0: do { *_p++ = _val; |
| | | case 3: *_p++ = _val; |
| | | case 2: *_p++ = _val; |
| | | case 1: *_p++ = _val; |
| | | } while ( --_n ); |
| | | } |
| | | #endif |
| | | } |
| | | |
| | | |
| | | extern DECLSPEC void *SDLCALL SDL_memcpy(void *dst, const void *src, size_t len); |
| | | #if defined(__MACOSX__) |
| | | SDL_FORCE_INLINE void *SDL_memcpy_inline(void *dst, const void *src, size_t len) |
| | | { |
| | | /* We can count on memcpy existing on Mac OS X and being well-tuned. */ |
| | | return memcpy(dst, src, len); |
| | | } |
| | | #define SDL_memcpy SDL_memcpy_inline |
| | | #elif defined(__GNUC__) && defined(i386) && !defined(__WIN32__) |
| | | SDL_FORCE_INLINE void *SDL_memcpy_inline(void *dst, const void *src, size_t len) |
| | | { |
| | | /* !!! FIXME: does this _really_ beat memcpy() on any modern platform? */ |
| | | /* !!! FIXME: shouldn't we just force the inputs to ecx/edi/esi instead of this tapdance with outputs? */ |
| | | /* !!! FIXME: amd64? */ |
| | | int u0, u1, u2; |
| | | __asm__ __volatile__ ( |
| | | "cld \n\t" |
| | | "rep ; movsl \n\t" |
| | | "testb $2,%b4 \n\t" |
| | | "je 1f \n\t" |
| | | "movsw \n" |
| | | "1:\ttestb $1,%b4 \n\t" |
| | | "je 2f \n\t" |
| | | "movsb \n" |
| | | "2:" |
| | | : "=&c" (u0), "=&D" (u1), "=&S" (u2) |
| | | : "0" (SDL_static_cast(unsigned, len)/4), "q" (len), "1" (dst), "2" (src) |
| | | : "memory" |
| | | ); |
| | | return dst; |
| | | } |
| | | #define SDL_memcpy SDL_memcpy_inline |
| | | #elif defined(HAVE_MEMCPY) |
| | | SDL_FORCE_INLINE void *SDL_memcpy_inline(void *dst, const void *src, size_t len) |
| | | { |
| | | return memcpy(dst, src, len); |
| | | } |
| | | #define SDL_memcpy SDL_memcpy_inline |
| | | #elif defined(HAVE_BCOPY) /* !!! FIXME: is there _really_ ever a time where you have bcopy and not memcpy? */ |
| | | SDL_FORCE_INLINE void *SDL_memcpy_inline(void *dst, const void *src, size_t len) |
| | | { |
| | | bcopy(src, dst, len); |
| | | return dst; |
| | | } |
| | | #define SDL_memcpy SDL_memcpy_inline |
| | | #endif |
| | | |
| | | |
| | | SDL_FORCE_INLINE void *SDL_memcpy4(void *dst, const void *src, size_t dwords) |
| | | { |
| | | #if defined(__GNUC__) && defined(i386) |
| | | /* !!! FIXME: does this _really_ beat memcpy() on any modern platform? */ |
| | | /* !!! FIXME: shouldn't we just force the inputs to ecx/edi/esi instead of this tapdance with outputs? */ |
| | | int ecx, edi, esi; |
| | | __asm__ __volatile__ ( |
| | | "cld \n\t" |
| | | "rep ; movsl \n\t" |
| | | : "=&c" (ecx), "=&D" (edi), "=&S" (esi) |
| | | : "0" (SDL_static_cast(unsigned, dwords)), "1" (dst), "2" (src) |
| | | : "memory" |
| | | ); |
| | | return dst; |
| | | #else |
| | | return SDL_memcpy(dst, src, dwords * 4); |
| | | #endif |
| | | } |
| | | |
| | | extern DECLSPEC void *SDLCALL SDL_memmove(void *dst, const void *src, size_t len); |
| | | #ifdef HAVE_MEMMOVE |
| | | SDL_FORCE_INLINE void *SDL_memmove_inline(void *dst, const void *src, size_t len) { return memmove(dst, src, len); } |
| | | #define SDL_memmove SDL_memmove_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); |
| | | #ifdef HAVE_MEMCMP |
| | | SDL_FORCE_INLINE int SDL_memcmp_inline(const void *s1, const void *s2, size_t len) { return memcmp(s1, s2, len); } |
| | | #define SDL_memcmp SDL_memcmp_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); |
| | | #ifdef HAVE_STRLEN |
| | | SDL_FORCE_INLINE size_t SDL_strlen_inline(const char *str) { return strlen(str); } |
| | | #define SDL_strlen SDL_strlen_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); |
| | | #ifdef HAVE_WCSLEN |
| | | SDL_FORCE_INLINE size_t SDL_wcslen_inline(const wchar_t *wstr) { return wcslen(wstr); } |
| | | #define SDL_wcslen SDL_wcslen_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC size_t SDLCALL SDL_wcslcpy(wchar_t *dst, const wchar_t *src, size_t maxlen); |
| | | #ifdef HAVE_WCSLCPY |
| | | SDL_FORCE_INLINE size_t SDL_wcslcpy_inline(wchar_t *dst, const wchar_t *src, size_t maxlen) { return wcslcpy(dst, src, maxlen); } |
| | | #define SDL_wcslcpy SDL_wcslcpy_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC size_t SDLCALL SDL_wcslcat(wchar_t *dst, const wchar_t *src, size_t maxlen); |
| | | #ifdef HAVE_WCSLCAT |
| | | SDL_FORCE_INLINE size_t SDL_wcslcat_inline(wchar_t *dst, const wchar_t *src, size_t maxlen) { return wcslcat(dst, src, maxlen); } |
| | | #define SDL_wcslcat SDL_wcslcat_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src, size_t maxlen); |
| | | #ifdef HAVE_STRLCPY |
| | | SDL_FORCE_INLINE size_t SDL_strlcpy_inline(char *dst, const char *src, size_t maxlen) { return strlcpy(dst, src, maxlen); } |
| | | #define SDL_strlcpy SDL_strlcpy_inline |
| | | #else |
| | | #endif |
| | | |
| | | extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(char *dst, const char *src, size_t dst_bytes); |
| | | |
| | | extern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src, size_t maxlen); |
| | | #ifdef HAVE_STRLCAT |
| | | SDL_FORCE_INLINE size_t SDL_strlcat_inline(char *dst, const char *src, size_t maxlen) { return strlcat(dst, src, maxlen); } |
| | | #define SDL_strlcat SDL_strlcat_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); |
| | | #ifdef HAVE_STRDUP |
| | | SDL_FORCE_INLINE char *SDL_strdup_inline(const char *str) { return strdup(str); } |
| | | #define SDL_strdup SDL_strdup_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_strrev(char *str); |
| | | #ifdef HAVE__STRREV |
| | | SDL_FORCE_INLINE char *SDL_strrev_inline(char *str) { return _strrev(str); } |
| | | #define SDL_strrev SDL_strrev_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_strupr(char *str); |
| | | #ifdef HAVE__STRUPR |
| | | SDL_FORCE_INLINE char *SDL_strupr_inline(char *str) { return _strupr(str); } |
| | | #define SDL_strupr SDL_strupr_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_strlwr(char *str); |
| | | #ifdef HAVE__STRLWR |
| | | SDL_FORCE_INLINE char *SDL_strlwr_inline(char *str) { return _strlwr(str); } |
| | | #define SDL_strlwr SDL_strlwr_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c); |
| | | #ifdef HAVE_STRCHR |
| | | SDL_FORCE_INLINE char *SDL_strchr_inline(const char *str, int c) { return SDL_const_cast(char*,strchr(str, c)); } |
| | | #define SDL_strchr SDL_strchr_inline |
| | | #elif defined(HAVE_INDEX) /* !!! FIXME: is there anywhere that has this but not strchr? */ |
| | | SDL_FORCE_INLINE char *SDL_strchr_inline(const char *str, int c) { return SDL_const_cast(char*,index(str, c)); } |
| | | #define SDL_strchr SDL_strchr_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c); |
| | | #ifdef HAVE_STRRCHR |
| | | SDL_FORCE_INLINE char *SDL_strrchr_inline(const char *str, int c) { return SDL_const_cast(char*,strrchr(str, c)); } |
| | | #define SDL_strrchr SDL_strrchr_inline |
| | | #elif defined(HAVE_RINDEX) /* !!! FIXME: is there anywhere that has this but not strrchr? */ |
| | | SDL_FORCE_INLINE char *SDL_strrchr_inline(const char *str, int c) { return SDL_const_cast(char*,rindex(str, c)); } |
| | | #define SDL_strrchr SDL_strrchr_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle); |
| | | #ifdef HAVE_STRSTR |
| | | SDL_FORCE_INLINE char *SDL_strstr_inline(const char *haystack, const char *needle) { return SDL_const_cast(char*,strstr(haystack, needle)); } |
| | | #define SDL_strstr SDL_strstr_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *str, int radix); |
| | | #ifdef HAVE__LTOA |
| | | SDL_FORCE_INLINE char *SDL_ltoa_inline(long value, char *str, int radix) { return _ltoa(value, str, radix); } |
| | | #define SDL_ltoa SDL_ltoa_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix); |
| | | #ifdef HAVE_ITOA |
| | | SDL_FORCE_INLINE char *SDL_itoa_inline(int value, char *str, int radix) { return itoa(value, str, radix); } |
| | | #else |
| | | SDL_FORCE_INLINE char *SDL_itoa_inline(int value, char *str, int radix) { return SDL_ltoa((long)value, str, radix); } |
| | | #endif |
| | | #define SDL_itoa SDL_itoa_inline |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *str, int radix); |
| | | #ifdef HAVE__ULTOA |
| | | SDL_FORCE_INLINE char *SDL_ultoa_inline(unsigned long value, char *str, int radix) { return _ultoa(value, str, radix); } |
| | | #define SDL_ultoa SDL_ultoa_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix); |
| | | #ifdef HAVE__UITOA |
| | | SDL_FORCE_INLINE char *SDL_uitoa_inline(unsigned int value, char *str, int radix) { return _uitoa(value, str, radix); } |
| | | #else |
| | | SDL_FORCE_INLINE char *SDL_uitoa_inline(unsigned int value, char *str, int radix) { return SDL_ultoa((unsigned long)value, str, radix); } |
| | | #endif |
| | | #define SDL_uitoa SDL_uitoa_inline |
| | | |
| | | |
| | | extern DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base); |
| | | #ifdef HAVE_STRTOL |
| | | SDL_FORCE_INLINE long SDL_strtol_inline(const char *str, char **endp, int base) { return strtol(str, endp, base); } |
| | | #define SDL_strtol SDL_strtol_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base); |
| | | #ifdef HAVE_STRTOUL |
| | | SDL_FORCE_INLINE unsigned long SDLCALL SDL_strtoul_inline(const char *str, char **endp, int base) { return strtoul(str, endp, base); } |
| | | #define SDL_strtoul SDL_strtoul_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *str, int radix); |
| | | #ifdef HAVE__I64TOA |
| | | SDL_FORCE_INLINE char *SDL_lltoa_inline(Sint64 value, char *str, int radix) { return _i64toa(value, str, radix); } |
| | | #define SDL_lltoa SDL_lltoa_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix); |
| | | #ifdef HAVE__UI64TOA |
| | | SDL_FORCE_INLINE char *SDL_ulltoa_inline(Uint64 value, char *str, int radix) { return _ui64toa(value, str, radix); } |
| | | #define SDL_ulltoa SDL_ulltoa_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base); |
| | | #ifdef HAVE_STRTOLL |
| | | SDL_FORCE_INLINE Sint64 SDL_strtoll_inline(const char *str, char **endp, int base) { return strtoll(str, endp, base); } |
| | | #define SDL_strtoll SDL_strtoll_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base); |
| | | #ifdef HAVE_STRTOULL |
| | | SDL_FORCE_INLINE Uint64 SDL_strtoull_inline(const char *str, char **endp, int base) { return strtoull(str, endp, base); } |
| | | #define SDL_strtoull SDL_strtoull_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp); |
| | | #ifdef HAVE_STRTOD |
| | | SDL_FORCE_INLINE double SDL_strtod_inline(const char *str, char **endp) { return strtod(str, endp); } |
| | | #define SDL_strtod SDL_strtod_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC int SDLCALL SDL_atoi(const char *str); |
| | | #ifdef HAVE_ATOI |
| | | SDL_FORCE_INLINE int SDL_atoi_inline(const char *str) { return atoi(str); } |
| | | #else |
| | | SDL_FORCE_INLINE int SDL_atoi_inline(const char *str) { return SDL_strtol(str, NULL, 0); } |
| | | #endif |
| | | #define SDL_atoi SDL_atoi_inline |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_atof(const char *str); |
| | | #ifdef HAVE_ATOF |
| | | SDL_FORCE_INLINE double SDL_atof_inline(const char *str) { return (double) atof(str); } |
| | | #else |
| | | SDL_FORCE_INLINE double SDL_atof_inline(const char *str) { return SDL_strtod(str, NULL); } |
| | | #endif |
| | | #define SDL_atof SDL_atof_inline |
| | | |
| | | |
| | | extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); |
| | | #ifdef HAVE_STRCMP |
| | | SDL_FORCE_INLINE int SDL_strcmp_inline(const char *str1, const char *str2) { return strcmp(str1, str2); } |
| | | #define SDL_strcmp SDL_strcmp_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); |
| | | #ifdef HAVE_STRNCMP |
| | | SDL_FORCE_INLINE int SDL_strncmp_inline(const char *str1, const char *str2, size_t maxlen) { return strncmp(str1, str2, maxlen); } |
| | | #define SDL_strncmp SDL_strncmp_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); |
| | | #ifdef HAVE_STRCASECMP |
| | | SDL_FORCE_INLINE int SDL_strcasecmp_inline(const char *str1, const char *str2) { return strcasecmp(str1, str2); } |
| | | #define SDL_strcasecmp SDL_strcasecmp_inline |
| | | #elif defined(HAVE__STRICMP) |
| | | SDL_FORCE_INLINE int SDL_strcasecmp_inline(const char *str1, const char *str2) { return _stricmp(str1, str2); } |
| | | #define SDL_strcasecmp SDL_strcasecmp_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); |
| | | #ifdef HAVE_STRNCASECMP |
| | | SDL_FORCE_INLINE int SDL_strncasecmp_inline(const char *str1, const char *str2, size_t len) { return strncasecmp(str1, str2, len); } |
| | | #define SDL_strncasecmp SDL_strncasecmp_inline |
| | | #elif defined(HAVE__STRNICMP) |
| | | SDL_FORCE_INLINE int SDL_strncasecmp_inline(const char *str1, const char *str2, size_t len) { return _strnicmp(str1, str2, len); } |
| | | #define SDL_strncasecmp SDL_strncasecmp_inline |
| | | #endif |
| | | |
| | | /* Not doing SDL_*_inline functions for these, because of the varargs. */ |
| | | extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt, ...); |
| | | #ifdef HAVE_SSCANF |
| | | #define SDL_sscanf sscanf |
| | | #endif |
| | | |
| | | extern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...); |
| | | #ifdef HAVE_SNPRINTF |
| | | #define SDL_snprintf snprintf |
| | | #endif |
| | | |
| | | extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap); |
| | | #ifdef HAVE_VSNPRINTF |
| | | SDL_FORCE_INLINE int SDL_vsnprintf_inline(char *text, size_t maxlen, const char *fmt, va_list ap) { return vsnprintf(text, maxlen, fmt, ap); } |
| | | #define SDL_vsnprintf SDL_vsnprintf_inline |
| | | #endif |
| | | |
| | | #ifndef HAVE_M_PI |
| | | #ifndef M_PI |
| | | #define M_PI 3.14159265358979323846264338327950288 /* pi */ |
| | | #endif |
| | | #endif |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_atan(double x); |
| | | #ifdef HAVE_ATAN |
| | | SDL_FORCE_INLINE double SDL_atan_inline(double x) { return atan(x); } |
| | | #define SDL_atan SDL_atan_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_atan2(double x, double y); |
| | | #ifdef HAVE_ATAN2 |
| | | SDL_FORCE_INLINE double SDL_atan2_inline(double x, double y) { return atan2(x, y); } |
| | | #define SDL_atan2 SDL_atan2_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_ceil(double x); |
| | | #ifdef HAVE_CEIL |
| | | SDL_FORCE_INLINE double SDL_ceil_inline(double x) { return ceil(x); } |
| | | #else |
| | | SDL_FORCE_INLINE double SDL_ceil_inline(double x) { return (double)(int)((x)+0.5); } |
| | | #endif |
| | | #define SDL_ceil SDL_ceil_inline |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_copysign(double x, double y); |
| | | #ifdef HAVE_COPYSIGN |
| | | SDL_FORCE_INLINE double SDL_copysign_inline(double x, double y) { return copysign(x, y); } |
| | | #define SDL_copysign SDL_copysign_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_cos(double x); |
| | | #ifdef HAVE_COS |
| | | SDL_FORCE_INLINE double SDL_cos_inline(double x) { return cos(x); } |
| | | #define SDL_cos SDL_cos_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC float SDLCALL SDL_cosf(float x); |
| | | #ifdef HAVE_COSF |
| | | SDL_FORCE_INLINE float SDL_cosf_inline(float x) { return cosf(x); } |
| | | #else |
| | | SDL_FORCE_INLINE float SDL_cosf_inline(float x) { return (float)SDL_cos((double)x); } |
| | | #endif |
| | | #define SDL_cosf SDL_cosf_inline |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_fabs(double x); |
| | | #ifdef HAVE_FABS |
| | | SDL_FORCE_INLINE double SDL_fabs_inline(double x) { return fabs(x); } |
| | | #define SDL_fabs SDL_fabs_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_floor(double x); |
| | | #ifdef HAVE_FLOOR |
| | | SDL_FORCE_INLINE double SDL_floor_inline(double x) { return floor(x); } |
| | | #define SDL_floor SDL_floor_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_log(double x); |
| | | #ifdef HAVE_LOG |
| | | SDL_FORCE_INLINE double SDL_log_inline(double x) { return log(x); } |
| | | #define SDL_log SDL_log_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_pow(double x, double y); |
| | | #ifdef HAVE_POW |
| | | SDL_FORCE_INLINE double SDL_pow_inline(double x, double y) { return pow(x, y); } |
| | | #define SDL_pow SDL_pow_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); |
| | | #ifdef HAVE_SCALBN |
| | | SDL_FORCE_INLINE double SDL_scalbn_inline(double x, int n) { return scalbn(x, n); } |
| | | #define SDL_scalbn SDL_scalbn_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_sin(double x); |
| | | #ifdef HAVE_SIN |
| | | SDL_FORCE_INLINE double SDL_sin_inline(double x) { return sin(x); } |
| | | #define SDL_sin SDL_sin_inline |
| | | #endif |
| | | |
| | | extern DECLSPEC float SDLCALL SDL_sinf(float x); |
| | | #ifdef HAVE_SINF |
| | | SDL_FORCE_INLINE float SDL_sinf_inline(float x) { return sinf(x); } |
| | | #else |
| | | SDL_FORCE_INLINE float SDL_sinf_inline(float x) { return (float)SDL_sin((double)x); } |
| | | #endif |
| | | #define SDL_sinf SDL_sinf_inline |
| | | |
| | | extern DECLSPEC double SDLCALL SDL_sqrt(double x); |
| | | #ifdef HAVE_SQRT |
| | | SDL_FORCE_INLINE double SDL_sqrt_inline(double x) { return sqrt(x); } |
| | | #define SDL_sqrt SDL_sqrt_inline |
| | | #endif |
| | | |
| | | /* The SDL implementation of iconv() returns these error codes */ |
| | | #define SDL_ICONV_ERROR (size_t)-1 |
| | | #define SDL_ICONV_E2BIG (size_t)-2 |
| | | #define SDL_ICONV_EILSEQ (size_t)-3 |
| | | #define SDL_ICONV_EINVAL (size_t)-4 |
| | | |
| | | /* SDL_iconv_* are now always real symbols/types, not macros or inlined. */ |
| | | typedef struct _SDL_iconv_t *SDL_iconv_t; |
| | | extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, |
| | | const char *fromcode); |
| | | extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); |
| | | extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, |
| | | size_t * inbytesleft, char **outbuf, |
| | | size_t * outbytesleft); |
| | | /** |
| | | * This function converts a string between encodings in one pass, returning a |
| | | * string that must be freed with SDL_free() or NULL on error. |
| | | */ |
| | | extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, |
| | | const char *fromcode, |
| | | const char *inbuf, |
| | | size_t inbytesleft); |
| | | #define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) |
| | | #define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) |
| | | #define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_stdinc_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_surface.h |
| | | * |
| | | * Header file for ::SDL_surface definition and management functions. |
| | | */ |
| | | |
| | | #ifndef _SDL_surface_h |
| | | #define _SDL_surface_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_pixels.h" |
| | | #include "SDL_rect.h" |
| | | #include "SDL_blendmode.h" |
| | | #include "SDL_rwops.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \name Surface flags |
| | | * |
| | | * These are the currently supported flags for the ::SDL_surface. |
| | | * |
| | | * \internal |
| | | * Used internally (read-only). |
| | | */ |
| | | /*@{*/ |
| | | #define SDL_SWSURFACE 0 /**< Just here for compatibility */ |
| | | #define SDL_PREALLOC 0x00000001 /**< Surface uses preallocated memory */ |
| | | #define SDL_RLEACCEL 0x00000002 /**< Surface is RLE encoded */ |
| | | #define SDL_DONTFREE 0x00000004 /**< Surface is referenced internally */ |
| | | /*@}*//*Surface flags*/ |
| | | |
| | | /** |
| | | * Evaluates to true if the surface needs to be locked before access. |
| | | */ |
| | | #define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0) |
| | | |
| | | /** |
| | | * \brief A collection of pixels used in software blitting. |
| | | * |
| | | * \note This structure should be treated as read-only, except for \c pixels, |
| | | * which, if not NULL, contains the raw pixel data for the surface. |
| | | */ |
| | | typedef struct SDL_Surface |
| | | { |
| | | Uint32 flags; /**< Read-only */ |
| | | SDL_PixelFormat *format; /**< Read-only */ |
| | | int w, h; /**< Read-only */ |
| | | int pitch; /**< Read-only */ |
| | | void *pixels; /**< Read-write */ |
| | | |
| | | /** Application data associated with the surface */ |
| | | void *userdata; /**< Read-write */ |
| | | |
| | | /** information needed for surfaces requiring locks */ |
| | | int locked; /**< Read-only */ |
| | | void *lock_data; /**< Read-only */ |
| | | |
| | | /** clipping information */ |
| | | SDL_Rect clip_rect; /**< Read-only */ |
| | | |
| | | /** info for fast blit mapping to other surfaces */ |
| | | struct SDL_BlitMap *map; /**< Private */ |
| | | |
| | | /** Reference count -- used when freeing surface */ |
| | | int refcount; /**< Read-mostly */ |
| | | } SDL_Surface; |
| | | |
| | | /** |
| | | * \brief The type of function used for surface blitting functions. |
| | | */ |
| | | typedef int (*SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, |
| | | struct SDL_Surface * dst, SDL_Rect * dstrect); |
| | | |
| | | /** |
| | | * Allocate and free an RGB surface. |
| | | * |
| | | * If the depth is 4 or 8 bits, an empty palette is allocated for the surface. |
| | | * If the depth is greater than 8 bits, the pixel format is set using the |
| | | * flags '[RGB]mask'. |
| | | * |
| | | * If the function runs out of memory, it will return NULL. |
| | | * |
| | | * \param flags The \c flags are obsolete and should be set to 0. |
| | | * \param width The width in pixels of the surface to create. |
| | | * \param height The height in pixels of the surface to create. |
| | | * \param depth The depth in bits of the surface to create. |
| | | * \param Rmask The red mask of the surface to create. |
| | | * \param Gmask The green mask of the surface to create. |
| | | * \param Bmask The blue mask of the surface to create. |
| | | * \param Amask The alpha mask of the surface to create. |
| | | */ |
| | | extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface |
| | | (Uint32 flags, int width, int height, int depth, |
| | | Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); |
| | | extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, |
| | | int width, |
| | | int height, |
| | | int depth, |
| | | int pitch, |
| | | Uint32 Rmask, |
| | | Uint32 Gmask, |
| | | Uint32 Bmask, |
| | | Uint32 Amask); |
| | | extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface); |
| | | |
| | | /** |
| | | * \brief Set the palette used by a surface. |
| | | * |
| | | * \return 0, or -1 if the surface format doesn't use a palette. |
| | | * |
| | | * \note A single palette can be shared with many surfaces. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface * surface, |
| | | SDL_Palette * palette); |
| | | |
| | | /** |
| | | * \brief Sets up a surface for directly accessing the pixels. |
| | | * |
| | | * Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write |
| | | * to and read from \c surface->pixels, using the pixel format stored in |
| | | * \c surface->format. Once you are done accessing the surface, you should |
| | | * use SDL_UnlockSurface() to release it. |
| | | * |
| | | * Not all surfaces require locking. If SDL_MUSTLOCK(surface) evaluates |
| | | * to 0, then you can read and write to the surface at any time, and the |
| | | * pixel format of the surface will not change. |
| | | * |
| | | * No operating system or library calls should be made between lock/unlock |
| | | * pairs, as critical system locks may be held during this time. |
| | | * |
| | | * SDL_LockSurface() returns 0, or -1 if the surface couldn't be locked. |
| | | * |
| | | * \sa SDL_UnlockSurface() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface * surface); |
| | | /** \sa SDL_LockSurface() */ |
| | | extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface * surface); |
| | | |
| | | /** |
| | | * Load a surface from a seekable SDL data stream (memory or file). |
| | | * |
| | | * If \c freesrc is non-zero, the stream will be closed after being read. |
| | | * |
| | | * The new surface should be freed with SDL_FreeSurface(). |
| | | * |
| | | * \return the new surface, or NULL if there was an error. |
| | | */ |
| | | extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP_RW(SDL_RWops * src, |
| | | int freesrc); |
| | | |
| | | /** |
| | | * Load a surface from a file. |
| | | * |
| | | * Convenience macro. |
| | | */ |
| | | #define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) |
| | | |
| | | /** |
| | | * Save a surface to a seekable SDL data stream (memory or file). |
| | | * |
| | | * If \c freedst is non-zero, the stream will be closed after being written. |
| | | * |
| | | * \return 0 if successful or -1 if there was an error. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SaveBMP_RW |
| | | (SDL_Surface * surface, SDL_RWops * dst, int freedst); |
| | | |
| | | /** |
| | | * Save a surface to a file. |
| | | * |
| | | * Convenience macro. |
| | | */ |
| | | #define SDL_SaveBMP(surface, file) \ |
| | | SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) |
| | | |
| | | /** |
| | | * \brief Sets the RLE acceleration hint for a surface. |
| | | * |
| | | * \return 0 on success, or -1 if the surface is not valid |
| | | * |
| | | * \note If RLE is enabled, colorkey and alpha blending blits are much faster, |
| | | * but the surface must be locked before directly accessing the pixels. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface * surface, |
| | | int flag); |
| | | |
| | | /** |
| | | * \brief Sets the color key (transparent pixel) in a blittable surface. |
| | | * |
| | | * \param surface The surface to update |
| | | * \param flag Non-zero to enable colorkey and 0 to disable colorkey |
| | | * \param key The transparent pixel in the native surface format |
| | | * |
| | | * \return 0 on success, or -1 if the surface is not valid |
| | | * |
| | | * You can pass SDL_RLEACCEL to enable RLE accelerated blits. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetColorKey(SDL_Surface * surface, |
| | | int flag, Uint32 key); |
| | | |
| | | /** |
| | | * \brief Gets the color key (transparent pixel) in a blittable surface. |
| | | * |
| | | * \param surface The surface to update |
| | | * \param key A pointer filled in with the transparent pixel in the native |
| | | * surface format |
| | | * |
| | | * \return 0 on success, or -1 if the surface is not valid or colorkey is not |
| | | * enabled. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetColorKey(SDL_Surface * surface, |
| | | Uint32 * key); |
| | | |
| | | /** |
| | | * \brief Set an additional color value used in blit operations. |
| | | * |
| | | * \param surface The surface to update. |
| | | * \param r The red color value multiplied into blit operations. |
| | | * \param g The green color value multiplied into blit operations. |
| | | * \param b The blue color value multiplied into blit operations. |
| | | * |
| | | * \return 0 on success, or -1 if the surface is not valid. |
| | | * |
| | | * \sa SDL_GetSurfaceColorMod() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetSurfaceColorMod(SDL_Surface * surface, |
| | | Uint8 r, Uint8 g, Uint8 b); |
| | | |
| | | |
| | | /** |
| | | * \brief Get the additional color value used in blit operations. |
| | | * |
| | | * \param surface The surface to query. |
| | | * \param r A pointer filled in with the current red color value. |
| | | * \param g A pointer filled in with the current green color value. |
| | | * \param b A pointer filled in with the current blue color value. |
| | | * |
| | | * \return 0 on success, or -1 if the surface is not valid. |
| | | * |
| | | * \sa SDL_SetSurfaceColorMod() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetSurfaceColorMod(SDL_Surface * surface, |
| | | Uint8 * r, Uint8 * g, |
| | | Uint8 * b); |
| | | |
| | | /** |
| | | * \brief Set an additional alpha value used in blit operations. |
| | | * |
| | | * \param surface The surface to update. |
| | | * \param alpha The alpha value multiplied into blit operations. |
| | | * |
| | | * \return 0 on success, or -1 if the surface is not valid. |
| | | * |
| | | * \sa SDL_GetSurfaceAlphaMod() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetSurfaceAlphaMod(SDL_Surface * surface, |
| | | Uint8 alpha); |
| | | |
| | | /** |
| | | * \brief Get the additional alpha value used in blit operations. |
| | | * |
| | | * \param surface The surface to query. |
| | | * \param alpha A pointer filled in with the current alpha value. |
| | | * |
| | | * \return 0 on success, or -1 if the surface is not valid. |
| | | * |
| | | * \sa SDL_SetSurfaceAlphaMod() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetSurfaceAlphaMod(SDL_Surface * surface, |
| | | Uint8 * alpha); |
| | | |
| | | /** |
| | | * \brief Set the blend mode used for blit operations. |
| | | * |
| | | * \param surface The surface to update. |
| | | * \param blendMode ::SDL_BlendMode to use for blit blending. |
| | | * |
| | | * \return 0 on success, or -1 if the parameters are not valid. |
| | | * |
| | | * \sa SDL_GetSurfaceBlendMode() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface * surface, |
| | | SDL_BlendMode blendMode); |
| | | |
| | | /** |
| | | * \brief Get the blend mode used for blit operations. |
| | | * |
| | | * \param surface The surface to query. |
| | | * \param blendMode A pointer filled in with the current blend mode. |
| | | * |
| | | * \return 0 on success, or -1 if the surface is not valid. |
| | | * |
| | | * \sa SDL_SetSurfaceBlendMode() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface * surface, |
| | | SDL_BlendMode *blendMode); |
| | | |
| | | /** |
| | | * Sets the clipping rectangle for the destination surface in a blit. |
| | | * |
| | | * If the clip rectangle is NULL, clipping will be disabled. |
| | | * |
| | | * If the clip rectangle doesn't intersect the surface, the function will |
| | | * return SDL_FALSE and blits will be completely clipped. Otherwise the |
| | | * function returns SDL_TRUE and blits to the surface will be clipped to |
| | | * the intersection of the surface area and the clipping rectangle. |
| | | * |
| | | * Note that blits are automatically clipped to the edges of the source |
| | | * and destination surfaces. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface * surface, |
| | | const SDL_Rect * rect); |
| | | |
| | | /** |
| | | * Gets the clipping rectangle for the destination surface in a blit. |
| | | * |
| | | * \c rect must be a pointer to a valid rectangle which will be filled |
| | | * with the correct values. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface, |
| | | SDL_Rect * rect); |
| | | |
| | | /** |
| | | * Creates a new surface of the specified format, and then copies and maps |
| | | * the given surface to it so the blit of the converted surface will be as |
| | | * fast as possible. If this function fails, it returns NULL. |
| | | * |
| | | * The \c flags parameter is passed to SDL_CreateRGBSurface() and has those |
| | | * semantics. You can also pass ::SDL_RLEACCEL in the flags parameter and |
| | | * SDL will try to RLE accelerate colorkey and alpha blits in the resulting |
| | | * surface. |
| | | */ |
| | | extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface |
| | | (SDL_Surface * src, SDL_PixelFormat * fmt, Uint32 flags); |
| | | extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat |
| | | (SDL_Surface * src, Uint32 pixel_format, Uint32 flags); |
| | | |
| | | /** |
| | | * \brief Copy a block of pixels of one format to another format |
| | | * |
| | | * \return 0 on success, or -1 if there was an error |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, |
| | | Uint32 src_format, |
| | | const void * src, int src_pitch, |
| | | Uint32 dst_format, |
| | | void * dst, int dst_pitch); |
| | | |
| | | /** |
| | | * Performs a fast fill of the given rectangle with \c color. |
| | | * |
| | | * If \c rect is NULL, the whole surface will be filled with \c color. |
| | | * |
| | | * The color should be a pixel of the format used by the surface, and |
| | | * can be generated by the SDL_MapRGB() function. |
| | | * |
| | | * \return 0 on success, or -1 on error. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_FillRect |
| | | (SDL_Surface * dst, const SDL_Rect * rect, Uint32 color); |
| | | extern DECLSPEC int SDLCALL SDL_FillRects |
| | | (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color); |
| | | |
| | | /** |
| | | * Performs a fast blit from the source surface to the destination surface. |
| | | * |
| | | * This assumes that the source and destination rectangles are |
| | | * the same size. If either \c srcrect or \c dstrect are NULL, the entire |
| | | * surface (\c src or \c dst) is copied. The final blit rectangles are saved |
| | | * in \c srcrect and \c dstrect after all clipping is performed. |
| | | * |
| | | * \return If the blit is successful, it returns 0, otherwise it returns -1. |
| | | * |
| | | * The blit function should not be called on a locked surface. |
| | | * |
| | | * The blit semantics for surfaces with and without alpha and colorkey |
| | | * are defined as follows: |
| | | * \verbatim |
| | | RGBA->RGB: |
| | | SDL_SRCALPHA set: |
| | | alpha-blend (using alpha-channel). |
| | | SDL_SRCCOLORKEY ignored. |
| | | SDL_SRCALPHA not set: |
| | | copy RGB. |
| | | if SDL_SRCCOLORKEY set, only copy the pixels matching the |
| | | RGB values of the source color key, ignoring alpha in the |
| | | comparison. |
| | | |
| | | RGB->RGBA: |
| | | SDL_SRCALPHA set: |
| | | alpha-blend (using the source per-surface alpha value); |
| | | set destination alpha to opaque. |
| | | SDL_SRCALPHA not set: |
| | | copy RGB, set destination alpha to source per-surface alpha value. |
| | | both: |
| | | if SDL_SRCCOLORKEY set, only copy the pixels matching the |
| | | source color key. |
| | | |
| | | RGBA->RGBA: |
| | | SDL_SRCALPHA set: |
| | | alpha-blend (using the source alpha channel) the RGB values; |
| | | leave destination alpha untouched. [Note: is this correct?] |
| | | SDL_SRCCOLORKEY ignored. |
| | | SDL_SRCALPHA not set: |
| | | copy all of RGBA to the destination. |
| | | if SDL_SRCCOLORKEY set, only copy the pixels matching the |
| | | RGB values of the source color key, ignoring alpha in the |
| | | comparison. |
| | | |
| | | RGB->RGB: |
| | | SDL_SRCALPHA set: |
| | | alpha-blend (using the source per-surface alpha value). |
| | | SDL_SRCALPHA not set: |
| | | copy RGB. |
| | | both: |
| | | if SDL_SRCCOLORKEY set, only copy the pixels matching the |
| | | source color key. |
| | | \endverbatim |
| | | * |
| | | * You should call SDL_BlitSurface() unless you know exactly how SDL |
| | | * blitting works internally and how to use the other blit functions. |
| | | */ |
| | | #define SDL_BlitSurface SDL_UpperBlit |
| | | |
| | | /** |
| | | * This is the public blit function, SDL_BlitSurface(), and it performs |
| | | * rectangle validation and clipping before passing it to SDL_LowerBlit() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_UpperBlit |
| | | (SDL_Surface * src, const SDL_Rect * srcrect, |
| | | SDL_Surface * dst, SDL_Rect * dstrect); |
| | | |
| | | /** |
| | | * This is a semi-private blit function and it performs low-level surface |
| | | * blitting only. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_LowerBlit |
| | | (SDL_Surface * src, SDL_Rect * srcrect, |
| | | SDL_Surface * dst, SDL_Rect * dstrect); |
| | | |
| | | /** |
| | | * \brief Perform a fast, low quality, stretch blit between two surfaces of the |
| | | * same pixel format. |
| | | * |
| | | * \note This function uses a static buffer, and is not thread-safe. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface * src, |
| | | const SDL_Rect * srcrect, |
| | | SDL_Surface * dst, |
| | | const SDL_Rect * dstrect); |
| | | |
| | | #define SDL_BlitScaled SDL_UpperBlitScaled |
| | | |
| | | /** |
| | | * This is the public scaled blit function, SDL_BlitScaled(), and it performs |
| | | * rectangle validation and clipping before passing it to SDL_LowerBlitScaled() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_UpperBlitScaled |
| | | (SDL_Surface * src, const SDL_Rect * srcrect, |
| | | SDL_Surface * dst, SDL_Rect * dstrect); |
| | | |
| | | /** |
| | | * This is a semi-private blit function and it performs low-level surface |
| | | * scaled blitting only. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_LowerBlitScaled |
| | | (SDL_Surface * src, SDL_Rect * srcrect, |
| | | SDL_Surface * dst, SDL_Rect * dstrect); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_surface_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_system.h |
| | | * |
| | | * Include file for platform specific SDL API functions |
| | | */ |
| | | |
| | | #ifndef _SDL_system_h |
| | | #define _SDL_system_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | |
| | | #if defined(__IPHONEOS__) && __IPHONEOS__ |
| | | #include "SDL_video.h" |
| | | #include "SDL_keyboard.h" |
| | | #endif |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* Platform specific functions for iOS */ |
| | | #if defined(__IPHONEOS__) && __IPHONEOS__ |
| | | |
| | | extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); |
| | | extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); |
| | | |
| | | #endif /* __IPHONEOS__ */ |
| | | |
| | | |
| | | /* Platform specific functions for Android */ |
| | | #if defined(__ANDROID__) && __ANDROID__ |
| | | |
| | | /* Get the JNI environment for the current thread |
| | | This returns JNIEnv*, but the prototype is void* so we don't need jni.h |
| | | */ |
| | | extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(); |
| | | |
| | | /* Get the SDL Activity object for the application |
| | | This returns jobject, but the prototype is void* so we don't need jni.h |
| | | The jobject returned by SDL_AndroidGetActivity is a local reference. |
| | | It is the caller's responsibility to properly release it |
| | | (using LocalReferenceHolder or manually with env->DeleteLocalRef) |
| | | */ |
| | | extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(); |
| | | |
| | | /* See the official Android developer guide for more information: |
| | | http://developer.android.com/guide/topics/data/data-storage.html |
| | | */ |
| | | #define SDL_ANDROID_EXTERNAL_STORAGE_READ 0x01 |
| | | #define SDL_ANDROID_EXTERNAL_STORAGE_WRITE 0x02 |
| | | |
| | | /* Get the path used for internal storage for this application. |
| | | This path is unique to your application and cannot be written to |
| | | by other applications. |
| | | */ |
| | | extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(); |
| | | |
| | | /* Get the current state of external storage, a bitmask of these values: |
| | | SDL_ANDROID_EXTERNAL_STORAGE_READ |
| | | SDL_ANDROID_EXTERNAL_STORAGE_WRITE |
| | | If external storage is currently unavailable, this will return 0. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(); |
| | | |
| | | /* Get the path used for external storage for this application. |
| | | This path is unique to your application, but is public and can be |
| | | written to by other applications. |
| | | */ |
| | | extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(); |
| | | |
| | | #endif /* __ANDROID__ */ |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_system_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_syswm.h |
| | | * |
| | | * Include file for SDL custom system window manager hooks. |
| | | */ |
| | | |
| | | #ifndef _SDL_syswm_h |
| | | #define _SDL_syswm_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | #include "SDL_video.h" |
| | | #include "SDL_version.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \file SDL_syswm.h |
| | | * |
| | | * Your application has access to a special type of event ::SDL_SYSWMEVENT, |
| | | * which contains window-manager specific information and arrives whenever |
| | | * an unhandled window event occurs. This event is ignored by default, but |
| | | * you can enable it with SDL_EventState(). |
| | | */ |
| | | #ifdef SDL_PROTOTYPES_ONLY |
| | | struct SDL_SysWMinfo; |
| | | #else |
| | | |
| | | #if defined(SDL_VIDEO_DRIVER_WINDOWS) |
| | | #define WIN32_LEAN_AND_MEAN |
| | | #include <windows.h> |
| | | #endif |
| | | |
| | | /* This is the structure for custom window manager events */ |
| | | #if defined(SDL_VIDEO_DRIVER_X11) |
| | | #if defined(__APPLE__) && defined(__MACH__) |
| | | /* conflicts with Quickdraw.h */ |
| | | #define Cursor X11Cursor |
| | | #endif |
| | | |
| | | #include <X11/Xlib.h> |
| | | #include <X11/Xatom.h> |
| | | |
| | | #if defined(__APPLE__) && defined(__MACH__) |
| | | /* matches the re-define above */ |
| | | #undef Cursor |
| | | #endif |
| | | |
| | | #endif /* defined(SDL_VIDEO_DRIVER_X11) */ |
| | | |
| | | #if defined(SDL_VIDEO_DRIVER_DIRECTFB) |
| | | #include <directfb.h> |
| | | #endif |
| | | |
| | | #if defined(SDL_VIDEO_DRIVER_COCOA) |
| | | #ifdef __OBJC__ |
| | | #include <Cocoa/Cocoa.h> |
| | | #else |
| | | typedef struct _NSWindow NSWindow; |
| | | typedef struct _NSView NSView; |
| | | #endif |
| | | #endif |
| | | |
| | | #if defined(SDL_VIDEO_DRIVER_UIKIT) |
| | | #ifdef __OBJC__ |
| | | #include <UIKit/UIKit.h> |
| | | #else |
| | | typedef struct _UIWindow UIWindow; |
| | | #endif |
| | | #endif |
| | | |
| | | /** |
| | | * These are the various supported windowing subsystems |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_SYSWM_UNKNOWN, |
| | | SDL_SYSWM_WINDOWS, |
| | | SDL_SYSWM_X11, |
| | | SDL_SYSWM_DIRECTFB, |
| | | SDL_SYSWM_COCOA, |
| | | SDL_SYSWM_UIKIT, |
| | | } SDL_SYSWM_TYPE; |
| | | |
| | | /** |
| | | * The custom event structure. |
| | | */ |
| | | struct SDL_SysWMmsg |
| | | { |
| | | SDL_version version; |
| | | SDL_SYSWM_TYPE subsystem; |
| | | union |
| | | { |
| | | #if defined(SDL_VIDEO_DRIVER_WINDOWS) |
| | | struct { |
| | | HWND hwnd; /**< The window for the message */ |
| | | UINT msg; /**< The type of message */ |
| | | WPARAM wParam; /**< WORD message parameter */ |
| | | LPARAM lParam; /**< LONG message parameter */ |
| | | } win; |
| | | #endif |
| | | #if defined(SDL_VIDEO_DRIVER_X11) |
| | | struct { |
| | | XEvent event; |
| | | } x11; |
| | | #endif |
| | | #if defined(SDL_VIDEO_DRIVER_DIRECTFB) |
| | | struct { |
| | | DFBEvent event; |
| | | } dfb; |
| | | #endif |
| | | #if defined(SDL_VIDEO_DRIVER_COCOA) |
| | | struct |
| | | { |
| | | /* No Cocoa window events yet */ |
| | | } cocoa; |
| | | #endif |
| | | #if defined(SDL_VIDEO_DRIVER_UIKIT) |
| | | struct |
| | | { |
| | | /* No UIKit window events yet */ |
| | | } uikit; |
| | | #endif |
| | | /* Can't have an empty union */ |
| | | int dummy; |
| | | } msg; |
| | | }; |
| | | |
| | | /** |
| | | * The custom window manager information structure. |
| | | * |
| | | * When this structure is returned, it holds information about which |
| | | * low level system it is using, and will be one of SDL_SYSWM_TYPE. |
| | | */ |
| | | struct SDL_SysWMinfo |
| | | { |
| | | SDL_version version; |
| | | SDL_SYSWM_TYPE subsystem; |
| | | union |
| | | { |
| | | #if defined(SDL_VIDEO_DRIVER_WINDOWS) |
| | | struct |
| | | { |
| | | HWND window; /**< The window handle */ |
| | | } win; |
| | | #endif |
| | | #if defined(SDL_VIDEO_DRIVER_X11) |
| | | struct |
| | | { |
| | | Display *display; /**< The X11 display */ |
| | | Window window; /**< The X11 window */ |
| | | } x11; |
| | | #endif |
| | | #if defined(SDL_VIDEO_DRIVER_DIRECTFB) |
| | | struct |
| | | { |
| | | IDirectFB *dfb; /**< The directfb main interface */ |
| | | IDirectFBWindow *window; /**< The directfb window handle */ |
| | | IDirectFBSurface *surface; /**< The directfb client surface */ |
| | | } dfb; |
| | | #endif |
| | | #if defined(SDL_VIDEO_DRIVER_COCOA) |
| | | struct |
| | | { |
| | | NSWindow *window; /* The Cocoa window */ |
| | | NSView *view; /* The Cocoa view */ |
| | | } cocoa; |
| | | #endif |
| | | #if defined(SDL_VIDEO_DRIVER_UIKIT) |
| | | struct |
| | | { |
| | | UIWindow *window; /* The UIKit window */ |
| | | } uikit; |
| | | #endif |
| | | /* Can't have an empty union */ |
| | | int dummy; |
| | | } info; |
| | | }; |
| | | |
| | | #endif /* SDL_PROTOTYPES_ONLY */ |
| | | |
| | | typedef struct SDL_SysWMinfo SDL_SysWMinfo; |
| | | |
| | | /* Function prototypes */ |
| | | /** |
| | | * \brief This function allows access to driver-dependent window information. |
| | | * |
| | | * \param window The window about which information is being requested |
| | | * \param info This structure must be initialized with the SDL version, and is |
| | | * then filled in with information about the given window. |
| | | * |
| | | * \return SDL_TRUE if the function is implemented and the version member of |
| | | * the \c info struct is valid, SDL_FALSE otherwise. |
| | | * |
| | | * You typically use this function like this: |
| | | * \code |
| | | * SDL_SysWMinfo info; |
| | | * SDL_VERSION(&info.version); |
| | | * if ( SDL_GetWindowWMInfo(&info) ) { ... } |
| | | * \endcode |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window, |
| | | SDL_SysWMinfo * info); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_syswm_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_test.h |
| | | * |
| | | * Include file for SDL test framework. |
| | | * |
| | | * This code is a part of the SDL2_test library, not the main SDL library. |
| | | */ |
| | | |
| | | #ifndef _SDL_test_h |
| | | #define _SDL_test_h |
| | | |
| | | #include "SDL.h" |
| | | #include "SDL_test_common.h" |
| | | #include "SDL_test_font.h" |
| | | #include "SDL_test_random.h" |
| | | #include "SDL_test_fuzzer.h" |
| | | #include "SDL_test_crc32.h" |
| | | #include "SDL_test_md5.h" |
| | | #include "SDL_test_log.h" |
| | | #include "SDL_test_assert.h" |
| | | #include "SDL_test_harness.h" |
| | | #include "SDL_test_images.h" |
| | | #include "SDL_test_compare.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* Global definitions */ |
| | | |
| | | /* |
| | | * Note: Maximum size of SDLTest log message is less than SDLs limit |
| | | * to ensure we can fit additional information such as the timestamp. |
| | | */ |
| | | #define SDLTEST_MAX_LOGMESSAGE_LENGTH 3584 |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_test_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_test_assert.h |
| | | * |
| | | * Include file for SDL test framework. |
| | | * |
| | | * This code is a part of the SDL2_test library, not the main SDL library. |
| | | */ |
| | | |
| | | /* |
| | | * |
| | | * Assert API for test code and test cases |
| | | * |
| | | */ |
| | | |
| | | #ifndef _SDL_test_assert_h |
| | | #define _SDL_test_assert_h |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Fails the assert. |
| | | */ |
| | | #define ASSERT_FAIL 0 |
| | | |
| | | /** |
| | | * \brief Passes the assert. |
| | | */ |
| | | #define ASSERT_PASS 1 |
| | | |
| | | /** |
| | | * \brief Assert that logs and break execution flow on failures. |
| | | * |
| | | * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). |
| | | * \param assertDescription Message to log with the assert describing it. |
| | | */ |
| | | void SDLTest_Assert(int assertCondition, const char *assertDescription, ...); |
| | | |
| | | /** |
| | | * \brief Assert for test cases that logs but does not break execution flow on failures. Updates assertion counters. |
| | | * |
| | | * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). |
| | | * \param assertDescription Message to log with the assert describing it. |
| | | * |
| | | * \returns Returns the assertCondition so it can be used to externally to break execution flow if desired. |
| | | */ |
| | | int SDLTest_AssertCheck(int assertCondition, const char *assertDescription, ...); |
| | | |
| | | /** |
| | | * \brief Explicitely pass without checking an assertion condition. Updates assertion counter. |
| | | * |
| | | * \param assertDescription Message to log with the assert describing it. |
| | | */ |
| | | void SDLTest_AssertPass(const char *assertDescription, ...); |
| | | |
| | | /** |
| | | * \brief Resets the assert summary counters to zero. |
| | | */ |
| | | void SDLTest_ResetAssertSummary(); |
| | | |
| | | /** |
| | | * \brief Logs summary of all assertions (total, pass, fail) since last reset as INFO or ERROR. |
| | | */ |
| | | void SDLTest_LogAssertSummary(); |
| | | |
| | | |
| | | /** |
| | | * \brief Converts the current assert summary state to a test result. |
| | | * |
| | | * \returns TEST_RESULT_PASSED, TEST_RESULT_FAILED, or TEST_RESULT_NO_ASSERT |
| | | */ |
| | | int SDLTest_AssertSummaryToTestResult(); |
| | | |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_test_assert_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_test_common.h |
| | | * |
| | | * Include file for SDL test framework. |
| | | * |
| | | * This code is a part of the SDL2_test library, not the main SDL library. |
| | | */ |
| | | |
| | | /* Ported from original test\common.h file. */ |
| | | |
| | | #ifndef _SDL_test_common_h |
| | | #define _SDL_test_common_h |
| | | |
| | | #include "SDL.h" |
| | | |
| | | #if defined(__PSP__) |
| | | #define DEFAULT_WINDOW_WIDTH 480 |
| | | #define DEFAULT_WINDOW_HEIGHT 272 |
| | | #else |
| | | #define DEFAULT_WINDOW_WIDTH 640 |
| | | #define DEFAULT_WINDOW_HEIGHT 480 |
| | | #endif |
| | | |
| | | #define VERBOSE_VIDEO 0x00000001 |
| | | #define VERBOSE_MODES 0x00000002 |
| | | #define VERBOSE_RENDER 0x00000004 |
| | | #define VERBOSE_EVENT 0x00000008 |
| | | #define VERBOSE_AUDIO 0x00000010 |
| | | |
| | | typedef struct |
| | | { |
| | | /* SDL init flags */ |
| | | char **argv; |
| | | Uint32 flags; |
| | | Uint32 verbose; |
| | | |
| | | /* Video info */ |
| | | const char *videodriver; |
| | | int display; |
| | | const char *window_title; |
| | | const char *window_icon; |
| | | Uint32 window_flags; |
| | | int window_x; |
| | | int window_y; |
| | | int window_w; |
| | | int window_h; |
| | | int window_minW; |
| | | int window_minH; |
| | | int window_maxW; |
| | | int window_maxH; |
| | | int logical_w; |
| | | int logical_h; |
| | | float scale; |
| | | int depth; |
| | | int refresh_rate; |
| | | int num_windows; |
| | | SDL_Window **windows; |
| | | |
| | | /* Renderer info */ |
| | | const char *renderdriver; |
| | | Uint32 render_flags; |
| | | SDL_bool skip_renderer; |
| | | SDL_Renderer **renderers; |
| | | |
| | | /* Audio info */ |
| | | const char *audiodriver; |
| | | SDL_AudioSpec audiospec; |
| | | |
| | | /* GL settings */ |
| | | int gl_red_size; |
| | | int gl_green_size; |
| | | int gl_blue_size; |
| | | int gl_alpha_size; |
| | | int gl_buffer_size; |
| | | int gl_depth_size; |
| | | int gl_stencil_size; |
| | | int gl_double_buffer; |
| | | int gl_accum_red_size; |
| | | int gl_accum_green_size; |
| | | int gl_accum_blue_size; |
| | | int gl_accum_alpha_size; |
| | | int gl_stereo; |
| | | int gl_multisamplebuffers; |
| | | int gl_multisamplesamples; |
| | | int gl_retained_backing; |
| | | int gl_accelerated; |
| | | int gl_major_version; |
| | | int gl_minor_version; |
| | | int gl_debug; |
| | | } SDLTest_CommonState; |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* Function prototypes */ |
| | | |
| | | /** |
| | | * \brief Parse command line parameters and create common state. |
| | | * |
| | | * \param argv Array of command line parameters |
| | | * \param flags Flags indicating which subsystem to initialize (i.e. SDL_INIT_VIDEO | SDL_INIT_AUDIO) |
| | | * |
| | | * \returns Returns a newly allocated common state object. |
| | | */ |
| | | SDLTest_CommonState *SDLTest_CommonCreateState(char **argv, Uint32 flags); |
| | | |
| | | /** |
| | | * \brief Process one common argument. |
| | | * |
| | | * \param state The common state describing the test window to create. |
| | | * \param index The index of the argument to process in argv[]. |
| | | * |
| | | * \returns The number of arguments processed (i.e. 1 for --fullscreen, 2 for --video [videodriver], or -1 on error. |
| | | */ |
| | | int SDLTest_CommonArg(SDLTest_CommonState * state, int index); |
| | | |
| | | /** |
| | | * \brief Returns common usage information |
| | | * |
| | | * \param state The common state describing the test window to create. |
| | | * |
| | | * \returns String with usage information |
| | | */ |
| | | const char *SDLTest_CommonUsage(SDLTest_CommonState * state); |
| | | |
| | | /** |
| | | * \brief Open test window. |
| | | * |
| | | * \param state The common state describing the test window to create. |
| | | * |
| | | * \returns True if initialization succeeded, false otherwise |
| | | */ |
| | | SDL_bool SDLTest_CommonInit(SDLTest_CommonState * state); |
| | | |
| | | /** |
| | | * \brief Common event handler for test windows. |
| | | * |
| | | * \param state The common state used to create test window. |
| | | * \param event The event to handle. |
| | | * \param done Flag indicating we are done. |
| | | * |
| | | */ |
| | | void SDLTest_CommonEvent(SDLTest_CommonState * state, SDL_Event * event, int *done); |
| | | |
| | | /** |
| | | * \brief Close test window. |
| | | * |
| | | * \param state The common state used to create test window. |
| | | * |
| | | */ |
| | | void SDLTest_CommonQuit(SDLTest_CommonState * state); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_test_common_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_test_compare.h |
| | | * |
| | | * Include file for SDL test framework. |
| | | * |
| | | * This code is a part of the SDL2_test library, not the main SDL library. |
| | | */ |
| | | |
| | | /* |
| | | |
| | | Defines comparison functions (i.e. for surfaces). |
| | | |
| | | */ |
| | | |
| | | #ifndef _SDL_test_compare_h |
| | | #define _SDL_test_compare_h |
| | | |
| | | #include "SDL.h" |
| | | |
| | | #include "SDL_test_images.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Compares a surface and with reference image data for equality |
| | | * |
| | | * \param surface Surface used in comparison |
| | | * \param referenceSurface Test Surface used in comparison |
| | | * \param allowable_error Allowable difference (squared) in blending accuracy. |
| | | * |
| | | * \returns 0 if comparison succeeded, >0 (=number of pixels where comparison failed) if comparison failed, -1 if any of the surfaces were NULL, -2 if the surface sizes differ. |
| | | */ |
| | | int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, int allowable_error); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_test_compare_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_test_crc32.h |
| | | * |
| | | * Include file for SDL test framework. |
| | | * |
| | | * This code is a part of the SDL2_test library, not the main SDL library. |
| | | */ |
| | | |
| | | /* |
| | | |
| | | Implements CRC32 calculations (default output is Perl String::CRC32 compatible). |
| | | |
| | | */ |
| | | |
| | | #ifndef _SDL_test_crc32_h |
| | | #define _SDL_test_crc32_h |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | |
| | | /* ------------ Definitions --------- */ |
| | | |
| | | /* Definition shared by all CRC routines */ |
| | | |
| | | #ifndef CrcUint32 |
| | | #define CrcUint32 unsigned int |
| | | #endif |
| | | #ifndef CrcUint8 |
| | | #define CrcUint8 unsigned char |
| | | #endif |
| | | |
| | | #ifdef ORIGINAL_METHOD |
| | | #define CRC32_POLY 0x04c11db7 /* AUTODIN II, Ethernet, & FDDI */ |
| | | #else |
| | | #define CRC32_POLY 0xEDB88320 /* Perl String::CRC32 compatible */ |
| | | #endif |
| | | |
| | | /** |
| | | * Data structure for CRC32 (checksum) computation |
| | | */ |
| | | typedef struct { |
| | | CrcUint32 crc32_table[256]; /* CRC table */ |
| | | } SDLTest_Crc32Context; |
| | | |
| | | /* ---------- Function Prototypes ------------- */ |
| | | |
| | | /** |
| | | * /brief Initialize the CRC context |
| | | * |
| | | * Note: The function initializes the crc table required for all crc calculations. |
| | | * |
| | | * /param crcContext pointer to context variable |
| | | * |
| | | * /returns 0 for OK, -1 on error |
| | | * |
| | | */ |
| | | int SDLTest_Crc32Init(SDLTest_Crc32Context * crcContext); |
| | | |
| | | |
| | | /** |
| | | * /brief calculate a crc32 from a data block |
| | | * |
| | | * /param crcContext pointer to context variable |
| | | * /param inBuf input buffer to checksum |
| | | * /param inLen length of input buffer |
| | | * /param crc32 pointer to Uint32 to store the final CRC into |
| | | * |
| | | * /returns 0 for OK, -1 on error |
| | | * |
| | | */ |
| | | int SDLTest_crc32Calc(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); |
| | | |
| | | /* Same routine broken down into three steps */ |
| | | int SDLTest_Crc32CalcStart(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); |
| | | int SDLTest_Crc32CalcEnd(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); |
| | | int SDLTest_Crc32CalcBuffer(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); |
| | | |
| | | |
| | | /** |
| | | * /brief clean up CRC context |
| | | * |
| | | * /param crcContext pointer to context variable |
| | | * |
| | | * /returns 0 for OK, -1 on error |
| | | * |
| | | */ |
| | | |
| | | int SDLTest_Crc32Done(SDLTest_Crc32Context * crcContext); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_test_crc32_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_test_font.h |
| | | * |
| | | * Include file for SDL test framework. |
| | | * |
| | | * This code is a part of the SDL2_test library, not the main SDL library. |
| | | */ |
| | | |
| | | #ifndef _SDL_test_font_h |
| | | #define _SDL_test_font_h |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* Function prototypes */ |
| | | |
| | | /** |
| | | * \brief Draw a string in the currently set font. |
| | | * |
| | | * \param renderer The renderer to draw on. |
| | | * \param x The X coordinate of the upper left corner of the string. |
| | | * \param y The Y coordinate of the upper left corner of the string. |
| | | * \param s The string to draw. |
| | | * |
| | | * \returns Returns 0 on success, -1 on failure. |
| | | */ |
| | | int SDLTest_DrawString(SDL_Renderer * renderer, int x, int y, const char *s); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_test_font_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_test_fuzzer.h |
| | | * |
| | | * Include file for SDL test framework. |
| | | * |
| | | * This code is a part of the SDL2_test library, not the main SDL library. |
| | | */ |
| | | |
| | | /* |
| | | |
| | | Data generators for fuzzing test data in a reproducible way. |
| | | |
| | | */ |
| | | |
| | | #ifndef _SDL_test_fuzzer_h |
| | | #define _SDL_test_fuzzer_h |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | |
| | | /* |
| | | Based on GSOC code by Markus Kauppila <markus.kauppila@gmail.com> |
| | | */ |
| | | |
| | | |
| | | /** |
| | | * \file |
| | | * Note: The fuzzer implementation uses a static instance of random context |
| | | * internally which makes it thread-UNsafe. |
| | | */ |
| | | |
| | | /** |
| | | * Initializes the fuzzer for a test |
| | | * |
| | | * /param execKey Execution "Key" that initializes the random number generator uniquely for the test. |
| | | * |
| | | */ |
| | | void SDLTest_FuzzerInit(Uint64 execKey); |
| | | |
| | | |
| | | /** |
| | | * Returns a random Uint8 |
| | | * |
| | | * \returns Generated integer |
| | | */ |
| | | Uint8 SDLTest_RandomUint8(); |
| | | |
| | | /** |
| | | * Returns a random Sint8 |
| | | * |
| | | * \returns Generated signed integer |
| | | */ |
| | | Sint8 SDLTest_RandomSint8(); |
| | | |
| | | |
| | | /** |
| | | * Returns a random Uint16 |
| | | * |
| | | * \returns Generated integer |
| | | */ |
| | | Uint16 SDLTest_RandomUint16(); |
| | | |
| | | /** |
| | | * Returns a random Sint16 |
| | | * |
| | | * \returns Generated signed integer |
| | | */ |
| | | Sint16 SDLTest_RandomSint16(); |
| | | |
| | | |
| | | /** |
| | | * Returns a random integer |
| | | * |
| | | * \returns Generated integer |
| | | */ |
| | | Sint32 SDLTest_RandomSint32(); |
| | | |
| | | |
| | | /** |
| | | * Returns a random positive integer |
| | | * |
| | | * \returns Generated integer |
| | | */ |
| | | Uint32 SDLTest_RandomUint32(); |
| | | |
| | | /** |
| | | * Returns random Uint64. |
| | | * |
| | | * \returns Generated integer |
| | | */ |
| | | Uint64 SDLTest_RandomUint64(); |
| | | |
| | | |
| | | /** |
| | | * Returns random Sint64. |
| | | * |
| | | * \returns Generated signed integer |
| | | */ |
| | | Sint64 SDLTest_RandomSint64(); |
| | | |
| | | /** |
| | | * \returns random float in range [0.0 - 1.0[ |
| | | */ |
| | | float SDLTest_RandomUnitFloat(); |
| | | |
| | | /** |
| | | * \returns random double in range [0.0 - 1.0[ |
| | | */ |
| | | double SDLTest_RandomUnitDouble(); |
| | | |
| | | /** |
| | | * \returns random float. |
| | | * |
| | | */ |
| | | float SDLTest_RandomFloat(); |
| | | |
| | | /** |
| | | * \returns random double. |
| | | * |
| | | */ |
| | | double SDLTest_RandomDouble(); |
| | | |
| | | /** |
| | | * Returns a random boundary value for Uint8 within the given boundaries. |
| | | * Boundaries are inclusive, see the usage examples below. If validDomain |
| | | * is true, the function will only return valid boundaries, otherwise non-valid |
| | | * boundaries are also possible. |
| | | * If boundary1 > boundary2, the values are swapped |
| | | * |
| | | * Usage examples: |
| | | * RandomUint8BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 |
| | | * RandomUint8BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 |
| | | * RandomUint8BoundaryValue(0, 99, SDL_FALSE) returns 100 |
| | | * RandomUint8BoundaryValue(0, 255, SDL_FALSE) returns 0 (error set) |
| | | * |
| | | * \param boundary1 Lower boundary limit |
| | | * \param boundary2 Upper boundary limit |
| | | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? |
| | | * |
| | | * \returns Random boundary value for the given range and domain or 0 with error set |
| | | */ |
| | | Uint8 SDLTest_RandomUint8BoundaryValue(Uint8 boundary1, Uint8 boundary2, SDL_bool validDomain); |
| | | |
| | | /** |
| | | * Returns a random boundary value for Uint16 within the given boundaries. |
| | | * Boundaries are inclusive, see the usage examples below. If validDomain |
| | | * is true, the function will only return valid boundaries, otherwise non-valid |
| | | * boundaries are also possible. |
| | | * If boundary1 > boundary2, the values are swapped |
| | | * |
| | | * Usage examples: |
| | | * RandomUint16BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 |
| | | * RandomUint16BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 |
| | | * RandomUint16BoundaryValue(0, 99, SDL_FALSE) returns 100 |
| | | * RandomUint16BoundaryValue(0, 0xFFFF, SDL_FALSE) returns 0 (error set) |
| | | * |
| | | * \param boundary1 Lower boundary limit |
| | | * \param boundary2 Upper boundary limit |
| | | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? |
| | | * |
| | | * \returns Random boundary value for the given range and domain or 0 with error set |
| | | */ |
| | | Uint16 SDLTest_RandomUint16BoundaryValue(Uint16 boundary1, Uint16 boundary2, SDL_bool validDomain); |
| | | |
| | | /** |
| | | * Returns a random boundary value for Uint32 within the given boundaries. |
| | | * Boundaries are inclusive, see the usage examples below. If validDomain |
| | | * is true, the function will only return valid boundaries, otherwise non-valid |
| | | * boundaries are also possible. |
| | | * If boundary1 > boundary2, the values are swapped |
| | | * |
| | | * Usage examples: |
| | | * RandomUint32BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 |
| | | * RandomUint32BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 |
| | | * RandomUint32BoundaryValue(0, 99, SDL_FALSE) returns 100 |
| | | * RandomUint32BoundaryValue(0, 0xFFFFFFFF, SDL_FALSE) returns 0 (with error set) |
| | | * |
| | | * \param boundary1 Lower boundary limit |
| | | * \param boundary2 Upper boundary limit |
| | | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? |
| | | * |
| | | * \returns Random boundary value for the given range and domain or 0 with error set |
| | | */ |
| | | Uint32 SDLTest_RandomUint32BoundaryValue(Uint32 boundary1, Uint32 boundary2, SDL_bool validDomain); |
| | | |
| | | /** |
| | | * Returns a random boundary value for Uint64 within the given boundaries. |
| | | * Boundaries are inclusive, see the usage examples below. If validDomain |
| | | * is true, the function will only return valid boundaries, otherwise non-valid |
| | | * boundaries are also possible. |
| | | * If boundary1 > boundary2, the values are swapped |
| | | * |
| | | * Usage examples: |
| | | * RandomUint64BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 |
| | | * RandomUint64BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 |
| | | * RandomUint64BoundaryValue(0, 99, SDL_FALSE) returns 100 |
| | | * RandomUint64BoundaryValue(0, 0xFFFFFFFFFFFFFFFF, SDL_FALSE) returns 0 (with error set) |
| | | * |
| | | * \param boundary1 Lower boundary limit |
| | | * \param boundary2 Upper boundary limit |
| | | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? |
| | | * |
| | | * \returns Random boundary value for the given range and domain or 0 with error set |
| | | */ |
| | | Uint64 SDLTest_RandomUint64BoundaryValue(Uint64 boundary1, Uint64 boundary2, SDL_bool validDomain); |
| | | |
| | | /** |
| | | * Returns a random boundary value for Sint8 within the given boundaries. |
| | | * Boundaries are inclusive, see the usage examples below. If validDomain |
| | | * is true, the function will only return valid boundaries, otherwise non-valid |
| | | * boundaries are also possible. |
| | | * If boundary1 > boundary2, the values are swapped |
| | | * |
| | | * Usage examples: |
| | | * RandomSint8BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 |
| | | * RandomSint8BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 |
| | | * RandomSint8BoundaryValue(SINT8_MIN, 99, SDL_FALSE) returns 100 |
| | | * RandomSint8BoundaryValue(SINT8_MIN, SINT8_MAX, SDL_FALSE) returns SINT8_MIN (== error value) with error set |
| | | * |
| | | * \param boundary1 Lower boundary limit |
| | | * \param boundary2 Upper boundary limit |
| | | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? |
| | | * |
| | | * \returns Random boundary value for the given range and domain or SINT8_MIN with error set |
| | | */ |
| | | Sint8 SDLTest_RandomSint8BoundaryValue(Sint8 boundary1, Sint8 boundary2, SDL_bool validDomain); |
| | | |
| | | |
| | | /** |
| | | * Returns a random boundary value for Sint16 within the given boundaries. |
| | | * Boundaries are inclusive, see the usage examples below. If validDomain |
| | | * is true, the function will only return valid boundaries, otherwise non-valid |
| | | * boundaries are also possible. |
| | | * If boundary1 > boundary2, the values are swapped |
| | | * |
| | | * Usage examples: |
| | | * RandomSint16BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 |
| | | * RandomSint16BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 |
| | | * RandomSint16BoundaryValue(SINT16_MIN, 99, SDL_FALSE) returns 100 |
| | | * RandomSint16BoundaryValue(SINT16_MIN, SINT16_MAX, SDL_FALSE) returns SINT16_MIN (== error value) with error set |
| | | * |
| | | * \param boundary1 Lower boundary limit |
| | | * \param boundary2 Upper boundary limit |
| | | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? |
| | | * |
| | | * \returns Random boundary value for the given range and domain or SINT16_MIN with error set |
| | | */ |
| | | Sint16 SDLTest_RandomSint16BoundaryValue(Sint16 boundary1, Sint16 boundary2, SDL_bool validDomain); |
| | | |
| | | /** |
| | | * Returns a random boundary value for Sint32 within the given boundaries. |
| | | * Boundaries are inclusive, see the usage examples below. If validDomain |
| | | * is true, the function will only return valid boundaries, otherwise non-valid |
| | | * boundaries are also possible. |
| | | * If boundary1 > boundary2, the values are swapped |
| | | * |
| | | * Usage examples: |
| | | * RandomSint32BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 |
| | | * RandomSint32BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 |
| | | * RandomSint32BoundaryValue(SINT32_MIN, 99, SDL_FALSE) returns 100 |
| | | * RandomSint32BoundaryValue(SINT32_MIN, SINT32_MAX, SDL_FALSE) returns SINT32_MIN (== error value) |
| | | * |
| | | * \param boundary1 Lower boundary limit |
| | | * \param boundary2 Upper boundary limit |
| | | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? |
| | | * |
| | | * \returns Random boundary value for the given range and domain or SINT32_MIN with error set |
| | | */ |
| | | Sint32 SDLTest_RandomSint32BoundaryValue(Sint32 boundary1, Sint32 boundary2, SDL_bool validDomain); |
| | | |
| | | /** |
| | | * Returns a random boundary value for Sint64 within the given boundaries. |
| | | * Boundaries are inclusive, see the usage examples below. If validDomain |
| | | * is true, the function will only return valid boundaries, otherwise non-valid |
| | | * boundaries are also possible. |
| | | * If boundary1 > boundary2, the values are swapped |
| | | * |
| | | * Usage examples: |
| | | * RandomSint64BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 |
| | | * RandomSint64BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 |
| | | * RandomSint64BoundaryValue(SINT64_MIN, 99, SDL_FALSE) returns 100 |
| | | * RandomSint64BoundaryValue(SINT64_MIN, SINT64_MAX, SDL_FALSE) returns SINT64_MIN (== error value) and error set |
| | | * |
| | | * \param boundary1 Lower boundary limit |
| | | * \param boundary2 Upper boundary limit |
| | | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? |
| | | * |
| | | * \returns Random boundary value for the given range and domain or SINT64_MIN with error set |
| | | */ |
| | | Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL_bool validDomain); |
| | | |
| | | |
| | | /** |
| | | * Returns integer in range [min, max] (inclusive). |
| | | * Min and max values can be negative values. |
| | | * If Max in smaller tham min, then the values are swapped. |
| | | * Min and max are the same value, that value will be returned. |
| | | * |
| | | * \param min Minimum inclusive value of returned random number |
| | | * \param max Maximum inclusive value of returned random number |
| | | * |
| | | * \returns Generated random integer in range |
| | | */ |
| | | Sint32 SDLTest_RandomIntegerInRange(Sint32 min, Sint32 max); |
| | | |
| | | |
| | | /** |
| | | * Generates random null-terminated string. The minimum length for |
| | | * the string is 1 character, maximum length for the string is 255 |
| | | * characters and it can contain ASCII characters from 32 to 126. |
| | | * |
| | | * Note: Returned string needs to be deallocated. |
| | | * |
| | | * \returns Newly allocated random string; or NULL if length was invalid or string could not be allocated. |
| | | */ |
| | | char * SDLTest_RandomAsciiString(); |
| | | |
| | | |
| | | /** |
| | | * Generates random null-terminated string. The maximum length for |
| | | * the string is defined by the maxLength parameter. |
| | | * String can contain ASCII characters from 32 to 126. |
| | | * |
| | | * Note: Returned string needs to be deallocated. |
| | | * |
| | | * \param maxLength The maximum length of the generated string. |
| | | * |
| | | * \returns Newly allocated random string; or NULL if maxLength was invalid or string could not be allocated. |
| | | */ |
| | | char * SDLTest_RandomAsciiStringWithMaximumLength(int maxLength); |
| | | |
| | | |
| | | /** |
| | | * Generates random null-terminated string. The length for |
| | | * the string is defined by the size parameter. |
| | | * String can contain ASCII characters from 32 to 126. |
| | | * |
| | | * Note: Returned string needs to be deallocated. |
| | | * |
| | | * \param size The length of the generated string |
| | | * |
| | | * \returns Newly allocated random string; or NULL if size was invalid or string could not be allocated. |
| | | */ |
| | | char * SDLTest_RandomAsciiStringOfSize(int size); |
| | | |
| | | /** |
| | | * Returns the invocation count for the fuzzer since last ...FuzzerInit. |
| | | */ |
| | | int SDLTest_GetFuzzerInvocationCount(); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_test_fuzzer_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_test_harness.h |
| | | * |
| | | * Include file for SDL test framework. |
| | | * |
| | | * This code is a part of the SDL2_test library, not the main SDL library. |
| | | */ |
| | | |
| | | /* |
| | | Defines types for test case definitions and the test execution harness API. |
| | | |
| | | Based on original GSOC code by Markus Kauppila <markus.kauppila@gmail.com> |
| | | */ |
| | | |
| | | #ifndef _SDL_test_harness_h |
| | | #define _SDL_test_harness_h |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | |
| | | //! Definitions for test case structures |
| | | #define TEST_ENABLED 1 |
| | | #define TEST_DISABLED 0 |
| | | |
| | | //! Definition of all the possible test return values of the test case method |
| | | #define TEST_ABORTED -1 |
| | | #define TEST_STARTED 0 |
| | | #define TEST_COMPLETED 1 |
| | | #define TEST_SKIPPED 2 |
| | | |
| | | //! Definition of all the possible test results for the harness |
| | | #define TEST_RESULT_PASSED 0 |
| | | #define TEST_RESULT_FAILED 1 |
| | | #define TEST_RESULT_NO_ASSERT 2 |
| | | #define TEST_RESULT_SKIPPED 3 |
| | | #define TEST_RESULT_SETUP_FAILURE 4 |
| | | |
| | | //!< Function pointer to a test case setup function (run before every test) |
| | | typedef void (*SDLTest_TestCaseSetUpFp)(void *arg); |
| | | |
| | | //!< Function pointer to a test case function |
| | | typedef int (*SDLTest_TestCaseFp)(void *arg); |
| | | |
| | | //!< Function pointer to a test case teardown function (run after every test) |
| | | typedef void (*SDLTest_TestCaseTearDownFp)(void *arg); |
| | | |
| | | /** |
| | | * Holds information about a single test case. |
| | | */ |
| | | typedef struct SDLTest_TestCaseReference { |
| | | /*!< Func2Stress */ |
| | | SDLTest_TestCaseFp testCase; |
| | | /*!< Short name (or function name) "Func2Stress" */ |
| | | char *name; |
| | | /*!< Long name or full description "This test pushes func2() to the limit." */ |
| | | char *description; |
| | | /*!< Set to TEST_ENABLED or TEST_DISABLED (test won't be run) */ |
| | | int enabled; |
| | | } SDLTest_TestCaseReference; |
| | | |
| | | /** |
| | | * Holds information about a test suite (multiple test cases). |
| | | */ |
| | | typedef struct SDLTest_TestSuiteReference { |
| | | /*!< "PlatformSuite" */ |
| | | char *name; |
| | | /*!< The function that is run before each test. NULL skips. */ |
| | | SDLTest_TestCaseSetUpFp testSetUp; |
| | | /*!< The test cases that are run as part of the suite. Last item should be NULL. */ |
| | | const SDLTest_TestCaseReference **testCases; |
| | | /*!< The function that is run after each test. NULL skips. */ |
| | | SDLTest_TestCaseTearDownFp testTearDown; |
| | | } SDLTest_TestSuiteReference; |
| | | |
| | | |
| | | /** |
| | | * \brief Execute a test suite using the given run seed and execution key. |
| | | * |
| | | * \param testSuites Suites containing the test case. |
| | | * \param userRunSeed Custom run seed provided by user, or NULL to autogenerate one. |
| | | * \param userExecKey Custom execution key provided by user, or 0 to autogenerate one. |
| | | * \param filter Filter specification. NULL disables. Case sensitive. |
| | | * \param testIterations Number of iterations to run each test case. |
| | | * |
| | | * \returns Test run result; 0 when all tests passed, 1 if any tests failed. |
| | | */ |
| | | int SDLTest_RunSuites(SDLTest_TestSuiteReference *testSuites[], const char *userRunSeed, Uint64 userExecKey, const char *filter, int testIterations); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_test_harness_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_test_images.h |
| | | * |
| | | * Include file for SDL test framework. |
| | | * |
| | | * This code is a part of the SDL2_test library, not the main SDL library. |
| | | */ |
| | | |
| | | /* |
| | | |
| | | Defines some images for tests. |
| | | |
| | | */ |
| | | |
| | | #ifndef _SDL_test_images_h |
| | | #define _SDL_test_images_h |
| | | |
| | | #include "SDL.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | *Type for test images. |
| | | */ |
| | | typedef struct SDLTest_SurfaceImage_s { |
| | | int width; |
| | | int height; |
| | | unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ |
| | | const char *pixel_data; |
| | | } SDLTest_SurfaceImage_t; |
| | | |
| | | /* Test images */ |
| | | SDL_Surface *SDLTest_ImageBlit(); |
| | | SDL_Surface *SDLTest_ImageBlitColor(); |
| | | SDL_Surface *SDLTest_ImageBlitAlpha(); |
| | | SDL_Surface *SDLTest_ImageBlitBlendAdd(); |
| | | SDL_Surface *SDLTest_ImageBlitBlend(); |
| | | SDL_Surface *SDLTest_ImageBlitBlendMod(); |
| | | SDL_Surface *SDLTest_ImageBlitBlendNone(); |
| | | SDL_Surface *SDLTest_ImageBlitBlendAll(); |
| | | SDL_Surface *SDLTest_ImageFace(); |
| | | SDL_Surface *SDLTest_ImagePrimitives(); |
| | | SDL_Surface *SDLTest_ImagePrimitivesBlend(); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_test_images_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_test_log.h |
| | | * |
| | | * Include file for SDL test framework. |
| | | * |
| | | * This code is a part of the SDL2_test library, not the main SDL library. |
| | | */ |
| | | |
| | | /* |
| | | * |
| | | * Wrapper to log in the TEST category |
| | | * |
| | | */ |
| | | |
| | | #ifndef _SDL_test_log_h |
| | | #define _SDL_test_log_h |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Prints given message with a timestamp in the TEST category and INFO priority. |
| | | * |
| | | * \param fmt Message to be logged |
| | | */ |
| | | void SDLTest_Log(const char *fmt, ...); |
| | | |
| | | /** |
| | | * \brief Prints given message with a timestamp in the TEST category and the ERROR priority. |
| | | * |
| | | * \param fmt Message to be logged |
| | | */ |
| | | void SDLTest_LogError(const char *fmt, ...); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_test_log_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_test_md5.h |
| | | * |
| | | * Include file for SDL test framework. |
| | | * |
| | | * This code is a part of the SDL2_test library, not the main SDL library. |
| | | */ |
| | | |
| | | /* |
| | | *********************************************************************** |
| | | ** Header file for implementation of MD5 ** |
| | | ** RSA Data Security, Inc. MD5 Message-Digest Algorithm ** |
| | | ** Created: 2/17/90 RLR ** |
| | | ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version ** |
| | | ** Revised (for MD5): RLR 4/27/91 ** |
| | | ** -- G modified to have y&~z instead of y&z ** |
| | | ** -- FF, GG, HH modified to add in last register done ** |
| | | ** -- Access pattern: round 2 works mod 5, round 3 works mod 3 ** |
| | | ** -- distinct additive constant for each step ** |
| | | ** -- round 4 added, working mod 7 ** |
| | | *********************************************************************** |
| | | */ |
| | | |
| | | /* |
| | | *********************************************************************** |
| | | ** Message-digest routines: ** |
| | | ** To form the message digest for a message M ** |
| | | ** (1) Initialize a context buffer mdContext using MD5Init ** |
| | | ** (2) Call MD5Update on mdContext and M ** |
| | | ** (3) Call MD5Final on mdContext ** |
| | | ** The message digest is now in mdContext->digest[0...15] ** |
| | | *********************************************************************** |
| | | */ |
| | | |
| | | #ifndef _SDL_test_md5_h |
| | | #define _SDL_test_md5_h |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* ------------ Definitions --------- */ |
| | | |
| | | /* typedef a 32-bit type */ |
| | | typedef unsigned long int MD5UINT4; |
| | | |
| | | /* Data structure for MD5 (Message-Digest) computation */ |
| | | typedef struct { |
| | | MD5UINT4 i[2]; /* number of _bits_ handled mod 2^64 */ |
| | | MD5UINT4 buf[4]; /* scratch buffer */ |
| | | unsigned char in[64]; /* input buffer */ |
| | | unsigned char digest[16]; /* actual digest after Md5Final call */ |
| | | } SDLTest_Md5Context; |
| | | |
| | | /* ---------- Function Prototypes ------------- */ |
| | | |
| | | /** |
| | | * /brief initialize the context |
| | | * |
| | | * /param mdContext pointer to context variable |
| | | * |
| | | * Note: The function initializes the message-digest context |
| | | * mdContext. Call before each new use of the context - |
| | | * all fields are set to zero. |
| | | */ |
| | | void SDLTest_Md5Init(SDLTest_Md5Context * mdContext); |
| | | |
| | | |
| | | /** |
| | | * /brief update digest from variable length data |
| | | * |
| | | * /param mdContext pointer to context variable |
| | | * /param inBuf pointer to data array/string |
| | | * /param inLen length of data array/string |
| | | * |
| | | * Note: The function updates the message-digest context to account |
| | | * for the presence of each of the characters inBuf[0..inLen-1] |
| | | * in the message whose digest is being computed. |
| | | */ |
| | | |
| | | void SDLTest_Md5Update(SDLTest_Md5Context * mdContext, unsigned char *inBuf, |
| | | unsigned int inLen); |
| | | |
| | | |
| | | /* |
| | | * /brief complete digest computation |
| | | * |
| | | * /param mdContext pointer to context variable |
| | | * |
| | | * Note: The function terminates the message-digest computation and |
| | | * ends with the desired message digest in mdContext.digest[0..15]. |
| | | * Always call before using the digest[] variable. |
| | | */ |
| | | |
| | | void SDLTest_Md5Final(SDLTest_Md5Context * mdContext); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_test_md5_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_test_random.h |
| | | * |
| | | * Include file for SDL test framework. |
| | | * |
| | | * This code is a part of the SDL2_test library, not the main SDL library. |
| | | */ |
| | | |
| | | /* |
| | | |
| | | A "32-bit Multiply with carry random number generator. Very fast. |
| | | Includes a list of recommended multipliers. |
| | | |
| | | multiply-with-carry generator: x(n) = a*x(n-1) + carry mod 2^32. |
| | | period: (a*2^31)-1 |
| | | |
| | | */ |
| | | |
| | | #ifndef _SDL_test_random_h |
| | | #define _SDL_test_random_h |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* --- Definitions */ |
| | | |
| | | /* |
| | | * Macros that return a random number in a specific format. |
| | | */ |
| | | #define SDLTest_RandomInt(c) ((int)SDLTest_Random(c)) |
| | | |
| | | /* |
| | | * Context structure for the random number generator state. |
| | | */ |
| | | typedef struct { |
| | | unsigned int a; |
| | | unsigned int x; |
| | | unsigned int c; |
| | | unsigned int ah; |
| | | unsigned int al; |
| | | } SDLTest_RandomContext; |
| | | |
| | | |
| | | /* --- Function prototypes */ |
| | | |
| | | /** |
| | | * \brief Initialize random number generator with two integers. |
| | | * |
| | | * Note: The random sequence of numbers returned by ...Random() is the |
| | | * same for the same two integers and has a period of 2^31. |
| | | * |
| | | * \param rndContext pointer to context structure |
| | | * \param xi integer that defines the random sequence |
| | | * \param ci integer that defines the random sequence |
| | | * |
| | | */ |
| | | void SDLTest_RandomInit(SDLTest_RandomContext * rndContext, unsigned int xi, |
| | | unsigned int ci); |
| | | |
| | | /** |
| | | * \brief Initialize random number generator based on current system time. |
| | | * |
| | | * \param rndContext pointer to context structure |
| | | * |
| | | */ |
| | | void SDLTest_RandomInitTime(SDLTest_RandomContext *rndContext); |
| | | |
| | | |
| | | /** |
| | | * \brief Initialize random number generator based on current system time. |
| | | * |
| | | * Note: ...RandomInit() or ...RandomInitTime() must have been called |
| | | * before using this function. |
| | | * |
| | | * \param rndContext pointer to context structure |
| | | * |
| | | * \returns A random number (32bit unsigned integer) |
| | | * |
| | | */ |
| | | unsigned int SDLTest_Random(SDLTest_RandomContext *rndContext); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_test_random_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | #ifndef _SDL_thread_h |
| | | #define _SDL_thread_h |
| | | |
| | | /** |
| | | * \file SDL_thread.h |
| | | * |
| | | * Header for the SDL thread management routines. |
| | | */ |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | |
| | | /* Thread synchronization primitives */ |
| | | #include "SDL_mutex.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* The SDL thread structure, defined in SDL_thread.c */ |
| | | struct SDL_Thread; |
| | | typedef struct SDL_Thread SDL_Thread; |
| | | |
| | | /* The SDL thread ID */ |
| | | typedef unsigned long SDL_threadID; |
| | | |
| | | /* The SDL thread priority |
| | | * |
| | | * Note: On many systems you require special privileges to set high priority. |
| | | */ |
| | | typedef enum { |
| | | SDL_THREAD_PRIORITY_LOW, |
| | | SDL_THREAD_PRIORITY_NORMAL, |
| | | SDL_THREAD_PRIORITY_HIGH |
| | | } SDL_ThreadPriority; |
| | | |
| | | /* The function passed to SDL_CreateThread() |
| | | It is passed a void* user context parameter and returns an int. |
| | | */ |
| | | typedef int (SDLCALL * SDL_ThreadFunction) (void *data); |
| | | |
| | | #if defined(__WIN32__) && !defined(HAVE_LIBC) |
| | | /** |
| | | * \file SDL_thread.h |
| | | * |
| | | * We compile SDL into a DLL. This means, that it's the DLL which |
| | | * creates a new thread for the calling process with the SDL_CreateThread() |
| | | * API. There is a problem with this, that only the RTL of the SDL.DLL will |
| | | * be initialized for those threads, and not the RTL of the calling |
| | | * application! |
| | | * |
| | | * To solve this, we make a little hack here. |
| | | * |
| | | * We'll always use the caller's _beginthread() and _endthread() APIs to |
| | | * start a new thread. This way, if it's the SDL.DLL which uses this API, |
| | | * then the RTL of SDL.DLL will be used to create the new thread, and if it's |
| | | * the application, then the RTL of the application will be used. |
| | | * |
| | | * So, in short: |
| | | * Always use the _beginthread() and _endthread() of the calling runtime |
| | | * library! |
| | | */ |
| | | #define SDL_PASSED_BEGINTHREAD_ENDTHREAD |
| | | #include <process.h> /* This has _beginthread() and _endthread() defined! */ |
| | | |
| | | typedef uintptr_t(__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, |
| | | unsigned (__stdcall * |
| | | func) (void |
| | | *), |
| | | void *arg, unsigned, |
| | | unsigned *threadID); |
| | | typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); |
| | | |
| | | /** |
| | | * Create a thread. |
| | | */ |
| | | extern DECLSPEC SDL_Thread *SDLCALL |
| | | SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, |
| | | pfnSDL_CurrentBeginThread pfnBeginThread, |
| | | pfnSDL_CurrentEndThread pfnEndThread); |
| | | |
| | | /** |
| | | * Create a thread. |
| | | */ |
| | | #define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, _beginthreadex, _endthreadex) |
| | | |
| | | #else |
| | | |
| | | /** |
| | | * Create a thread. |
| | | * |
| | | * Thread naming is a little complicated: Most systems have very small |
| | | * limits for the string length (BeOS has 32 bytes, Linux currently has 16, |
| | | * Visual C++ 6.0 has nine!), and possibly other arbitrary rules. You'll |
| | | * have to see what happens with your system's debugger. The name should be |
| | | * UTF-8 (but using the naming limits of C identifiers is a better bet). |
| | | * There are no requirements for thread naming conventions, so long as the |
| | | * string is null-terminated UTF-8, but these guidelines are helpful in |
| | | * choosing a name: |
| | | * |
| | | * http://stackoverflow.com/questions/149932/naming-conventions-for-threads |
| | | * |
| | | * If a system imposes requirements, SDL will try to munge the string for |
| | | * it (truncate, etc), but the original string contents will be available |
| | | * from SDL_GetThreadName(). |
| | | */ |
| | | extern DECLSPEC SDL_Thread *SDLCALL |
| | | SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data); |
| | | |
| | | #endif |
| | | |
| | | /** |
| | | * Get the thread name, as it was specified in SDL_CreateThread(). |
| | | * This function returns a pointer to a UTF-8 string that names the |
| | | * specified thread, or NULL if it doesn't have a name. This is internal |
| | | * memory, not to be free()'d by the caller, and remains valid until the |
| | | * specified thread is cleaned up by SDL_WaitThread(). |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_GetThreadName(SDL_Thread *thread); |
| | | |
| | | /** |
| | | * Get the thread identifier for the current thread. |
| | | */ |
| | | extern DECLSPEC SDL_threadID SDLCALL SDL_ThreadID(void); |
| | | |
| | | /** |
| | | * Get the thread identifier for the specified thread. |
| | | * |
| | | * Equivalent to SDL_ThreadID() if the specified thread is NULL. |
| | | */ |
| | | extern DECLSPEC SDL_threadID SDLCALL SDL_GetThreadID(SDL_Thread * thread); |
| | | |
| | | /** |
| | | * Set the priority for the current thread |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetThreadPriority(SDL_ThreadPriority priority); |
| | | |
| | | /** |
| | | * Wait for a thread to finish. |
| | | * |
| | | * The return code for the thread function is placed in the area |
| | | * pointed to by \c status, if \c status is not NULL. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread * thread, int *status); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_thread_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | #ifndef _SDL_timer_h |
| | | #define _SDL_timer_h |
| | | |
| | | /** |
| | | * \file SDL_timer.h |
| | | * |
| | | * Header for the SDL time management routines. |
| | | */ |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Get the number of milliseconds since the SDL library initialization. |
| | | * |
| | | * \note This value wraps if the program runs for more than ~49 days. |
| | | */ |
| | | extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); |
| | | |
| | | /** |
| | | * \brief Get the current value of the high resolution counter |
| | | */ |
| | | extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceCounter(void); |
| | | |
| | | /** |
| | | * \brief Get the count per second of the high resolution counter |
| | | */ |
| | | extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void); |
| | | |
| | | /** |
| | | * \brief Wait a specified number of milliseconds before returning. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); |
| | | |
| | | /** |
| | | * Function prototype for the timer callback function. |
| | | * |
| | | * The callback function is passed the current timer interval and returns |
| | | * the next timer interval. If the returned value is the same as the one |
| | | * passed in, the periodic alarm continues, otherwise a new alarm is |
| | | * scheduled. If the callback returns 0, the periodic alarm is cancelled. |
| | | */ |
| | | typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param); |
| | | |
| | | /** |
| | | * Definition of the timer ID type. |
| | | */ |
| | | typedef int SDL_TimerID; |
| | | |
| | | /** |
| | | * \brief Add a new timer to the pool of timers already running. |
| | | * |
| | | * \return A timer ID, or NULL when an error occurs. |
| | | */ |
| | | extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, |
| | | SDL_TimerCallback callback, |
| | | void *param); |
| | | |
| | | /** |
| | | * \brief Remove a timer knowing its ID. |
| | | * |
| | | * \return A boolean value indicating success or failure. |
| | | * |
| | | * \warning It is not safe to remove a timer multiple times. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID id); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_timer_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_touch.h |
| | | * |
| | | * Include file for SDL touch event handling. |
| | | */ |
| | | |
| | | #ifndef _SDL_touch_h |
| | | #define _SDL_touch_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_error.h" |
| | | #include "SDL_video.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | typedef Sint64 SDL_TouchID; |
| | | typedef Sint64 SDL_FingerID; |
| | | |
| | | typedef struct SDL_Finger |
| | | { |
| | | SDL_FingerID id; |
| | | float x; |
| | | float y; |
| | | float pressure; |
| | | } SDL_Finger; |
| | | |
| | | /* Used as the device ID for mouse events simulated with touch input */ |
| | | #define SDL_TOUCH_MOUSEID ((Uint32)-1) |
| | | |
| | | |
| | | /* Function prototypes */ |
| | | |
| | | /** |
| | | * \brief Get the number of registered touch devices. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void); |
| | | |
| | | /** |
| | | * \brief Get the touch ID with the given index, or 0 if the index is invalid. |
| | | */ |
| | | extern DECLSPEC SDL_TouchID SDLCALL SDL_GetTouchDevice(int index); |
| | | |
| | | /** |
| | | * \brief Get the number of active fingers for a given touch device. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetNumTouchFingers(SDL_TouchID touchID); |
| | | |
| | | /** |
| | | * \brief Get the finger object of the given touch, with the given index. |
| | | */ |
| | | extern DECLSPEC SDL_Finger * SDLCALL SDL_GetTouchFinger(SDL_TouchID touchID, int index); |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_touch_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_types.h |
| | | * |
| | | * \deprecated |
| | | */ |
| | | |
| | | /* DEPRECATED */ |
| | | #include "SDL_stdinc.h" |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_version.h |
| | | * |
| | | * This header defines the current SDL version. |
| | | */ |
| | | |
| | | #ifndef _SDL_version_h |
| | | #define _SDL_version_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief Information the version of SDL in use. |
| | | * |
| | | * Represents the library's version as three levels: major revision |
| | | * (increments with massive changes, additions, and enhancements), |
| | | * minor revision (increments with backwards-compatible changes to the |
| | | * major revision), and patchlevel (increments with fixes to the minor |
| | | * revision). |
| | | * |
| | | * \sa SDL_VERSION |
| | | * \sa SDL_GetVersion |
| | | */ |
| | | typedef struct SDL_version |
| | | { |
| | | Uint8 major; /**< major version */ |
| | | Uint8 minor; /**< minor version */ |
| | | Uint8 patch; /**< update version */ |
| | | } SDL_version; |
| | | |
| | | /* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL |
| | | */ |
| | | #define SDL_MAJOR_VERSION 2 |
| | | #define SDL_MINOR_VERSION 0 |
| | | #define SDL_PATCHLEVEL 0 |
| | | |
| | | /** |
| | | * \brief Macro to determine SDL version program was compiled against. |
| | | * |
| | | * This macro fills in a SDL_version structure with the version of the |
| | | * library you compiled against. This is determined by what header the |
| | | * compiler uses. Note that if you dynamically linked the library, you might |
| | | * have a slightly newer or older version at runtime. That version can be |
| | | * determined with SDL_GetVersion(), which, unlike SDL_VERSION(), |
| | | * is not a macro. |
| | | * |
| | | * \param x A pointer to a SDL_version struct to initialize. |
| | | * |
| | | * \sa SDL_version |
| | | * \sa SDL_GetVersion |
| | | */ |
| | | #define SDL_VERSION(x) \ |
| | | { \ |
| | | (x)->major = SDL_MAJOR_VERSION; \ |
| | | (x)->minor = SDL_MINOR_VERSION; \ |
| | | (x)->patch = SDL_PATCHLEVEL; \ |
| | | } |
| | | |
| | | /** |
| | | * This macro turns the version numbers into a numeric value: |
| | | * \verbatim |
| | | (1,2,3) -> (1203) |
| | | \endverbatim |
| | | * |
| | | * This assumes that there will never be more than 100 patchlevels. |
| | | */ |
| | | #define SDL_VERSIONNUM(X, Y, Z) \ |
| | | ((X)*1000 + (Y)*100 + (Z)) |
| | | |
| | | /** |
| | | * This is the version number macro for the current SDL version. |
| | | */ |
| | | #define SDL_COMPILEDVERSION \ |
| | | SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) |
| | | |
| | | /** |
| | | * This macro will evaluate to true if compiled with SDL at least X.Y.Z. |
| | | */ |
| | | #define SDL_VERSION_ATLEAST(X, Y, Z) \ |
| | | (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) |
| | | |
| | | /** |
| | | * \brief Get the version of SDL that is linked against your program. |
| | | * |
| | | * If you are linking to SDL dynamically, then it is possible that the |
| | | * current version will be different than the version you compiled against. |
| | | * This function returns the current version, while SDL_VERSION() is a |
| | | * macro that tells you what version you compiled with. |
| | | * |
| | | * \code |
| | | * SDL_version compiled; |
| | | * SDL_version linked; |
| | | * |
| | | * SDL_VERSION(&compiled); |
| | | * SDL_GetVersion(&linked); |
| | | * printf("We compiled against SDL version %d.%d.%d ...\n", |
| | | * compiled.major, compiled.minor, compiled.patch); |
| | | * printf("But we linked against SDL version %d.%d.%d.\n", |
| | | * linked.major, linked.minor, linked.patch); |
| | | * \endcode |
| | | * |
| | | * This function may be called safely at any time, even before SDL_Init(). |
| | | * |
| | | * \sa SDL_VERSION |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GetVersion(SDL_version * ver); |
| | | |
| | | /** |
| | | * \brief Get the code revision of SDL that is linked against your program. |
| | | * |
| | | * Returns an arbitrary string (a hash value) uniquely identifying the |
| | | * exact revision of the SDL library in use, and is only useful in comparing |
| | | * against other revisions. It is NOT an incrementing number. |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_GetRevision(void); |
| | | |
| | | /** |
| | | * \brief Get the revision number of SDL that is linked against your program. |
| | | * |
| | | * Returns a number uniquely identifying the exact revision of the SDL |
| | | * library in use. It is an incrementing number based on commits to |
| | | * hg.libsdl.org. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetRevisionNumber(void); |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_version_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file SDL_video.h |
| | | * |
| | | * Header file for SDL video functions. |
| | | */ |
| | | |
| | | #ifndef _SDL_video_h |
| | | #define _SDL_video_h |
| | | |
| | | #include "SDL_stdinc.h" |
| | | #include "SDL_pixels.h" |
| | | #include "SDL_rect.h" |
| | | #include "SDL_surface.h" |
| | | |
| | | #include "begin_code.h" |
| | | /* Set up for C function definitions, even when using C++ */ |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * \brief The structure that defines a display mode |
| | | * |
| | | * \sa SDL_GetNumDisplayModes() |
| | | * \sa SDL_GetDisplayMode() |
| | | * \sa SDL_GetDesktopDisplayMode() |
| | | * \sa SDL_GetCurrentDisplayMode() |
| | | * \sa SDL_GetClosestDisplayMode() |
| | | * \sa SDL_SetWindowDisplayMode() |
| | | * \sa SDL_GetWindowDisplayMode() |
| | | */ |
| | | typedef struct |
| | | { |
| | | Uint32 format; /**< pixel format */ |
| | | int w; /**< width */ |
| | | int h; /**< height */ |
| | | int refresh_rate; /**< refresh rate (or zero for unspecified) */ |
| | | void *driverdata; /**< driver-specific data, initialize to 0 */ |
| | | } SDL_DisplayMode; |
| | | |
| | | /** |
| | | * \brief The type used to identify a window |
| | | * |
| | | * \sa SDL_CreateWindow() |
| | | * \sa SDL_CreateWindowFrom() |
| | | * \sa SDL_DestroyWindow() |
| | | * \sa SDL_GetWindowData() |
| | | * \sa SDL_GetWindowFlags() |
| | | * \sa SDL_GetWindowGrab() |
| | | * \sa SDL_GetWindowPosition() |
| | | * \sa SDL_GetWindowSize() |
| | | * \sa SDL_GetWindowTitle() |
| | | * \sa SDL_HideWindow() |
| | | * \sa SDL_MaximizeWindow() |
| | | * \sa SDL_MinimizeWindow() |
| | | * \sa SDL_RaiseWindow() |
| | | * \sa SDL_RestoreWindow() |
| | | * \sa SDL_SetWindowData() |
| | | * \sa SDL_SetWindowFullscreen() |
| | | * \sa SDL_SetWindowGrab() |
| | | * \sa SDL_SetWindowIcon() |
| | | * \sa SDL_SetWindowPosition() |
| | | * \sa SDL_SetWindowSize() |
| | | * \sa SDL_SetWindowBordered() |
| | | * \sa SDL_SetWindowTitle() |
| | | * \sa SDL_ShowWindow() |
| | | */ |
| | | typedef struct SDL_Window SDL_Window; |
| | | |
| | | /** |
| | | * \brief The flags on a window |
| | | * |
| | | * \sa SDL_GetWindowFlags() |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */ |
| | | SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ |
| | | SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */ |
| | | SDL_WINDOW_HIDDEN = 0x00000008, /**< window is not visible */ |
| | | SDL_WINDOW_BORDERLESS = 0x00000010, /**< no window decoration */ |
| | | SDL_WINDOW_RESIZABLE = 0x00000020, /**< window can be resized */ |
| | | SDL_WINDOW_MINIMIZED = 0x00000040, /**< window is minimized */ |
| | | SDL_WINDOW_MAXIMIZED = 0x00000080, /**< window is maximized */ |
| | | SDL_WINDOW_INPUT_GRABBED = 0x00000100, /**< window has grabbed input focus */ |
| | | SDL_WINDOW_INPUT_FOCUS = 0x00000200, /**< window has input focus */ |
| | | SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */ |
| | | SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), |
| | | SDL_WINDOW_FOREIGN = 0x00000800 /**< window not created by SDL */ |
| | | } SDL_WindowFlags; |
| | | |
| | | /** |
| | | * \brief Used to indicate that you don't care what the window position is. |
| | | */ |
| | | #define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000 |
| | | #define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X)) |
| | | #define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0) |
| | | #define SDL_WINDOWPOS_ISUNDEFINED(X) \ |
| | | (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK) |
| | | |
| | | /** |
| | | * \brief Used to indicate that the window position should be centered. |
| | | */ |
| | | #define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000 |
| | | #define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X)) |
| | | #define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0) |
| | | #define SDL_WINDOWPOS_ISCENTERED(X) \ |
| | | (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK) |
| | | |
| | | /** |
| | | * \brief Event subtype for window events |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_WINDOWEVENT_NONE, /**< Never used */ |
| | | SDL_WINDOWEVENT_SHOWN, /**< Window has been shown */ |
| | | SDL_WINDOWEVENT_HIDDEN, /**< Window has been hidden */ |
| | | SDL_WINDOWEVENT_EXPOSED, /**< Window has been exposed and should be |
| | | redrawn */ |
| | | SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1, data2 |
| | | */ |
| | | SDL_WINDOWEVENT_RESIZED, /**< Window has been resized to data1xdata2 */ |
| | | SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as a result of an API call or through the system or user changing the window size. */ |
| | | SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */ |
| | | SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */ |
| | | SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size |
| | | and position */ |
| | | SDL_WINDOWEVENT_ENTER, /**< Window has gained mouse focus */ |
| | | SDL_WINDOWEVENT_LEAVE, /**< Window has lost mouse focus */ |
| | | SDL_WINDOWEVENT_FOCUS_GAINED, /**< Window has gained keyboard focus */ |
| | | SDL_WINDOWEVENT_FOCUS_LOST, /**< Window has lost keyboard focus */ |
| | | SDL_WINDOWEVENT_CLOSE /**< The window manager requests that the |
| | | window be closed */ |
| | | } SDL_WindowEventID; |
| | | |
| | | /** |
| | | * \brief An opaque handle to an OpenGL context. |
| | | */ |
| | | typedef void *SDL_GLContext; |
| | | |
| | | /** |
| | | * \brief OpenGL configuration attributes |
| | | */ |
| | | typedef enum |
| | | { |
| | | SDL_GL_RED_SIZE, |
| | | SDL_GL_GREEN_SIZE, |
| | | SDL_GL_BLUE_SIZE, |
| | | SDL_GL_ALPHA_SIZE, |
| | | SDL_GL_BUFFER_SIZE, |
| | | SDL_GL_DOUBLEBUFFER, |
| | | SDL_GL_DEPTH_SIZE, |
| | | SDL_GL_STENCIL_SIZE, |
| | | SDL_GL_ACCUM_RED_SIZE, |
| | | SDL_GL_ACCUM_GREEN_SIZE, |
| | | SDL_GL_ACCUM_BLUE_SIZE, |
| | | SDL_GL_ACCUM_ALPHA_SIZE, |
| | | SDL_GL_STEREO, |
| | | SDL_GL_MULTISAMPLEBUFFERS, |
| | | SDL_GL_MULTISAMPLESAMPLES, |
| | | SDL_GL_ACCELERATED_VISUAL, |
| | | SDL_GL_RETAINED_BACKING, |
| | | SDL_GL_CONTEXT_MAJOR_VERSION, |
| | | SDL_GL_CONTEXT_MINOR_VERSION, |
| | | SDL_GL_CONTEXT_EGL, |
| | | SDL_GL_CONTEXT_FLAGS, |
| | | SDL_GL_CONTEXT_PROFILE_MASK, |
| | | SDL_GL_SHARE_WITH_CURRENT_CONTEXT |
| | | } SDL_GLattr; |
| | | |
| | | typedef enum |
| | | { |
| | | SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, |
| | | SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, |
| | | SDL_GL_CONTEXT_PROFILE_ES = 0x0004 |
| | | } SDL_GLprofile; |
| | | |
| | | typedef enum |
| | | { |
| | | SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001, |
| | | SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002, |
| | | SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = 0x0004, |
| | | SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008 |
| | | } SDL_GLcontextFlag; |
| | | |
| | | |
| | | /* Function prototypes */ |
| | | |
| | | /** |
| | | * \brief Get the number of video drivers compiled into SDL |
| | | * |
| | | * \sa SDL_GetVideoDriver() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void); |
| | | |
| | | /** |
| | | * \brief Get the name of a built in video driver. |
| | | * |
| | | * \note The video drivers are presented in the order in which they are |
| | | * normally checked during initialization. |
| | | * |
| | | * \sa SDL_GetNumVideoDrivers() |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index); |
| | | |
| | | /** |
| | | * \brief Initialize the video subsystem, optionally specifying a video driver. |
| | | * |
| | | * \param driver_name Initialize a specific driver by name, or NULL for the |
| | | * default video driver. |
| | | * |
| | | * \return 0 on success, -1 on error |
| | | * |
| | | * This function initializes the video subsystem; setting up a connection |
| | | * to the window manager, etc, and determines the available display modes |
| | | * and pixel formats, but does not initialize a window or graphics mode. |
| | | * |
| | | * \sa SDL_VideoQuit() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name); |
| | | |
| | | /** |
| | | * \brief Shuts down the video subsystem. |
| | | * |
| | | * This function closes all windows, and restores the original video mode. |
| | | * |
| | | * \sa SDL_VideoInit() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_VideoQuit(void); |
| | | |
| | | /** |
| | | * \brief Returns the name of the currently initialized video driver. |
| | | * |
| | | * \return The name of the current video driver or NULL if no driver |
| | | * has been initialized |
| | | * |
| | | * \sa SDL_GetNumVideoDrivers() |
| | | * \sa SDL_GetVideoDriver() |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_GetCurrentVideoDriver(void); |
| | | |
| | | /** |
| | | * \brief Returns the number of available video displays. |
| | | * |
| | | * \sa SDL_GetDisplayBounds() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void); |
| | | |
| | | /** |
| | | * \brief Get the name of a display in UTF-8 encoding |
| | | * |
| | | * \return The name of a display, or NULL for an invalid display index. |
| | | * |
| | | * \sa SDL_GetNumVideoDisplays() |
| | | */ |
| | | extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex); |
| | | |
| | | /** |
| | | * \brief Get the desktop area represented by a display, with the primary |
| | | * display located at 0,0 |
| | | * |
| | | * \return 0 on success, or -1 if the index is out of range. |
| | | * |
| | | * \sa SDL_GetNumVideoDisplays() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect); |
| | | |
| | | /** |
| | | * \brief Returns the number of available display modes. |
| | | * |
| | | * \sa SDL_GetDisplayMode() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(int displayIndex); |
| | | |
| | | /** |
| | | * \brief Fill in information about a specific display mode. |
| | | * |
| | | * \note The display modes are sorted in this priority: |
| | | * \li bits per pixel -> more colors to fewer colors |
| | | * \li width -> largest to smallest |
| | | * \li height -> largest to smallest |
| | | * \li refresh rate -> highest to lowest |
| | | * |
| | | * \sa SDL_GetNumDisplayModes() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int displayIndex, int modeIndex, |
| | | SDL_DisplayMode * mode); |
| | | |
| | | /** |
| | | * \brief Fill in information about the desktop display mode. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode * mode); |
| | | |
| | | /** |
| | | * \brief Fill in information about the current display mode. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode * mode); |
| | | |
| | | |
| | | /** |
| | | * \brief Get the closest match to the requested display mode. |
| | | * |
| | | * \param displayIndex The index of display from which mode should be queried. |
| | | * \param mode The desired display mode |
| | | * \param closest A pointer to a display mode to be filled in with the closest |
| | | * match of the available display modes. |
| | | * |
| | | * \return The passed in value \c closest, or NULL if no matching video mode |
| | | * was available. |
| | | * |
| | | * The available display modes are scanned, and \c closest is filled in with the |
| | | * closest mode matching the requested mode and returned. The mode format and |
| | | * refresh_rate default to the desktop mode if they are 0. The modes are |
| | | * scanned with size being first priority, format being second priority, and |
| | | * finally checking the refresh_rate. If all the available modes are too |
| | | * small, then NULL is returned. |
| | | * |
| | | * \sa SDL_GetNumDisplayModes() |
| | | * \sa SDL_GetDisplayMode() |
| | | */ |
| | | extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest); |
| | | |
| | | /** |
| | | * \brief Get the display index associated with a window. |
| | | * |
| | | * \return the display index of the display containing the center of the |
| | | * window, or -1 on error. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetWindowDisplayIndex(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Set the display mode used when a fullscreen window is visible. |
| | | * |
| | | * By default the window's dimensions and the desktop format and refresh rate |
| | | * are used. |
| | | * |
| | | * \param window The window for which the display mode should be set. |
| | | * \param mode The mode to use, or NULL for the default mode. |
| | | * |
| | | * \return 0 on success, or -1 if setting the display mode failed. |
| | | * |
| | | * \sa SDL_GetWindowDisplayMode() |
| | | * \sa SDL_SetWindowFullscreen() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetWindowDisplayMode(SDL_Window * window, |
| | | const SDL_DisplayMode |
| | | * mode); |
| | | |
| | | /** |
| | | * \brief Fill in information about the display mode used when a fullscreen |
| | | * window is visible. |
| | | * |
| | | * \sa SDL_SetWindowDisplayMode() |
| | | * \sa SDL_SetWindowFullscreen() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetWindowDisplayMode(SDL_Window * window, |
| | | SDL_DisplayMode * mode); |
| | | |
| | | /** |
| | | * \brief Get the pixel format associated with the window. |
| | | */ |
| | | extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Create a window with the specified position, dimensions, and flags. |
| | | * |
| | | * \param title The title of the window, in UTF-8 encoding. |
| | | * \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or |
| | | * ::SDL_WINDOWPOS_UNDEFINED. |
| | | * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or |
| | | * ::SDL_WINDOWPOS_UNDEFINED. |
| | | * \param w The width of the window. |
| | | * \param h The height of the window. |
| | | * \param flags The flags for the window, a mask of any of the following: |
| | | * ::SDL_WINDOW_FULLSCREEN, ::SDL_WINDOW_OPENGL, |
| | | * ::SDL_WINDOW_SHOWN, ::SDL_WINDOW_BORDERLESS, |
| | | * ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED, |
| | | * ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_INPUT_GRABBED. |
| | | * |
| | | * \return The id of the window created, or zero if window creation failed. |
| | | * |
| | | * \sa SDL_DestroyWindow() |
| | | */ |
| | | extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, |
| | | int x, int y, int w, |
| | | int h, Uint32 flags); |
| | | |
| | | /** |
| | | * \brief Create an SDL window from an existing native window. |
| | | * |
| | | * \param data A pointer to driver-dependent window creation data |
| | | * |
| | | * \return The id of the window created, or zero if window creation failed. |
| | | * |
| | | * \sa SDL_DestroyWindow() |
| | | */ |
| | | extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowFrom(const void *data); |
| | | |
| | | /** |
| | | * \brief Get the numeric ID of a window, for logging purposes. |
| | | */ |
| | | extern DECLSPEC Uint32 SDLCALL SDL_GetWindowID(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Get a window from a stored ID, or NULL if it doesn't exist. |
| | | */ |
| | | extern DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(Uint32 id); |
| | | |
| | | /** |
| | | * \brief Get the window flags. |
| | | */ |
| | | extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Set the title of a window, in UTF-8 format. |
| | | * |
| | | * \sa SDL_GetWindowTitle() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_Window * window, |
| | | const char *title); |
| | | |
| | | /** |
| | | * \brief Get the title of a window, in UTF-8 format. |
| | | * |
| | | * \sa SDL_SetWindowTitle() |
| | | */ |
| | | extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Set the icon for a window. |
| | | * |
| | | * \param window The window for which the icon should be set. |
| | | * \param icon The icon for the window. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window, |
| | | SDL_Surface * icon); |
| | | |
| | | /** |
| | | * \brief Associate an arbitrary named pointer with a window. |
| | | * |
| | | * \param window The window to associate with the pointer. |
| | | * \param name The name of the pointer. |
| | | * \param userdata The associated pointer. |
| | | * |
| | | * \return The previous value associated with 'name' |
| | | * |
| | | * \note The name is case-sensitive. |
| | | * |
| | | * \sa SDL_GetWindowData() |
| | | */ |
| | | extern DECLSPEC void* SDLCALL SDL_SetWindowData(SDL_Window * window, |
| | | const char *name, |
| | | void *userdata); |
| | | |
| | | /** |
| | | * \brief Retrieve the data pointer associated with a window. |
| | | * |
| | | * \param window The window to query. |
| | | * \param name The name of the pointer. |
| | | * |
| | | * \return The value associated with 'name' |
| | | * |
| | | * \sa SDL_SetWindowData() |
| | | */ |
| | | extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window, |
| | | const char *name); |
| | | |
| | | /** |
| | | * \brief Set the position of a window. |
| | | * |
| | | * \param window The window to reposition. |
| | | * \param x The x coordinate of the window, ::SDL_WINDOWPOS_CENTERED, or |
| | | ::SDL_WINDOWPOS_UNDEFINED. |
| | | * \param y The y coordinate of the window, ::SDL_WINDOWPOS_CENTERED, or |
| | | ::SDL_WINDOWPOS_UNDEFINED. |
| | | * |
| | | * \note The window coordinate origin is the upper left of the display. |
| | | * |
| | | * \sa SDL_GetWindowPosition() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window, |
| | | int x, int y); |
| | | |
| | | /** |
| | | * \brief Get the position of a window. |
| | | * |
| | | * \param window The window to query. |
| | | * \param x Pointer to variable for storing the x position, may be NULL |
| | | * \param y Pointer to variable for storing the y position, may be NULL |
| | | * |
| | | * \sa SDL_SetWindowPosition() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window, |
| | | int *x, int *y); |
| | | |
| | | /** |
| | | * \brief Set the size of a window's client area. |
| | | * |
| | | * \param window The window to resize. |
| | | * \param w The width of the window, must be >0 |
| | | * \param h The height of the window, must be >0 |
| | | * |
| | | * \note You can't change the size of a fullscreen window, it automatically |
| | | * matches the size of the display mode. |
| | | * |
| | | * \sa SDL_GetWindowSize() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, |
| | | int h); |
| | | |
| | | /** |
| | | * \brief Get the size of a window's client area. |
| | | * |
| | | * \param window The window to query. |
| | | * \param w Pointer to variable for storing the width, may be NULL |
| | | * \param h Pointer to variable for storing the height, may be NULL |
| | | * |
| | | * \sa SDL_SetWindowSize() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w, |
| | | int *h); |
| | | |
| | | /** |
| | | * \brief Set the minimum size of a window's client area. |
| | | * |
| | | * \param window The window to set a new minimum size. |
| | | * \param min_w The minimum width of the window, must be >0 |
| | | * \param min_h The minimum height of the window, must be >0 |
| | | * |
| | | * \note You can't change the minimum size of a fullscreen window, it |
| | | * automatically matches the size of the display mode. |
| | | * |
| | | * \sa SDL_GetWindowMinimumSize() |
| | | * \sa SDL_SetWindowMaximumSize() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetWindowMinimumSize(SDL_Window * window, |
| | | int min_w, int min_h); |
| | | |
| | | /** |
| | | * \brief Get the minimum size of a window's client area. |
| | | * |
| | | * \param window The window to query. |
| | | * \param w Pointer to variable for storing the minimum width, may be NULL |
| | | * \param h Pointer to variable for storing the minimum height, may be NULL |
| | | * |
| | | * \sa SDL_GetWindowMaximumSize() |
| | | * \sa SDL_SetWindowMinimumSize() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GetWindowMinimumSize(SDL_Window * window, |
| | | int *w, int *h); |
| | | |
| | | /** |
| | | * \brief Set the maximum size of a window's client area. |
| | | * |
| | | * \param window The window to set a new maximum size. |
| | | * \param max_w The maximum width of the window, must be >0 |
| | | * \param max_h The maximum height of the window, must be >0 |
| | | * |
| | | * \note You can't change the maximum size of a fullscreen window, it |
| | | * automatically matches the size of the display mode. |
| | | * |
| | | * \sa SDL_GetWindowMaximumSize() |
| | | * \sa SDL_SetWindowMinimumSize() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetWindowMaximumSize(SDL_Window * window, |
| | | int max_w, int max_h); |
| | | |
| | | /** |
| | | * \brief Get the maximum size of a window's client area. |
| | | * |
| | | * \param window The window to query. |
| | | * \param w Pointer to variable for storing the maximum width, may be NULL |
| | | * \param h Pointer to variable for storing the maximum height, may be NULL |
| | | * |
| | | * \sa SDL_GetWindowMinimumSize() |
| | | * \sa SDL_SetWindowMaximumSize() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window, |
| | | int *w, int *h); |
| | | |
| | | /** |
| | | * \brief Set the border state of a window. |
| | | * |
| | | * This will add or remove the window's SDL_WINDOW_BORDERLESS flag and |
| | | * add or remove the border from the actual window. This is a no-op if the |
| | | * window's border already matches the requested state. |
| | | * |
| | | * \param window The window of which to change the border state. |
| | | * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border. |
| | | * |
| | | * \note You can't change the border state of a fullscreen window. |
| | | * |
| | | * \sa SDL_GetWindowFlags() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window, |
| | | SDL_bool bordered); |
| | | |
| | | /** |
| | | * \brief Show a window. |
| | | * |
| | | * \sa SDL_HideWindow() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Hide a window. |
| | | * |
| | | * \sa SDL_ShowWindow() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Raise a window above other windows and set the input focus. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Make a window as large as possible. |
| | | * |
| | | * \sa SDL_RestoreWindow() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Minimize a window to an iconic representation. |
| | | * |
| | | * \sa SDL_RestoreWindow() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Restore the size and position of a minimized or maximized window. |
| | | * |
| | | * \sa SDL_MaximizeWindow() |
| | | * \sa SDL_MinimizeWindow() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Set a window's fullscreen state. |
| | | * |
| | | * \return 0 on success, or -1 if setting the display mode failed. |
| | | * |
| | | * \sa SDL_SetWindowDisplayMode() |
| | | * \sa SDL_GetWindowDisplayMode() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window, |
| | | Uint32 flags); |
| | | |
| | | /** |
| | | * \brief Get the SDL surface associated with the window. |
| | | * |
| | | * \return The window's framebuffer surface, or NULL on error. |
| | | * |
| | | * A new surface will be created with the optimal format for the window, |
| | | * if necessary. This surface will be freed when the window is destroyed. |
| | | * |
| | | * \note You may not combine this with 3D or the rendering API on this window. |
| | | * |
| | | * \sa SDL_UpdateWindowSurface() |
| | | * \sa SDL_UpdateWindowSurfaceRects() |
| | | */ |
| | | extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Copy the window surface to the screen. |
| | | * |
| | | * \return 0 on success, or -1 on error. |
| | | * |
| | | * \sa SDL_GetWindowSurface() |
| | | * \sa SDL_UpdateWindowSurfaceRects() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Copy a number of rectangles on the window surface to the screen. |
| | | * |
| | | * \return 0 on success, or -1 on error. |
| | | * |
| | | * \sa SDL_GetWindowSurface() |
| | | * \sa SDL_UpdateWindowSurfaceRect() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window, |
| | | const SDL_Rect * rects, |
| | | int numrects); |
| | | |
| | | /** |
| | | * \brief Set a window's input grab mode. |
| | | * |
| | | * \param window The window for which the input grab mode should be set. |
| | | * \param grabbed This is SDL_TRUE to grab input, and SDL_FALSE to release input. |
| | | * |
| | | * \sa SDL_GetWindowGrab() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window, |
| | | SDL_bool grabbed); |
| | | |
| | | /** |
| | | * \brief Get a window's input grab mode. |
| | | * |
| | | * \return This returns SDL_TRUE if input is grabbed, and SDL_FALSE otherwise. |
| | | * |
| | | * \sa SDL_SetWindowGrab() |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Set the brightness (gamma correction) for a window. |
| | | * |
| | | * \return 0 on success, or -1 if setting the brightness isn't supported. |
| | | * |
| | | * \sa SDL_GetWindowBrightness() |
| | | * \sa SDL_SetWindowGammaRamp() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float brightness); |
| | | |
| | | /** |
| | | * \brief Get the brightness (gamma correction) for a window. |
| | | * |
| | | * \return The last brightness value passed to SDL_SetWindowBrightness() |
| | | * |
| | | * \sa SDL_SetWindowBrightness() |
| | | */ |
| | | extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Set the gamma ramp for a window. |
| | | * |
| | | * \param window The window for which the gamma ramp should be set. |
| | | * \param red The translation table for the red channel, or NULL. |
| | | * \param green The translation table for the green channel, or NULL. |
| | | * \param blue The translation table for the blue channel, or NULL. |
| | | * |
| | | * \return 0 on success, or -1 if gamma ramps are unsupported. |
| | | * |
| | | * Set the gamma translation table for the red, green, and blue channels |
| | | * of the video hardware. Each table is an array of 256 16-bit quantities, |
| | | * representing a mapping between the input and output for that channel. |
| | | * The input is the index into the array, and the output is the 16-bit |
| | | * gamma value at that index, scaled to the output color precision. |
| | | * |
| | | * \sa SDL_GetWindowGammaRamp() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_SetWindowGammaRamp(SDL_Window * window, |
| | | const Uint16 * red, |
| | | const Uint16 * green, |
| | | const Uint16 * blue); |
| | | |
| | | /** |
| | | * \brief Get the gamma ramp for a window. |
| | | * |
| | | * \param window The window from which the gamma ramp should be queried. |
| | | * \param red A pointer to a 256 element array of 16-bit quantities to hold |
| | | * the translation table for the red channel, or NULL. |
| | | * \param green A pointer to a 256 element array of 16-bit quantities to hold |
| | | * the translation table for the green channel, or NULL. |
| | | * \param blue A pointer to a 256 element array of 16-bit quantities to hold |
| | | * the translation table for the blue channel, or NULL. |
| | | * |
| | | * \return 0 on success, or -1 if gamma ramps are unsupported. |
| | | * |
| | | * \sa SDL_SetWindowGammaRamp() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window, |
| | | Uint16 * red, |
| | | Uint16 * green, |
| | | Uint16 * blue); |
| | | |
| | | /** |
| | | * \brief Destroy a window. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window * window); |
| | | |
| | | |
| | | /** |
| | | * \brief Returns whether the screensaver is currently enabled (default on). |
| | | * |
| | | * \sa SDL_EnableScreenSaver() |
| | | * \sa SDL_DisableScreenSaver() |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenSaverEnabled(void); |
| | | |
| | | /** |
| | | * \brief Allow the screen to be blanked by a screensaver |
| | | * |
| | | * \sa SDL_IsScreenSaverEnabled() |
| | | * \sa SDL_DisableScreenSaver() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void); |
| | | |
| | | /** |
| | | * \brief Prevent the screen from being blanked by a screensaver |
| | | * |
| | | * \sa SDL_IsScreenSaverEnabled() |
| | | * \sa SDL_EnableScreenSaver() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void); |
| | | |
| | | |
| | | /** |
| | | * \name OpenGL support functions |
| | | */ |
| | | /*@{*/ |
| | | |
| | | /** |
| | | * \brief Dynamically load an OpenGL library. |
| | | * |
| | | * \param path The platform dependent OpenGL library name, or NULL to open the |
| | | * default OpenGL library. |
| | | * |
| | | * \return 0 on success, or -1 if the library couldn't be loaded. |
| | | * |
| | | * This should be done after initializing the video driver, but before |
| | | * creating any OpenGL windows. If no OpenGL library is loaded, the default |
| | | * library will be loaded upon creation of the first OpenGL window. |
| | | * |
| | | * \note If you do this, you need to retrieve all of the GL functions used in |
| | | * your program from the dynamic library using SDL_GL_GetProcAddress(). |
| | | * |
| | | * \sa SDL_GL_GetProcAddress() |
| | | * \sa SDL_GL_UnloadLibrary() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); |
| | | |
| | | /** |
| | | * \brief Get the address of an OpenGL function. |
| | | */ |
| | | extern DECLSPEC void *SDLCALL SDL_GL_GetProcAddress(const char *proc); |
| | | |
| | | /** |
| | | * \brief Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary(). |
| | | * |
| | | * \sa SDL_GL_LoadLibrary() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void); |
| | | |
| | | /** |
| | | * \brief Return true if an OpenGL extension is supported for the current |
| | | * context. |
| | | */ |
| | | extern DECLSPEC SDL_bool SDLCALL SDL_GL_ExtensionSupported(const char |
| | | *extension); |
| | | |
| | | /** |
| | | * \brief Set an OpenGL window attribute before window creation. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); |
| | | |
| | | /** |
| | | * \brief Get the actual value for an attribute from the current context. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value); |
| | | |
| | | /** |
| | | * \brief Create an OpenGL context for use with an OpenGL window, and make it |
| | | * current. |
| | | * |
| | | * \sa SDL_GL_DeleteContext() |
| | | */ |
| | | extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window * |
| | | window); |
| | | |
| | | /** |
| | | * \brief Set up an OpenGL context for rendering into an OpenGL window. |
| | | * |
| | | * \note The context must have been created with a compatible window. |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GL_MakeCurrent(SDL_Window * window, |
| | | SDL_GLContext context); |
| | | |
| | | /** |
| | | * \brief Set the swap interval for the current OpenGL context. |
| | | * |
| | | * \param interval 0 for immediate updates, 1 for updates synchronized with the |
| | | * vertical retrace. If the system supports it, you may |
| | | * specify -1 to allow late swaps to happen immediately |
| | | * instead of waiting for the next retrace. |
| | | * |
| | | * \return 0 on success, or -1 if setting the swap interval is not supported. |
| | | * |
| | | * \sa SDL_GL_GetSwapInterval() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval); |
| | | |
| | | /** |
| | | * \brief Get the swap interval for the current OpenGL context. |
| | | * |
| | | * \return 0 if there is no vertical retrace synchronization, 1 if the buffer |
| | | * swap is synchronized with the vertical retrace, and -1 if late |
| | | * swaps happen immediately instead of waiting for the next retrace. |
| | | * If the system can't determine the swap interval, or there isn't a |
| | | * valid current context, this will return 0 as a safe default. |
| | | * |
| | | * \sa SDL_GL_SetSwapInterval() |
| | | */ |
| | | extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void); |
| | | |
| | | /** |
| | | * \brief Swap the OpenGL buffers for a window, if double-buffering is |
| | | * supported. |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window); |
| | | |
| | | /** |
| | | * \brief Delete an OpenGL context. |
| | | * |
| | | * \sa SDL_GL_CreateContext() |
| | | */ |
| | | extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context); |
| | | |
| | | /*@}*//*OpenGL support functions*/ |
| | | |
| | | |
| | | /* Ends C function definitions when using C++ */ |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | #include "close_code.h" |
| | | |
| | | #endif /* _SDL_video_h */ |
| | | |
| | | /* vi: set ts=4 sw=4 expandtab: */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file begin_code.h |
| | | * |
| | | * This file sets things up for C dynamic library function definitions, |
| | | * static inlined functions, and structures aligned at 4-byte alignment. |
| | | * If you don't like ugly C preprocessor code, don't look at this file. :) |
| | | */ |
| | | |
| | | /* This shouldn't be nested -- included it around code only. */ |
| | | #ifdef _begin_code_h |
| | | #error Nested inclusion of begin_code.h |
| | | #endif |
| | | #define _begin_code_h |
| | | |
| | | /* Some compilers use a special export keyword */ |
| | | #ifndef DECLSPEC |
| | | # if defined(__BEOS__) || defined(__HAIKU__) |
| | | # if defined(__GNUC__) |
| | | # define DECLSPEC __declspec(dllexport) |
| | | # else |
| | | # define DECLSPEC __declspec(export) |
| | | # endif |
| | | # elif defined(__WIN32__) |
| | | # ifdef __BORLANDC__ |
| | | # ifdef BUILD_SDL |
| | | # define DECLSPEC |
| | | # else |
| | | # define DECLSPEC __declspec(dllimport) |
| | | # endif |
| | | # else |
| | | # define DECLSPEC __declspec(dllexport) |
| | | # endif |
| | | # else |
| | | # if defined(__GNUC__) && __GNUC__ >= 4 |
| | | # define DECLSPEC __attribute__ ((visibility("default"))) |
| | | # else |
| | | # define DECLSPEC |
| | | # endif |
| | | # endif |
| | | #endif |
| | | |
| | | /* By default SDL uses the C calling convention */ |
| | | #ifndef SDLCALL |
| | | #if defined(__WIN32__) && !defined(__GNUC__) |
| | | #define SDLCALL __cdecl |
| | | #else |
| | | #define SDLCALL |
| | | #endif |
| | | #endif /* SDLCALL */ |
| | | |
| | | /* Removed DECLSPEC on Symbian OS because SDL cannot be a DLL in EPOC */ |
| | | #ifdef __SYMBIAN32__ |
| | | #undef DECLSPEC |
| | | #define DECLSPEC |
| | | #endif /* __SYMBIAN32__ */ |
| | | |
| | | /* Force structure packing at 4 byte alignment. |
| | | This is necessary if the header is included in code which has structure |
| | | packing set to an alternate value, say for loading structures from disk. |
| | | The packing is reset to the previous value in close_code.h |
| | | */ |
| | | #if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) |
| | | #ifdef _MSC_VER |
| | | #pragma warning(disable: 4103) |
| | | #endif |
| | | #ifdef __BORLANDC__ |
| | | #pragma nopackwarning |
| | | #endif |
| | | #ifdef _M_X64 |
| | | /* Use 8-byte alignment on 64-bit architectures, so pointers are aligned */ |
| | | #pragma pack(push,8) |
| | | #else |
| | | #pragma pack(push,4) |
| | | #endif |
| | | #endif /* Compiler needs structure packing set */ |
| | | |
| | | /* Set up compiler-specific options for inlining functions */ |
| | | #ifndef SDL_INLINE_OKAY |
| | | #ifdef __GNUC__ |
| | | #define SDL_INLINE_OKAY |
| | | #else |
| | | /* Add any special compiler-specific cases here */ |
| | | #if defined(_MSC_VER) || defined(__BORLANDC__) || \ |
| | | defined(__DMC__) || defined(__SC__) || \ |
| | | defined(__WATCOMC__) || defined(__LCC__) || \ |
| | | defined(__DECC) |
| | | #ifndef __inline__ |
| | | #define __inline__ __inline |
| | | #endif |
| | | #define SDL_INLINE_OKAY |
| | | #else |
| | | #if !defined(__MRC__) && !defined(_SGI_SOURCE) |
| | | #ifndef __inline__ |
| | | #define __inline__ inline |
| | | #endif |
| | | #define SDL_INLINE_OKAY |
| | | #endif /* Not a funky compiler */ |
| | | #endif /* Visual C++ */ |
| | | #endif /* GNU C */ |
| | | #endif /* SDL_INLINE_OKAY */ |
| | | |
| | | /* If inlining isn't supported, remove "__inline__", turning static |
| | | inlined functions into static functions (resulting in code bloat |
| | | in all files which include the offending header files) |
| | | */ |
| | | #ifndef SDL_INLINE_OKAY |
| | | #define __inline__ |
| | | #endif |
| | | |
| | | #ifndef SDL_FORCE_INLINE |
| | | #if defined(_MSC_VER) |
| | | #define SDL_FORCE_INLINE __forceinline |
| | | #elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) |
| | | #define SDL_FORCE_INLINE __attribute__((always_inline)) static inline |
| | | #else |
| | | #define SDL_FORCE_INLINE static __inline__ |
| | | #endif |
| | | #endif |
| | | |
| | | /* Apparently this is needed by several Windows compilers */ |
| | | #if !defined(__MACH__) |
| | | #ifndef NULL |
| | | #ifdef __cplusplus |
| | | #define NULL 0 |
| | | #else |
| | | #define NULL ((void *)0) |
| | | #endif |
| | | #endif /* NULL */ |
| | | #endif /* ! Mac OS X - breaks precompiled headers */ |
| New file |
| | |
| | | /* |
| | | Simple DirectMedia Layer |
| | | Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org> |
| | | |
| | | This software is provided 'as-is', without any express or implied |
| | | warranty. In no event will the authors be held liable for any damages |
| | | arising from the use of this software. |
| | | |
| | | Permission is granted to anyone to use this software for any purpose, |
| | | including commercial applications, and to alter it and redistribute it |
| | | freely, subject to the following restrictions: |
| | | |
| | | 1. The origin of this software must not be misrepresented; you must not |
| | | claim that you wrote the original software. If you use this software |
| | | in a product, an acknowledgment in the product documentation would be |
| | | appreciated but is not required. |
| | | 2. Altered source versions must be plainly marked as such, and must not be |
| | | misrepresented as being the original software. |
| | | 3. This notice may not be removed or altered from any source distribution. |
| | | */ |
| | | |
| | | /** |
| | | * \file close_code.h |
| | | * |
| | | * This file reverses the effects of begin_code.h and should be included |
| | | * after you finish any function and structure declarations in your headers |
| | | */ |
| | | |
| | | #undef _begin_code_h |
| | | |
| | | /* Reset structure packing at previous byte alignment */ |
| | | #if defined(_MSC_VER) || defined(__MWERKS__) || defined(__WATCOMC__) || defined(__BORLANDC__) |
| | | #ifdef __BORLANDC__ |
| | | #pragma nopackwarning |
| | | #endif |
| | | #pragma pack(pop) |
| | | #endif /* Compiler needs structure packing set */ |
| New file |
| | |
| | | libSDL2-2.0.so.0.0.0 |
| New file |
| | |
| | | libSDL2-2.0.so.0.0.0 |