SDL3pp
A slim C++ wrapper for SDL3
Loading...
Searching...
No Matches
Typedefs | Functions
Clipboard Handling

SDL provides access to the system clipboard, both for reading information from other processes and publishing information of its own. More...

Typedefs

using SDL::ClipboardDataCallback = SDL_ClipboardDataCallback
 Callback function that will be called when data for the specified mime-type is requested by the OS.
 
using SDL::ClipboardDataCB = std::function< SourceBytes(const char *mime_type)>
 Callback function that will be called when data for the specified mime-type is requested by the OS.
 
using SDL::ClipboardCleanupCallback = SDL_ClipboardCleanupCallback
 Callback function that will be called when the clipboard is cleared, or new data is set.
 
using SDL::ClipboardCleanupCB = std::function< void()>
 Callback function that will be called when the clipboard is cleared, or new data is set.
 

Functions

void SDL::SetClipboardText (StringParam text)
 Put UTF-8 text into the clipboard.
 
StringResult SDL::GetClipboardText ()
 Get UTF-8 text from the clipboard.
 
bool SDL::HasClipboardText ()
 Query whether the clipboard exists and contains a non-empty text string.
 
void SDL::SetPrimarySelectionText (StringParam text)
 Put UTF-8 text into the primary selection.
 
StringResult SDL::GetPrimarySelectionText ()
 Get UTF-8 text from the primary selection.
 
bool SDL::HasPrimarySelectionText ()
 Query whether the primary selection exists and contains a non-empty text string.
 
void SDL::SetClipboardData (ClipboardDataCallback callback, ClipboardCleanupCallback cleanup, void *userdata, std::span< const char * > mime_types)
 Offer clipboard data to the OS.
 
void SDL::SetClipboardData (ClipboardDataCB callback, ClipboardCleanupCB cleanup, std::span< const char * > mime_types)
 Offer clipboard data to the OS.
 
void SDL::ClearClipboardData ()
 Clear the clipboard data.
 
StringResult SDL::GetClipboardData (StringParam mime_type)
 Get the data from clipboard for a given mime type.
 
template<class T >
OwnArray< T > SDL::GetClipboardDataAs (StringParam mime_type)
 Get the data from clipboard for a given mime type.
 
bool SDL::HasClipboardData (StringParam mime_type)
 Query whether there is data in the clipboard for the provided mime type.
 
OwnArray< char * > SDL::GetClipboardMimeTypes ()
 Retrieve the list of mime types available in the clipboard.
 

Detailed Description

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 GetClipboardText() and 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 GetClipboardData() and telling it the mimetype of the data you want. But how does one know if that format is available? HasClipboardData() can report if a specific mimetype is offered, and 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 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 GetPrimarySelectionText() and 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.

Typedef Documentation

◆ ClipboardCleanupCallback

using SDL::ClipboardCleanupCallback = typedef SDL_ClipboardCleanupCallback
Parameters
userdataa pointer to provided user data.
Since
This function is available since SDL 3.2.0.
See also
SetClipboardData

◆ ClipboardCleanupCB

using SDL::ClipboardCleanupCB = typedef std::function<void()>
Parameters
userdataa pointer to provided user data.
Since
This function is available since SDL 3.2.0.
See also
SetClipboardData
ClipboardCleanupCallback

◆ ClipboardDataCallback

using SDL::ClipboardDataCallback = typedef SDL_ClipboardDataCallback

The callback function is called with nullptr as the mime_type when the clipboard is cleared or new data is set. The clipboard is automatically cleared in Quit().

Parameters
userdataa pointer to provided user data.
mime_typethe requested mime-type.
sizea pointer filled in with the length of the returned data.
Returns
a pointer to the data for the provided mime-type. Returning nullptr 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.
See also
SetClipboardData

◆ ClipboardDataCB

using SDL::ClipboardDataCB = typedef std::function<SourceBytes(const char* mime_type)>

The callback function is called with nullptr as the mime_type when the clipboard is cleared or new data is set. The clipboard is automatically cleared in Quit().

