REVIEWED: GetClipboardImage(), make symbol available on all platforms

This commit is contained in:
Ray
2024-11-19 12:31:49 +01:00
parent 10789a4d49
commit c78757a959
7 changed files with 97 additions and 66 deletions

View File

@@ -71,6 +71,30 @@
// Enabling this flag allows manual control of the frame processes, use at your own risk // Enabling this flag allows manual control of the frame processes, use at your own risk
//#define SUPPORT_CUSTOM_FRAME_CONTROL 1 //#define SUPPORT_CUSTOM_FRAME_CONTROL 1
// Support for clipboard image loading
// NOTE: Only working on SDL3, GLFW (Windows) and RGFW (Windows)
#define SUPPORT_CLIPBOARD_IMAGE 1
// NOTE: Clipboard image loading requires support for some image file formats
// TODO: Those defines should probably be removed from here, I prefer to let the user manage them
#if defined(SUPPORT_CLIPBOARD_IMAGE)
#ifndef SUPPORT_MODULE_RTEXTURES
#define SUPPORT_MODULE_RTEXTURES 1
#endif
#ifndef STBI_REQUIRED
#define STBI_REQUIRED
#endif
#ifndef SUPPORT_FILEFORMAT_BMP // For clipboard image on Windows
#define SUPPORT_FILEFORMAT_BMP 1
#endif
#ifndef SUPPORT_FILEFORMAT_PNG // Wayland uses png for prints, at least it was on 22 LTS ubuntu
#define SUPPORT_FILEFORMAT_PNG 1
#endif
#ifndef SUPPORT_FILEFORMAT_JPG
#define SUPPORT_FILEFORMAT_JPG 1
#endif
#endif
// rcore: Configuration values // rcore: Configuration values
//------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------
@@ -273,31 +297,4 @@
//------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------
#define MAX_TRACELOG_MSG_LENGTH 256 // Max length of one trace-log message #define MAX_TRACELOG_MSG_LENGTH 256 // Max length of one trace-log message
// Enable partial support for clipboard image, only working on SDL3 or
// being on both Windows OS + GLFW or Windows OS + RGFW
#define SUPPORT_CLIPBOARD_IMAGE 1
#if defined(SUPPORT_CLIPBOARD_IMAGE)
#ifndef STBI_REQUIRED
#define STBI_REQUIRED
#endif
#ifndef SUPPORT_FILEFORMAT_BMP // For clipboard image on Windows
#define SUPPORT_FILEFORMAT_BMP 1
#endif
#ifndef SUPPORT_FILEFORMAT_PNG // Wayland uses png for prints, at least it was on 22 LTS ubuntu
#define SUPPORT_FILEFORMAT_PNG 1
#endif
#ifndef SUPPORT_FILEFORMAT_JPG
#define SUPPORT_FILEFORMAT_JPG 1
#endif
#ifndef SUPPORT_MODULE_RTEXTURES
#define SUPPORT_MODULE_RTEXTURES 1
#endif
#endif
#endif // CONFIG_H #endif // CONFIG_H

View File

@@ -515,6 +515,16 @@ const char *GetClipboardText(void)
return NULL; return NULL;
} }
// Get clipboard image
Image GetClipboardImage(void)
{
Image image = { 0 };
TRACELOG(LOG_WARNING, "GetClipboardImage() not implemented on target platform");
return image;
}
// Show mouse cursor // Show mouse cursor
void ShowCursor(void) void ShowCursor(void)
{ {

View File

@@ -967,32 +967,29 @@ const char *GetClipboardText(void)
return glfwGetClipboardString(platform.handle); return glfwGetClipboardString(platform.handle);
} }
#if defined(SUPPORT_CLIPBOARD_IMAGE)
// Get clipboard image // Get clipboard image
Image GetClipboardImage(void) Image GetClipboardImage(void)
{ {
Image image = { 0 }; Image image = { 0 };
#if defined(SUPPORT_CLIPBOARD_IMAGE)
#if defined(_WIN32)
unsigned long long int dataSize = 0; unsigned long long int dataSize = 0;
void *fileData = NULL; void *fileData = NULL;
int width = 0;
int height = 0;
#ifdef _WIN32
int width, height;
fileData = (void*)Win32GetClipboardImageData(&width, &height, &dataSize); fileData = (void*)Win32GetClipboardImageData(&width, &height, &dataSize);
#else
TRACELOG(LOG_WARNING, "Clipboard image: PLATFORM_DESKTOP_GLFW doesn't implement `GetClipboardImage` for this OS");
#endif
if (fileData == NULL) if (fileData == NULL) TRACELOG(LOG_WARNING, "Clipboard image: Couldn't get clipboard data.");
{ else image = LoadImageFromMemory(".bmp", fileData, (int)dataSize);
TRACELOG(LOG_WARNING, "Clipboard image: Couldn't get clipboard data."); #else
} TRACELOG(LOG_WARNING, "GetClipboardImage() not implemented on target platform");
else #endif
{ #endif // SUPPORT_CLIPBOARD_IMAGE
image = LoadImageFromMemory(".bmp", fileData, (int)dataSize);
}
return image; return image;
} }
#endif // SUPPORT_CLIPBOARD_IMAGE
// Show mouse cursor // Show mouse cursor
void ShowCursor(void) void ShowCursor(void)

