123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- /*
- Simple DirectMedia Layer
- Copyright (C) 1997-2025 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.
- */
- /**
- * # CategoryClipboard
- *
- * SDL provides access to the system clipboard, both for reading information
- * from other processes and publishing information of its own.
- *
- * This is not just text! SDL apps can access and publish data by mimetype.
- *
- * ## Basic use (text)
- *
- * Obtaining and publishing simple text to the system clipboard is as easy as
- * calling SDL_GetClipboardText() and SDL_SetClipboardText(), respectively.
- * These deal with C strings in UTF-8 encoding. Data transmission and encoding
- * conversion is completely managed by SDL.
- *
- * ## Clipboard callbacks (data other than text)
- *
- * Things get more complicated when the clipboard contains something other
- * than text. Not only can the system clipboard contain data of any type, in
- * some cases it can contain the same data in different formats! For example,
- * an image painting app might let the user copy a graphic to the clipboard,
- * and offers it in .BMP, .JPG, or .PNG format for other apps to consume.
- *
- * Obtaining clipboard data ("pasting") like this is a matter of calling
- * SDL_GetClipboardData() and telling it the mimetype of the data you want.
- * But how does one know if that format is available? SDL_HasClipboardData()
- * can report if a specific mimetype is offered, and
- * SDL_GetClipboardMimeTypes() can provide the entire list of mimetypes
- * available, so the app can decide what to do with the data and what formats
- * it can support.
- *
- * Setting the clipboard ("copying") to arbitrary data is done with
- * SDL_SetClipboardData. The app does not provide the data in this call, but
- * rather the mimetypes it is willing to provide and a callback function.
- * During the callback, the app will generate the data. This allows massive
- * data sets to be provided to the clipboard, without any data being copied
- * before it is explicitly requested. More specifically, it allows an app to
- * offer data in multiple formats without providing a copy of all of them
- * upfront. If the app has an image that it could provide in PNG or JPG
- * format, it doesn't have to encode it to either of those unless and until
- * something tries to paste it.
- *
- * ## Primary Selection
- *
- * The X11 and Wayland video targets have a concept of the "primary selection"
- * in addition to the usual clipboard. This is generally highlighted (but not
- * explicitly copied) text from various apps. SDL offers APIs for this through
- * SDL_GetPrimarySelectionText() and SDL_SetPrimarySelectionText(). SDL offers
- * these APIs on platforms without this concept, too, but only so far that it
- * will keep a copy of a string that the app sets for later retrieval; the
- * operating system will not ever attempt to change the string externally if
- * it doesn't support a primary selection.
- */
- #ifndef SDL_clipboard_h_
- #define SDL_clipboard_h_
- #include <SDL3/SDL_stdinc.h>
- #include <SDL3/SDL_error.h>
- #include <SDL3/SDL_begin_code.h>
- /* Set up for C function definitions, even when using C++ */
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* Function prototypes */
- /**
- * Put UTF-8 text into the clipboard.
- *
- * \param text the text to store in the clipboard.
- * \returns true on success or false on failure; call SDL_GetError() for more
- * information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_GetClipboardText
- * \sa SDL_HasClipboardText
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_SetClipboardText(const char *text);
- /**
- * Get UTF-8 text from the clipboard.
- *
- * This functions returns an empty string if there was not enough memory left
- * for a copy of the clipboard's content.
- *
- * \returns the clipboard text on success or an empty string on failure; call
- * SDL_GetError() for more information. This should be freed with
- * SDL_free() when it is no longer needed.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_HasClipboardText
- * \sa SDL_SetClipboardText
- */
- extern SDL_DECLSPEC char * SDLCALL SDL_GetClipboardText(void);
- /**
- * Query whether the clipboard exists and contains a non-empty text string.
- *
- * \returns true if the clipboard has text, or false if it does not.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_GetClipboardText
- * \sa SDL_SetClipboardText
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_HasClipboardText(void);
- /**
- * Put UTF-8 text into the primary selection.
- *
- * \param text the text to store in the primary selection.
- * \returns true on success or false on failure; call SDL_GetError() for more
- * information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_GetPrimarySelectionText
- * \sa SDL_HasPrimarySelectionText
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_SetPrimarySelectionText(const char *text);
- /**
- * Get UTF-8 text from the primary selection.
- *
- * This functions returns an empty string if there was not enough memory left
- * for a copy of the primary selection's content.
- *
- * \returns the primary selection text on success or an empty string on
- * failure; call SDL_GetError() for more information. This should be
- * freed with SDL_free() when it is no longer needed.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_HasPrimarySelectionText
- * \sa SDL_SetPrimarySelectionText
- */
- extern SDL_DECLSPEC char * SDLCALL SDL_GetPrimarySelectionText(void);
- /**
- * Query whether the primary selection exists and contains a non-empty text
- * string.
- *
- * \returns true if the primary selection has text, or false if it does not.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_GetPrimarySelectionText
- * \sa SDL_SetPrimarySelectionText
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_HasPrimarySelectionText(void);
- /**
- * Callback function that will be called when data for the specified mime-type
- * is requested by the OS.
- *
- * The callback function is called with NULL as the mime_type when the
- * clipboard is cleared or new data is set. The clipboard is automatically
- * cleared in SDL_Quit().
- *
- * \param userdata a pointer to provided user data.
- * \param mime_type the requested mime-type.
- * \param size a pointer filled in with the length of the returned data.
- * \returns a pointer to the data for the provided mime-type. Returning NULL
- * or setting length to 0 will cause no data to be sent to the
- * "receiver". It is up to the receiver to handle this. Essentially
- * returning no data is more or less undefined behavior and may cause
- * breakage in receiving applications. The returned data will not be
- * freed so it needs to be retained and dealt with internally.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_SetClipboardData
- */
- typedef const void *(SDLCALL *SDL_ClipboardDataCallback)(void *userdata, const char *mime_type, size_t *size);
- /**
- * Callback function that will be called when the clipboard is cleared, or new
- * data is set.
- *
- * \param userdata a pointer to provided user data.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_SetClipboardData
- */
- typedef void (SDLCALL *SDL_ClipboardCleanupCallback)(void *userdata);
- /**
- * Offer clipboard data to the OS.
- *
- * Tell the operating system that the application is offering clipboard data
- * for each of the provided mime-types. Once another application requests the
- * data the callback function will be called, allowing it to generate and
- * respond with the data for the requested mime-type.
- *
- * The size of text data does not include any terminator, and the text does
- * not need to be null terminated (e.g. you can directly copy a portion of a
- * document).
- *
- * \param callback a function pointer to the function that provides the
- * clipboard data.
- * \param cleanup a function pointer to the function that cleans up the
- * clipboard data.
- * \param userdata an opaque pointer that will be forwarded to the callbacks.
- * \param mime_types a list of mime-types that are being offered.
- * \param num_mime_types the number of mime-types in the mime_types list.
- * \returns true on success or false on failure; call SDL_GetError() for more
- * information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_ClearClipboardData
- * \sa SDL_GetClipboardData
- * \sa SDL_HasClipboardData
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_SetClipboardData(SDL_ClipboardDataCallback callback, SDL_ClipboardCleanupCallback cleanup, void *userdata, const char **mime_types, size_t num_mime_types);
- /**
- * Clear the clipboard data.
- *
- * \returns true on success or false on failure; call SDL_GetError() for more
- * information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_SetClipboardData
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_ClearClipboardData(void);
- /**
- * Get the data from clipboard for a given mime type.
- *
- * The size of text data does not include the terminator, but the text is
- * guaranteed to be null terminated.
- *
- * \param mime_type the mime type to read from the clipboard.
- * \param size a pointer filled in with the length of the returned data.
- * \returns the retrieved data buffer or NULL on failure; call SDL_GetError()
- * for more information. This should be freed with SDL_free() when it
- * is no longer needed.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_HasClipboardData
- * \sa SDL_SetClipboardData
- */
- extern SDL_DECLSPEC void * SDLCALL SDL_GetClipboardData(const char *mime_type, size_t *size);
- /**
- * Query whether there is data in the clipboard for the provided mime type.
- *
- * \param mime_type the mime type to check for data for.
- * \returns true if there exists data in clipboard for the provided mime type,
- * false if it does not.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_SetClipboardData
- * \sa SDL_GetClipboardData
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_HasClipboardData(const char *mime_type);
- /**
- * Retrieve the list of mime types available in the clipboard.
- *
- * \param num_mime_types a pointer filled with the number of mime types, may
- * be NULL.
- * \returns a null terminated array of strings with mime types, or NULL on
- * failure; call SDL_GetError() for more information. This should be
- * freed with SDL_free() when it is no longer needed.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.2.0.
- *
- * \sa SDL_SetClipboardData
- */
- extern SDL_DECLSPEC char ** SDLCALL SDL_GetClipboardMimeTypes(size_t *num_mime_types);
- /* Ends C function definitions when using C++ */
- #ifdef __cplusplus
- }
- #endif
- #include <SDL3/SDL_close_code.h>
- #endif /* SDL_clipboard_h_ */
|