Parameters
userdataa pointer to provided user data.
mime_typethe requested mime-type.
sizea pointer filled in with the length of the returned data.
Returns
a pointer to the data for the provided mime-type. Returning nullptr 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.
See also
SetClipboardData
ClipboardDataCallback

Function Documentation

◆ ClearClipboardData()

void SDL::ClearClipboardData ( )
inline
Exceptions
Erroron failure.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
SetClipboardData

◆ GetClipboardData()

StringResult SDL::GetClipboardData ( StringParam  mime_type)
inline

The size of text data does not include the terminator, but the text is guaranteed to be null terminated.

Parameters
mime_typethe mime type to read from the clipboard.
Returns
the retrieved data buffer or nullptr on failure; call GetError() for more information.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
HasClipboardData
SetClipboardData

◆ GetClipboardDataAs()

template<class T >
OwnArray< T > SDL::GetClipboardDataAs ( StringParam  mime_type)
inline

The size of text data does not include the terminator, but the text is guaranteed to be null terminated.

Parameters
mime_typethe mime type to read from the clipboard.
Returns
the retrieved data buffer or nullptr on failure; call GetError() for more information.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
HasClipboardData
SetClipboardData

◆ GetClipboardMimeTypes()

OwnArray< char * > SDL::GetClipboardMimeTypes ( )
inline
Returns
a null terminated array of strings with mime types, or empty on failure; call GetError() for more information.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
SetClipboardData

◆ GetClipboardText()

StringResult SDL::GetClipboardText ( )
inline

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.
Exceptions
Erroron failure.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
HasClipboardText
SetClipboardText

◆ GetPrimarySelectionText()

StringResult SDL::GetPrimarySelectionText ( )
inline

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.
Exceptions
Erroron failure.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
HasPrimarySelectionText
SetPrimarySelectionText

◆ HasClipboardData()

bool SDL::HasClipboardData ( StringParam  mime_type)
inline
Parameters
mime_typethe 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.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
SetClipboardData
GetClipboardData

◆ HasClipboardText()

bool SDL::HasClipboardText ( )
inline
Returns
true if the clipboard has text, or false if it does not.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
GetClipboardText
SetClipboardText

◆ HasPrimarySelectionText()

bool SDL::HasPrimarySelectionText ( )
inline
Returns
true if the primary selection has text, or false if it does not.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
GetPrimarySelectionText
SetPrimarySelectionText

◆ SetClipboardData() [1/2]

void SDL::SetClipboardData ( ClipboardDataCallback  callback,
ClipboardCleanupCallback  cleanup,
void *  userdata,
std::span< const char * >  mime_types 
)
inline

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).

Parameters
callbacka function pointer to the function that provides the clipboard data.
cleanupa function pointer to the function that cleans up the clipboard data.
userdataan opaque pointer that will be forwarded to the callbacks.
mime_typesa list of mime-types that are being offered.
Exceptions
Erroron failure.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
ClearClipboardData
GetClipboardData
HasClipboardData

◆ SetClipboardData() [2/2]

void SDL::SetClipboardData ( ClipboardDataCB  callback,
ClipboardCleanupCB  cleanup,
std::span< const char * >  mime_types 
)
inline

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).

Parameters
callbacka function pointer to the function that provides the clipboard data.
cleanupa function pointer to the function that cleans up the clipboard data.
mime_typesa list of mime-types that are being offered.
Exceptions
Erroron failure.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
ClearClipboardData
GetClipboardData
HasClipboardData

◆ SetClipboardText()

void SDL::SetClipboardText ( StringParam  text)
inline
Parameters
textthe text to store in the clipboard.
Exceptions
Erroron failure.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
GetClipboardText
HasClipboardText

◆ SetPrimarySelectionText()

void SDL::SetPrimarySelectionText ( StringParam  text)
inline
Parameters
textthe text to store in the primary selection.
Exceptions
Erroron failure.
Thread safety:
This function should only be called on the main thread.
Since
This function is available since SDL 3.2.0.
See also
GetPrimarySelectionText
HasPrimarySelectionText