View File

@@ -664,42 +664,39 @@ const char *GetClipboardText(void)
return RGFW_readClipboard(NULL); return RGFW_readClipboard(NULL);
} }
#if defined(SUPPORT_CLIPBOARD_IMAGE) #if defined(SUPPORT_CLIPBOARD_IMAGE)
#if defined(_WIN32)
#ifdef _WIN32
#define WIN32_CLIPBOARD_IMPLEMENTATION #define WIN32_CLIPBOARD_IMPLEMENTATION
#define WINUSER_ALREADY_INCLUDED #define WINUSER_ALREADY_INCLUDED
#define WINBASE_ALREADY_INCLUDED #define WINBASE_ALREADY_INCLUDED
#define WINGDI_ALREADY_INCLUDED #define WINGDI_ALREADY_INCLUDED
#include "../external/win32_clipboard.h" #include "../external/win32_clipboard.h"
#endif #endif
#endif // SUPPORT_CLIPBOARD_IMAGE
// Get clipboard image // Get clipboard image
Image GetClipboardImage(void) Image GetClipboardImage(void)
{ {
Image image = { 0 }; Image image = { 0 };
#if defined(SUPPORT_CLIPBOARD_IMAGE)
#if defined(_WIN32)
unsigned long long int dataSize = 0; unsigned long long int dataSize = 0;
void *fileData = NULL; void *fileData = NULL;
int width = 0;
int height = 0;
#ifdef _WIN32
int width, height;
fileData = (void*)Win32GetClipboardImageData(&width, &height, &dataSize); fileData = (void*)Win32GetClipboardImageData(&width, &height, &dataSize);
#else
TRACELOG(LOG_WARNING, "Clipboard image: PLATFORM_DESKTOP_RGFW doesn't implement `GetClipboardImage` for this OS");
#endif
if (fileData == NULL) if (fileData == NULL) TRACELOG(LOG_WARNING, "Clipboard image: Couldn't get clipboard data.");
{ else image = LoadImageFromMemory(".bmp", fileData, (int)dataSize);
TRACELOG(LOG_WARNING, "Clipboard image: Couldn't get clipboard data."); #else
} TRACELOG(LOG_WARNING, "GetClipboardImage() not implemented on target platform");
else #endif
{ #endif // SUPPORT_CLIPBOARD_IMAGE
image = LoadImageFromMemory(".bmp", fileData, dataSize);
}
return image; return image;
} }
#endif // SUPPORT_CLIPBOARD_IMAGE
// Show mouse cursor // Show mouse cursor
void ShowCursor(void) void ShowCursor(void)

View File

@@ -509,6 +509,16 @@ const char *GetClipboardText(void)
return NULL; return NULL;
} }
// Get clipboard image
Image GetClipboardImage(void)
{
Image image = { 0 };
TRACELOG(LOG_WARNING, "GetClipboardImage() not implemented on target platform");
return image;
}
// Show mouse cursor // Show mouse cursor
void ShowCursor(void) void ShowCursor(void)
{ {

View File

@@ -292,6 +292,16 @@ const char *GetClipboardText(void)
return NULL; return NULL;
} }
// Get clipboard image
Image GetClipboardImage(void)
{
Image image = { 0 };
TRACELOG(LOG_WARNING, "GetClipboardImage() not implemented on target platform");
return image;
}
// Show mouse cursor // Show mouse cursor
void ShowCursor(void) void ShowCursor(void)
{ {

View File

@@ -805,6 +805,16 @@ const char *GetClipboardText(void)
return NULL; return NULL;
} }
// Get clipboard image
Image GetClipboardImage(void)
{
Image image = { 0 };
TRACELOG(LOG_WARNING, "GetClipboardImage() not implemented on target platform");
return image;
}
// Show mouse cursor // Show mouse cursor
void ShowCursor(void) void ShowCursor(void)
{ {