From 6992106dc7894fab3f620263e99b4083b36bf9e8 Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Thu, 7 Feb 2019 22:06:24 +0100 Subject: Use existing image decoders to handle clipboard BMP data. This gets rid of the old nsImageClipboard widget code in favor of using the nsBMPDecoder in imglib. --- widget/windows/nsClipboard.cpp | 47 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 9 deletions(-) (limited to 'widget/windows/nsClipboard.cpp') diff --git a/widget/windows/nsClipboard.cpp b/widget/windows/nsClipboard.cpp index 432badeb57..c93f351c87 100644 --- a/widget/windows/nsClipboard.cpp +++ b/widget/windows/nsClipboard.cpp @@ -26,7 +26,6 @@ #include "nsReadableUtils.h" #include "nsUnicharUtils.h" #include "nsPrimitiveHelpers.h" -#include "nsImageClipboard.h" #include "nsIWidget.h" #include "nsIComponentManager.h" #include "nsWidgetsCID.h" @@ -36,6 +35,8 @@ #include "nsIOutputStream.h" #include "nsEscape.h" #include "nsIObserverService.h" +#include "nsMimeTypes.h" +#include "imgITools.h" using mozilla::LogLevel; @@ -474,17 +475,45 @@ nsresult nsClipboard::GetNativeDataOffClipboard(IDataObject * aDataObject, UINT if (aMIMEImageFormat) { uint32_t allocLen = 0; - unsigned char * clipboardData; + const char * clipboardData; if (NS_SUCCEEDED(GetGlobalData(stm.hGlobal, (void **)&clipboardData, &allocLen))) { - nsImageFromClipboard converter; - nsIInputStream * inputStream; - converter.GetEncodedImageStream(clipboardData, aMIMEImageFormat, &inputStream); // addrefs for us, don't release - if ( inputStream ) { - *aData = inputStream; - *aLen = sizeof(nsIInputStream*); - result = NS_OK; + nsCOMPtr container; + nsCOMPtr imgTools = do_CreateInstance("@mozilla.org/image/tools;1"); + nsCOMPtr inputStream; + nsresult rv = NS_NewByteInputStream(getter_AddRefs(inputStream), + clipboardData, + allocLen, + NS_ASSIGNMENT_DEPEND); + NS_ENSURE_SUCCESS(rv, rv); + + result = imgTools->DecodeImage(inputStream, + NS_LITERAL_CSTRING(IMAGE_BMP_MS_CLIPBOARD), + getter_AddRefs(container)); + if (NS_FAILED(result)) { + break; } + + nsAutoCString mimeType; + if (strcmp(aMIMEImageFormat, kJPGImageMime) == 0) { + mimeType.Assign(IMAGE_JPEG); + } else { + mimeType.Assign(aMIMEImageFormat); + } + + result = imgTools->EncodeImage(container, mimeType, EmptyString(), + getter_AddRefs(inputStream)); + if (NS_FAILED(result)) { + break; + } + + if (!inputStream) { + result = NS_ERROR_FAILURE; + break; + } + + *aData = inputStream.forget().take(); + *aLen = sizeof(nsIInputStream*); } } break; -- cgit v1.2.3