SDL3pp
A slim C++ wrapper for SDL3
Loading...
Searching...
No Matches
SDL3pp_clipboard.h
1#ifndef SDL3PP_CLIPBOARD_H_
2#define SDL3PP_CLIPBOARD_H_
3
4#include <SDL3/SDL_clipboard.h>
5#include "SDL3pp_stdinc.h"
6
7namespace SDL {
8
79{
80 CheckError(SDL_SetClipboardText(text));
81}
82
100{
101 return StringResult{CheckError(SDL_GetClipboardText())};
102}
103
116inline bool HasClipboardText() { return SDL_HasClipboardText(); }
117
132{
133 CheckError(SDL_SetPrimarySelectionText(text));
134}
135
153{
154 return StringResult{CheckError(SDL_GetPrimarySelectionText())};
155}
156
170inline bool HasPrimarySelectionText() { return SDL_HasPrimarySelectionText(); }
171
193using ClipboardDataCallback = SDL_ClipboardDataCallback;
194
216using ClipboardDataCB = std::function<SourceBytes(const char* mime_type)>;
217
228using ClipboardCleanupCallback = SDL_ClipboardCleanupCallback;
229
239using ClipboardCleanupCB = std::function<void()>;
240
272 void* userdata,
273 std::span<const char*> mime_types)
274{
275 CheckError(SDL_SetClipboardData(
276 callback, cleanup, userdata, mime_types.data(), mime_types.size()));
277}
278
308 ClipboardCleanupCB cleanup,
309 std::span<const char*> mime_types)
310{
311 static ClipboardDataCB s_callback;
312 static ClipboardCleanupCB s_cleanup;
313 CheckError(SDL_ClearClipboardData());
314 s_callback = callback;
315 s_cleanup = cleanup;
317 [](void*, const char* mime_type, size_t* size) -> const void* {
318 auto source = s_callback(mime_type);
319 *size = source.size_bytes();
320 return source.data();
321 },
322 [](void*) {
323 if (s_cleanup) s_cleanup();
324 },
325 nullptr,
326 mime_types);
327}
328
340inline void ClearClipboardData() { CheckError(SDL_ClearClipboardData()); }
341
360{
361 size_t count = 0;
362 auto data = SDL_GetClipboardData(mime_type, &count);
363 if (!data) return {};
364 return StringResult{static_cast<char*>(data), count};
365}
366
384template<class T>
386{
387 size_t count = 0;
388 auto data = SDL_GetClipboardData(mime_type, &count);
389 if (!data) return {};
390 return OwnArray<T>{static_cast<T*>(data), count / sizeof(T)};
391}
392
407inline bool HasClipboardData(StringParam mime_type)
408{
409 return SDL_HasClipboardData(mime_type);
410}
411
425{
426 size_t count = 0;
427 auto data = SDL_GetClipboardMimeTypes(&count);
428 if (!data) return {};
429 return OwnArray<char*>{data, count};
430}
431
433
434} // namespace SDL
435
436#endif /* SDL3PP_CLIPBOARD_H_ */
Base class for SDL memory allocated array wrap.
Definition: SDL3pp_ownPtr.h:44
Source byte stream.
Definition: SDL3pp_strings.h:239
Helpers to use C++ strings parameters.
Definition: SDL3pp_strings.h:43
StringResult GetClipboardText()
Get UTF-8 text from the clipboard.
Definition: SDL3pp_clipboard.h:99
OwnArray< char * > GetClipboardMimeTypes()
Retrieve the list of mime types available in the clipboard.
Definition: SDL3pp_clipboard.h:424
bool HasClipboardText()
Query whether the clipboard exists and contains a non-empty text string.
Definition: SDL3pp_clipboard.h:116
SDL_ClipboardCleanupCallback ClipboardCleanupCallback
Callback function that will be called when the clipboard is cleared, or when new data is set.
Definition: SDL3pp_clipboard.h:228
OwnArray< T > GetClipboardDataAs(StringParam mime_type)
Get the data from the clipboard for a given mime type.
Definition: SDL3pp_clipboard.h:385
bool HasClipboardData(StringParam mime_type)
Query whether there is data in the clipboard for the provided mime type.
Definition: SDL3pp_clipboard.h:407
void ClearClipboardData()
Clear the clipboard data.
Definition: SDL3pp_clipboard.h:340
StringResult GetPrimarySelectionText()
Get UTF-8 text from the primary selection.
Definition: SDL3pp_clipboard.h:152
void SetClipboardText(StringParam text)
Put UTF-8 text into the clipboard.
Definition: SDL3pp_clipboard.h:78
std::function< void()> ClipboardCleanupCB
Callback function that will be called when the clipboard is cleared, or when new data is set.
Definition: SDL3pp_clipboard.h:239
void SetClipboardData(ClipboardDataCallback callback, ClipboardCleanupCallback cleanup, void *userdata, std::span< const char * > mime_types)
Offer clipboard data to the OS.
Definition: SDL3pp_clipboard.h:270
bool HasPrimarySelectionText()
Query whether the primary selection exists and contains a non-empty text string.
Definition: SDL3pp_clipboard.h:170
std::function< SourceBytes(const char *mime_type)> ClipboardDataCB
Callback function that will be called when data for the specified mime-type is requested by the OS.
Definition: SDL3pp_clipboard.h:216
void SetPrimarySelectionText(StringParam text)
Put UTF-8 text into the primary selection.
Definition: SDL3pp_clipboard.h:131
StringResult GetClipboardData(StringParam mime_type)
Get the data from the clipboard for a given mime type.
Definition: SDL3pp_clipboard.h:359
SDL_ClipboardDataCallback ClipboardDataCallback
Callback function that will be called when data for the specified mime-type is requested by the OS.
Definition: SDL3pp_clipboard.h:193
constexpr void CheckError(bool result)
Check and throw if returned value from SDL is an error.
Definition: SDL3pp_error.h:198
Main include header for the SDL3pp library.
A simple std::string-like interface for SDL allocated strings.
Definition: SDL3pp_strings.h:153