mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
[winpr,clipboard] define guard DIBv5 support
This commit is contained in:
@@ -43,6 +43,7 @@
|
||||
#cmakedefine WITH_DEBUG_EVENTS
|
||||
#cmakedefine WITH_DEBUG_MUTEX
|
||||
|
||||
#cmakedefine WINPR_UTILS_IMAGE_DIBv5 /** @since version 3.13.0 */
|
||||
#cmakedefine WINPR_UTILS_IMAGE_WEBP /** @since version 3.3.0 */
|
||||
#cmakedefine WINPR_UTILS_IMAGE_PNG /** @since version 3.3.0 */
|
||||
#cmakedefine WINPR_UTILS_IMAGE_JPEG /** @since version 3.3.0 */
|
||||
|
||||
@@ -236,12 +236,15 @@ static void* clipboard_synthesize_cf_dib(wClipboard* clipboard, UINT32 formatId,
|
||||
BYTE* pDstData = NULL;
|
||||
SrcSize = *pSize;
|
||||
|
||||
#if defined(WINPR_UTILS_IMAGE_DIBv5)
|
||||
if (formatId == CF_DIBV5)
|
||||
{
|
||||
WLog_WARN(TAG, "[DIB] Unsupported destination format %s",
|
||||
ClipboardGetFormatName(clipboard, formatId));
|
||||
}
|
||||
else if (is_format_bitmap(clipboard, formatId))
|
||||
else
|
||||
#endif
|
||||
if (is_format_bitmap(clipboard, formatId))
|
||||
{
|
||||
WINPR_BITMAP_FILE_HEADER pFileHeader = { 0 };
|
||||
wStream sbuffer = { 0 };
|
||||
@@ -274,7 +277,7 @@ static void* clipboard_synthesize_cf_dib(wClipboard* clipboard, UINT32 formatId,
|
||||
*
|
||||
* BITMAPV5HEADER structure followed by the bitmap color space information and the bitmap bits.
|
||||
*/
|
||||
|
||||
#if defined(WINPR_UTILS_IMAGE_DIBv5)
|
||||
static void* clipboard_synthesize_cf_dibv5(wClipboard* clipboard, UINT32 formatId,
|
||||
WINPR_ATTR_UNUSED const void* data,
|
||||
WINPR_ATTR_UNUSED UINT32* pSize)
|
||||
@@ -317,6 +320,7 @@ static void* clipboard_synthesize_cf_dibv5(wClipboard* clipboard, UINT32 formatI
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void* clipboard_prepend_bmp_header(const WINPR_BITMAP_INFO_HEADER* pInfoHeader,
|
||||
const void* data, size_t size, UINT32* pSize)
|
||||
@@ -386,11 +390,13 @@ static void* clipboard_synthesize_image_bmp(WINPR_ATTR_UNUSED wClipboard* clipbo
|
||||
|
||||
return clipboard_prepend_bmp_header(&header, data, SrcSize, pSize);
|
||||
}
|
||||
#if defined(WINPR_UTILS_IMAGE_DIBv5)
|
||||
else if (formatId == CF_DIBV5)
|
||||
{
|
||||
WLog_WARN(TAG, "[BMP] Unsupported destination format %s",
|
||||
ClipboardGetFormatName(clipboard, formatId));
|
||||
}
|
||||
#endif
|
||||
else
|
||||
{
|
||||
WLog_WARN(TAG, "[BMP] Unsupported destination format %s",
|
||||
@@ -772,7 +778,9 @@ BOOL ClipboardInitSynthesizers(wClipboard* clipboard)
|
||||
* CF_DIB
|
||||
*/
|
||||
{
|
||||
#if defined(WINPR_UTILS_IMAGE_DIBv5)
|
||||
ClipboardRegisterSynthesizer(clipboard, CF_DIB, CF_DIBV5, clipboard_synthesize_cf_dibv5);
|
||||
#endif
|
||||
for (size_t x = 0; x < ARRAYSIZE(mime_bitmap); x++)
|
||||
{
|
||||
const char* mime = mime_bitmap[x];
|
||||
@@ -787,6 +795,7 @@ BOOL ClipboardInitSynthesizers(wClipboard* clipboard)
|
||||
/**
|
||||
* CF_DIBV5
|
||||
*/
|
||||
#if defined(WINPR_UTILS_IMAGE_DIBv5)
|
||||
{
|
||||
ClipboardRegisterSynthesizer(clipboard, CF_DIBV5, CF_DIB, clipboard_synthesize_cf_dib);
|
||||
|
||||
@@ -800,6 +809,7 @@ BOOL ClipboardInitSynthesizers(wClipboard* clipboard)
|
||||
clipboard_synthesize_image_bmp);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* image/bmp
|
||||
@@ -811,8 +821,10 @@ BOOL ClipboardInitSynthesizers(wClipboard* clipboard)
|
||||
if (altFormatId == 0)
|
||||
continue;
|
||||
ClipboardRegisterSynthesizer(clipboard, altFormatId, CF_DIB, clipboard_synthesize_cf_dib);
|
||||
#if defined(WINPR_UTILS_IMAGE_DIBv5)
|
||||
ClipboardRegisterSynthesizer(clipboard, altFormatId, CF_DIBV5,
|
||||
clipboard_synthesize_cf_dibv5);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -823,12 +835,14 @@ BOOL ClipboardInitSynthesizers(wClipboard* clipboard)
|
||||
const UINT32 altFormatId = ClipboardRegisterFormat(clipboard, mime_png);
|
||||
ClipboardRegisterSynthesizer(clipboard, CF_DIB, altFormatId,
|
||||
clipboard_synthesize_image_bmp_to_png);
|
||||
ClipboardRegisterSynthesizer(clipboard, CF_DIBV5, altFormatId,
|
||||
clipboard_synthesize_image_bmp_to_png);
|
||||
ClipboardRegisterSynthesizer(clipboard, altFormatId, CF_DIB,
|
||||
clipboard_synthesize_image_png_to_bmp);
|
||||
#if defined(WINPR_UTILS_IMAGE_DIBv5)
|
||||
ClipboardRegisterSynthesizer(clipboard, CF_DIBV5, altFormatId,
|
||||
clipboard_synthesize_image_bmp_to_png);
|
||||
ClipboardRegisterSynthesizer(clipboard, altFormatId, CF_DIBV5,
|
||||
clipboard_synthesize_image_png_to_bmp);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -840,12 +854,14 @@ BOOL ClipboardInitSynthesizers(wClipboard* clipboard)
|
||||
const UINT32 altFormatId = ClipboardRegisterFormat(clipboard, mime_webp);
|
||||
ClipboardRegisterSynthesizer(clipboard, CF_DIB, altFormatId,
|
||||
clipboard_synthesize_image_bmp_to_webp);
|
||||
ClipboardRegisterSynthesizer(clipboard, CF_DIBV5, altFormatId,
|
||||
clipboard_synthesize_image_webp_to_bmp);
|
||||
ClipboardRegisterSynthesizer(clipboard, altFormatId, CF_DIB,
|
||||
clipboard_synthesize_image_webp_to_bmp);
|
||||
#if defined(WINPR_UTILS_IMAGE_DIBv5)
|
||||
ClipboardRegisterSynthesizer(clipboard, CF_DIBV5, altFormatId,
|
||||
clipboard_synthesize_image_bmp_to_webp);
|
||||
ClipboardRegisterSynthesizer(clipboard, altFormatId, CF_DIBV5,
|
||||
clipboard_synthesize_image_webp_to_bmp);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -857,12 +873,14 @@ BOOL ClipboardInitSynthesizers(wClipboard* clipboard)
|
||||
const UINT32 altFormatId = ClipboardRegisterFormat(clipboard, mime_jpeg);
|
||||
ClipboardRegisterSynthesizer(clipboard, CF_DIB, altFormatId,
|
||||
clipboard_synthesize_image_bmp_to_jpeg);
|
||||
ClipboardRegisterSynthesizer(clipboard, CF_DIBV5, altFormatId,
|
||||
clipboard_synthesize_image_jpeg_to_bmp);
|
||||
ClipboardRegisterSynthesizer(clipboard, altFormatId, CF_DIB,
|
||||
clipboard_synthesize_image_bmp_to_jpeg);
|
||||
clipboard_synthesize_image_jpeg_to_bmp);
|
||||
#if defined(WINPR_UTILS_IMAGE_DIBv5)
|
||||
ClipboardRegisterSynthesizer(clipboard, altFormatId, CF_DIBV5,
|
||||
clipboard_synthesize_image_jpeg_to_bmp);
|
||||
ClipboardRegisterSynthesizer(clipboard, CF_DIBV5, altFormatId,
|
||||
clipboard_synthesize_image_bmp_to_jpeg);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ if(WITH_LODEPNG)
|
||||
winpr_library_add_private(${lodepng_LIBRARIES})
|
||||
endif()
|
||||
|
||||
option(WINPR_UTILS_IMAGE_DIBv5 "[experimental] Add DIBv5 <--> BMP conversion support to clipboard" OFF)
|
||||
option(WINPR_UTILS_IMAGE_PNG "Add PNG <--> BMP conversion support to clipboard" OFF)
|
||||
if(WINPR_UTILS_IMAGE_PNG)
|
||||
find_package(PNG REQUIRED)
|
||||
|
||||
Reference in New Issue
Block a user