From 649871a333104fbb20c2329e67f139aba7fbe111 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 7 Jul 2010 23:24:04 -0700 Subject: [PATCH] First pass at clipboard API, still very much in progress --- include/SDL.h | 1 + include/SDL_clipboard.h | 125 ++++++++++++++++++++++++++++++++++++++ src/video/SDL_clipboard.c | 101 ++++++++++++++++++++++++++++++ 3 files changed, 227 insertions(+) create mode 100644 include/SDL_clipboard.h create mode 100644 src/video/SDL_clipboard.c diff --git a/include/SDL.h b/include/SDL.h index 21c0cbe62..349010d39 100644 --- a/include/SDL.h +++ b/include/SDL.h @@ -78,6 +78,7 @@ #include "SDL_stdinc.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" diff --git a/include/SDL_clipboard.h b/include/SDL_clipboard.h new file mode 100644 index 000000000..8cd51f30d --- /dev/null +++ b/include/SDL_clipboard.h @@ -0,0 +1,125 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2009 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/** + * \file SDL_clipboard.h + * + * Include file for SDL clipboard handling + */ + +#ifndef _SDL_clipboard_h +#define _SDL_clipboard_h + +#include "SDL_stdinc.h" +#include "SDL_surface.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +extern "C" { +/* *INDENT-ON* */ +#endif + +/* Function prototypes */ + +/** + * \brief Put text into the clipboard + * + * \sa SDL_GetClipboardText() + */ +extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text); + +/** + * \brief Get text from the clipboard, which must be freed with SDL_free() + * + * \sa SDL_SetClipboardText() + */ +extern DECLSPEC char * SDLCALL SDL_GetClipboardText(); + +/** + * \brief Returns whether the clipboard has text + * + * \sa SDL_GetClipboardText() + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(); + +/** + * \brief Put an image into the clipboard + * + * \sa SDL_GetClipboardImage() + */ +extern DECLSPEC int SDLCALL SDL_SetClipboardImage(SDL_Surface *image); + +/** + * \brief Get image from the clipboard, which must be freed with SDL_FreeSurface() + * + * \sa SDL_SetClipboard() + */ +extern DECLSPEC SDL_Surface * SDLCALL SDL_GetClipboardImage(); + +/** + * \brief Returns whether the clipboard has data in the specified format + * + * \sa SDL_GetClipboardImage() + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardImage(); + +/** + * \brief Set the data in the clipboard in the specified format + * + * \sa SDL_GetClipboard() + */ +extern DECLSPEC int SDLCALL SDL_SetClipboard(Uint32 format, void *data, size_t length); + +/** + * \brief Get the data in the clipboard in the specified format, which must be + * freed with SDL_free() + * + * \sa SDL_SetClipboard() + */ +extern DECLSPEC int SDLCALL SDL_GetClipboard(Uint32 format, void **data, size_t *length); + +/** + * \brief Returns whether the clipboard has data in the specified format + * + * \sa SDL_GetClipboard() + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardFormat(Uint32 format); + +/** + * \brief Clear any data out of the clipboard, if possible. + */ +extern DECLSPEC void SDLCALL SDL_ClearClipboard(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +} +/* *INDENT-ON* */ +#endif +#include "close_code.h" + +#endif /* _SDL_clipboard_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/SDL_clipboard.c b/src/video/SDL_clipboard.c new file mode 100644 index 000000000..fe33216de --- /dev/null +++ b/src/video/SDL_clipboard.c @@ -0,0 +1,101 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2010 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +#include "SDL_clipboard.h" +#include "SDL_sysvideo.h" + +/* FOURCC values for text and image clipboard formats */ +#define TEXT_DATA SDL_FOURCC('T', 'E', 'X', 'T') +#define IMAGE_DATA SDL_FOURCC('B', 'M', 'P', ' ') + +int +SDL_SetClipboardText(const char *text) +{ + return SDL_SetClipboard(TEXT_DATA, text, SDL_strlen(text)+1); +} + +char * +SDL_GetClipboardText() +{ + void *data; + size_t length; + + if (SDL_GetClipboard(TEXT_DATA, &data, &length) == 0) { + return SDL_static_cast(char*, data); + } else { + return NULL; + } +} + +SDL_bool +SDL_HasClipboardText() +{ + return SDL_HasClipboardFormat(TEXT_DATA); +} + +int +SDL_SetClipboardImage(SDL_Surface *image) +{ + SDL_Unsupported(); + return -1; +} + +SDL_Surface * +SDL_GetClipboardImage() +{ + SDL_Unsupported(); + return NULL; +} + +SDL_bool +SDL_HasClipboardImage() +{ + return SDL_FALSE; +} + +int +SDL_SetClipboard(Uint32 format, void *data, size_t length) +{ + SDL_Unsupported(); + return -1; +} + +int +SDL_GetClipboard(Uint32 format, void **data, size_t *length) +{ + SDL_Unsupported(); + return -1; +} + +SDL_bool +SDL_HasClipboardFormat(Uint32 format) +{ + return SDL_FALSE; +} + +void +SDL_ClearClipboard(void) +{ +} + +/* vi: set ts=4 sw=4 expandtab: */