You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by hd...@apache.org on 2013/01/10 10:40:17 UTC
svn commit: r1431234 - in /openoffice/branches/alg/clibboard/main/vcl:
aqua/source/dtrans/DataFlavorMapping.cxx
aqua/source/dtrans/OSXTransferable.cxx aqua/source/dtrans/PictToBmpFlt.cxx
aqua/source/dtrans/PictToBmpFlt.hxx inc/vcl/pngwrite.hxx
Author: hdu
Date: Thu Jan 10 09:40:17 2013
New Revision: 1431234
URL: http://svn.apache.org/viewvc?rev=1431234&view=rev
Log:
add OSX clipboard support for transparent bitmaps
Modified:
openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/OSXTransferable.cxx
openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/PictToBmpFlt.cxx
openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/PictToBmpFlt.hxx
openoffice/branches/alg/clibboard/main/vcl/inc/vcl/pngwrite.hxx
Modified: openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx?rev=1431234&r1=1431233&r2=1431234&view=diff
==============================================================================
--- openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx (original)
+++ openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx Thu Jan 10 09:40:17 2013
@@ -125,8 +125,8 @@ namespace // private
{
{ NSStringPboardType, "text/plain;charset=utf-16", "Unicode Text (UTF-16)", CPPUTYPE_OUSTRING },
{ NSRTFPboardType, "text/richtext", "Rich Text Format", CPPUTYPE_SEQINT8 },
- { NSTIFFPboardType, "image/bmp", "Windows Bitmap", CPPUTYPE_SEQINT8 },
- { NSPICTPboardType, "image/bmp", "Windows Bitmap", CPPUTYPE_SEQINT8 },
+ { NSTIFFPboardType, "image/png", "Portable Network Graphics", CPPUTYPE_SEQINT8 },
+ { NSPICTPboardType, "image/png", "Portable Network Graphics", CPPUTYPE_SEQINT8 },
{ NSHTMLPboardType, "text/html", "Plain Html", CPPUTYPE_SEQINT8 },
{ NSFilenamesPboardType, "application/x-openoffice-filelist;windows_formatname=\"FileList\"", "FileList", CPPUTYPE_SEQINT8 },
{ PBTYPE_SESX, FLAVOR_SESX, "Star Embed Source (XML)", CPPUTYPE_SEQINT8 },
@@ -371,73 +371,65 @@ Any HTMLFormatDataProvider::getOOoData()
//###########################
-class BMPDataProvider : public DataProviderBaseImpl
+class PNGDataProvider : public DataProviderBaseImpl
{
- NSBitmapImageFileType meImageType;
+ NSBitmapImageFileType meImageType;
public:
- BMPDataProvider(const Any& data, NSBitmapImageFileType eImageType );
+ PNGDataProvider( const Any&, NSBitmapImageFileType);
- BMPDataProvider(NSData* data, NSBitmapImageFileType eImageType);
+ PNGDataProvider( NSData*, NSBitmapImageFileType);
- virtual NSData* getSystemData();
+ virtual NSData* getSystemData();
- virtual Any getOOoData();
+ virtual Any getOOoData();
};
-BMPDataProvider::BMPDataProvider(const Any& data, NSBitmapImageFileType eImageType) :
+PNGDataProvider::PNGDataProvider( const Any& data, NSBitmapImageFileType eImageType) :
DataProviderBaseImpl(data),
meImageType( eImageType )
{
}
-BMPDataProvider::BMPDataProvider(NSData* data, NSBitmapImageFileType eImageType) :
+PNGDataProvider::PNGDataProvider( NSData* data, NSBitmapImageFileType eImageType) :
DataProviderBaseImpl(data),
meImageType( eImageType )
{
}
-NSData* BMPDataProvider::getSystemData()
+NSData* PNGDataProvider::getSystemData()
{
- Sequence<sal_Int8> bmpData;
- mData >>= bmpData;
+ Sequence<sal_Int8> pngData;
+ mData >>= pngData;
- Sequence<sal_Int8> pictData;
- NSData* sysData = NULL;
+ Sequence<sal_Int8> imgData;
+ NSData* sysData = NULL;
+ if( PNGToImage( pngData, imgData, meImageType))
+ sysData = [NSData dataWithBytes: imgData.getArray() length: imgData.getLength()];
- if (BMPToImage(bmpData, pictData, meImageType))
- {
- sysData = [NSData dataWithBytes: pictData.getArray() length: pictData.getLength()];
- }
-
- return sysData;
+ return sysData;
}
-/* At the moment the OOo 'PCT' filter is not good enough to be used
- and there is no flavor defined for exchanging 'PCT' with OOo so
- we will at the moment convert 'PCT' to a Windows BMP and provide
- this to OOo
+/* The AOO 'PCT' filter is not yet good enough to be used
+ and there is no flavor defined for exchanging 'PCT' with AOO
+ so we convert 'PCT' to a PNG and provide this to AOO
*/
-Any BMPDataProvider::getOOoData()
+Any PNGDataProvider::getOOoData()
{
- Any oOOData;
+ Any oOOData;
- if (mSystemData)
+ if( mSystemData)
{
- unsigned int flavorDataLength = [mSystemData length];
- Sequence<sal_Int8> pictData(flavorDataLength);
-
- memcpy(pictData.getArray(), [mSystemData bytes], flavorDataLength);
+ const unsigned int flavorDataLength = [mSystemData length];
+ Sequence<sal_Int8> imgData( flavorDataLength);
+ memcpy( imgData.getArray(), [mSystemData bytes], flavorDataLength);
- Sequence<sal_Int8> bmpData;
-
- if (ImageToBMP(pictData, bmpData, meImageType))
- {
- oOOData = makeAny(bmpData);
- }
+ Sequence<sal_Int8> pngData;
+ if( ImageToPNG( imgData, pngData, meImageType))
+ oOOData = makeAny( pngData);
}
- else
+ else
{
- oOOData = mData;
+ oOOData = mData;
}
return oOOData;
@@ -617,11 +609,11 @@ DataProviderPtr_t DataFlavorMapper::getD
*/
if ([systemFlavor caseInsensitiveCompare: NSPICTPboardType] == NSOrderedSame)
{
- dp = DataProviderPtr_t(new BMPDataProvider(data, PICTImageFileType));
+ dp = DataProviderPtr_t( new PNGDataProvider( data, PICTImageFileType));
}
else if ([systemFlavor caseInsensitiveCompare: NSTIFFPboardType] == NSOrderedSame)
{
- dp = DataProviderPtr_t(new BMPDataProvider(data, NSTIFFFileType));
+ dp = DataProviderPtr_t( new PNGDataProvider( data, NSTIFFFileType));
}
else if ([systemFlavor caseInsensitiveCompare: NSFilenamesPboardType] == NSOrderedSame)
{
@@ -666,11 +658,11 @@ DataProviderPtr_t DataFlavorMapper::getD
}
else if ([systemFlavor caseInsensitiveCompare: NSPICTPboardType] == NSOrderedSame)
{
- dp = DataProviderPtr_t(new BMPDataProvider(systemData, PICTImageFileType));
+ dp = DataProviderPtr_t( new PNGDataProvider(systemData, PICTImageFileType));
}
else if ([systemFlavor caseInsensitiveCompare: NSTIFFPboardType] == NSOrderedSame)
{
- dp = DataProviderPtr_t(new BMPDataProvider(systemData, NSTIFFFileType));
+ dp = DataProviderPtr_t( new PNGDataProvider(systemData, NSTIFFFileType));
}
else if ([systemFlavor caseInsensitiveCompare: NSFilenamesPboardType] == NSOrderedSame)
{
Modified: openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/OSXTransferable.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/OSXTransferable.cxx?rev=1431234&r1=1431233&r2=1431234&view=diff
==============================================================================
--- openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/OSXTransferable.cxx (original)
+++ openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/OSXTransferable.cxx Thu Jan 10 09:40:17 2013
@@ -85,7 +85,7 @@ Any SAL_CALL OSXTransferable::getTransfe
}
NSString* sysFormat =
- (aFlavor.MimeType.compareToAscii( "image/bmp", 9 ) == 0)
+ (aFlavor.MimeType.compareToAscii( "image/png", 9 ) == 0)
? mDataFlavorMapper->openOfficeImageToSystemFlavor( mPasteboard )
: mDataFlavorMapper->openOfficeToSystemFlavor(aFlavor);
DataProviderPtr_t dp;
Modified: openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/PictToBmpFlt.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/PictToBmpFlt.cxx?rev=1431234&r1=1431233&r2=1431234&view=diff
==============================================================================
--- openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/PictToBmpFlt.cxx (original)
+++ openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/PictToBmpFlt.cxx Thu Jan 10 09:40:17 2013
@@ -36,159 +36,130 @@
#include "PictToBmpFlt.hxx"
-bool PICTtoBMP(com::sun::star::uno::Sequence<sal_Int8>& aPict,
- com::sun::star::uno::Sequence<sal_Int8>& aBmp)
+bool PICTtoPNG( com::sun::star::uno::Sequence<sal_Int8>& rPictData,
+ com::sun::star::uno::Sequence<sal_Int8>& rPngData)
{
-
- bool result = false;
-
- ComponentInstance bmpExporter;
- if (OpenADefaultComponent(GraphicsExporterComponentType,
- kQTFileTypeBMP,
- &bmpExporter) != noErr)
- {
- return result;
- }
-
- Handle hPict;
- if (PtrToHand(aPict.getArray(), &hPict, aPict.getLength()) != noErr)
- {
- return result;
- }
-
- Handle hBmp;
- if ((GraphicsExportSetInputPicture(bmpExporter, (PicHandle)hPict) != noErr) ||
- ((hBmp = NewHandleClear(0)) == NULL))
- {
- CloseComponent(bmpExporter);
- DisposeHandle(hPict);
- return result;
- }
-
- if ((GraphicsExportSetOutputHandle(bmpExporter, hBmp) == noErr) &&
- (GraphicsExportDoExport(bmpExporter, NULL) == noErr))
- {
- size_t sz = GetHandleSize(hBmp);
- aBmp.realloc(sz);
-
- HLock(hBmp);
- rtl_copyMemory(aBmp.getArray(), ((sal_Int8*)*hBmp), sz);
- HUnlock(hBmp);
-
- result = true;
+ ComponentInstance pngExporter = NULL;
+ if( OpenADefaultComponent( GraphicsExporterComponentType, kQTFileTypePNG, &pngExporter) != noErr)
+ return false;
+
+ Handle hPict = NULL;
+ if( PtrToHand( rPictData.getArray(), &hPict, rPictData.getLength()) != noErr)
+ hPict = NULL;
+
+ Handle hPng = NULL;
+ if( hPict && GraphicsExportSetInputPicture( pngExporter, (PicHandle)hPict) == noErr)
+ hPng = NewHandleClear(0);
+
+ size_t nPngSize = 0;
+ if( hPng
+ && (GraphicsExportSetOutputHandle( pngExporter, hPng) == noErr)
+ && (GraphicsExportDoExport( pngExporter, NULL) == noErr))
+ {
+ nPngSize = GetHandleSize( hPng);
+ rPngData.realloc( nPngSize);
+
+ HLock( hPng);
+ rtl_copyMemory( rPngData.getArray(), ((sal_Int8*)*hPng), nPngSize);
+ HUnlock( hPng);
}
- DisposeHandle(hPict);
- DisposeHandle(hBmp);
- CloseComponent(bmpExporter);
+ if( hPict)
+ DisposeHandle( hPict);
+ if( hPng)
+ DisposeHandle( hPng);
+ if( pngExporter)
+ CloseComponent( pngExporter);
- return result;
+ return (nPngSize > 0);
}
-bool BMPtoPICT(com::sun::star::uno::Sequence<sal_Int8>& aBmp,
- com::sun::star::uno::Sequence<sal_Int8>& aPict)
-{
- bool result = false;
- Handle hBmp;
- ComponentInstance pictExporter;
- if ((PtrToHand(aBmp.getArray(), &hBmp, aBmp.getLength()) != noErr))
- {
- return result;
- }
-
- if (OpenADefaultComponent(GraphicsImporterComponentType,
- kQTFileTypeBMP,
- &pictExporter) != noErr)
- {
- DisposeHandle(hBmp);
- return result;
- }
+bool PNGtoPICT( com::sun::star::uno::Sequence<sal_Int8>& rPngData,
+ com::sun::star::uno::Sequence<sal_Int8>& rPictData)
+{
+ ComponentInstance pictExporter;
+ if( OpenADefaultComponent( GraphicsImporterComponentType, kQTFileTypePNG, &pictExporter) != noErr)
+ return false;
+
+ Handle hPng = NULL;
+ if( PtrToHand( rPngData.getArray(), &hPng, rPngData.getLength()) != noErr)
+ hPng = NULL;
- if (GraphicsImportSetDataHandle(pictExporter, hBmp) != noErr)
- {
- DisposeHandle(hBmp);
- CloseComponent(pictExporter);
- return result;
- }
-
- PicHandle hPict;
- if (GraphicsImportGetAsPicture(pictExporter, &hPict) == noErr)
- {
- size_t sz = GetHandleSize((Handle)hPict);
- aPict.realloc(sz);
-
- HLock((Handle)hPict);
- rtl_copyMemory(aPict.getArray(), ((sal_Int8*)*hPict), sz);
- HUnlock((Handle)hPict);
-
- // Release the data associated with the picture
- // Note: This function is deprecated in Mac OS X
- // 10.4.
- KillPicture(hPict);
-
- result = true;
+ size_t nPictSize = 0;
+ PicHandle hPict = NULL;
+ if( hPng
+ && (GraphicsImportSetDataHandle( pictExporter, hPng) == noErr)
+ && (GraphicsImportGetAsPicture( pictExporter, &hPict) == noErr))
+ {
+ nPictSize = GetHandleSize( (Handle)hPict);
+ rPictData.realloc( nPictSize);
+
+ HLock( (Handle)hPict);
+ rtl_copyMemory( rPictData.getArray(), ((sal_Int8*)*hPict), nPictSize);
+ HUnlock( (Handle)hPict);
+
+ // Release the data associated with the picture
+ // Note: This function is deprecated in Mac OSX 10.4
+ KillPicture( hPict);
}
- DisposeHandle(hBmp);
- CloseComponent(pictExporter);
+ if( hPng)
+ DisposeHandle( hPng);
+ if( pictExporter)
+ CloseComponent( pictExporter);
- return result;
+ return (nPictSize > 512);
}
-bool ImageToBMP( com::sun::star::uno::Sequence<sal_Int8>& aPict,
- com::sun::star::uno::Sequence<sal_Int8>& aBmp,
+bool ImageToPNG( com::sun::star::uno::Sequence<sal_Int8>& rImgData,
+ com::sun::star::uno::Sequence<sal_Int8>& rPngData,
NSBitmapImageFileType eInFormat)
{
- if( eInFormat == PICTImageFileType )
- return PICTtoBMP( aPict, aBmp );
-
- bool bResult = false;
-
- NSData* pData = [NSData dataWithBytesNoCopy: (void*)aPict.getConstArray() length: aPict.getLength() freeWhenDone: 0];
- if( pData )
- {
- NSBitmapImageRep* pRep = [NSBitmapImageRep imageRepWithData: pData];
- if( pRep )
- {
- NSData* pOut = [pRep representationUsingType: NSBMPFileType properties: nil];
- if( pOut )
- {
- aBmp.realloc( [pOut length] );
- [pOut getBytes: aBmp.getArray() length: aBmp.getLength()];
- bResult = (aBmp.getLength() != 0);
- }
- }
- }
-
- return bResult;
+ if( eInFormat == PICTImageFileType)
+ return PICTtoPNG( rImgData, rPngData);
+
+ NSData* pData = [NSData dataWithBytesNoCopy: (void*)rImgData.getConstArray() length: rImgData.getLength() freeWhenDone: 0];
+ if( !pData)
+ return false;
+
+ NSBitmapImageRep* pRep =[NSBitmapImageRep imageRepWithData: pData];
+ if( !pRep)
+ return false;
+
+ NSData* pOut = [pRep representationUsingType: NSPNGFileType properties: nil];
+ if( !pOut)
+ return false;
+
+ const size_t nPngSize = [pOut length];
+ rPngData.realloc( nPngSize);
+ [pOut getBytes: rPngData.getArray() length: nPngSize];
+ return (nPngSize > 0);
}
-bool BMPToImage( com::sun::star::uno::Sequence<sal_Int8>& aBmp,
- com::sun::star::uno::Sequence<sal_Int8>& aPict,
+bool PNGToImage( com::sun::star::uno::Sequence<sal_Int8>& rPngData,
+ com::sun::star::uno::Sequence<sal_Int8>& rImgData,
NSBitmapImageFileType eOutFormat
)
{
- if( eOutFormat == PICTImageFileType )
- return BMPtoPICT( aBmp, aPict );
-
- bool bResult = false;
+ if( eOutFormat == PICTImageFileType)
+ return PNGtoPICT( rPngData, rImgData);
- NSData* pData = [NSData dataWithBytesNoCopy: const_cast<sal_Int8*>(aBmp.getConstArray()) length: aBmp.getLength() freeWhenDone: 0];
- if( pData )
- {
+ NSData* pData = [NSData dataWithBytesNoCopy: const_cast<sal_Int8*>(rPngData.getConstArray()) length: rPngData.getLength() freeWhenDone: 0];
+ if( !pData)
+ return false;
+
NSBitmapImageRep* pRep = [NSBitmapImageRep imageRepWithData: pData];
- if( pRep )
- {
- NSData* pOut = [pRep representationUsingType: eOutFormat properties: nil];
- if( pOut )
- {
- aPict.realloc( [pOut length] );
- [pOut getBytes: aPict.getArray() length: aPict.getLength()];
- bResult = (aPict.getLength() != 0);
- }
- }
- }
-
- return bResult;
+ if( !pRep)
+ return false;
+
+ NSData* pOut = [pRep representationUsingType: eOutFormat properties: nil];
+ if( !pOut)
+ return false;
+
+ const size_t nImgSize = [pOut length];
+ rImgData.realloc( nImgSize);
+ [pOut getBytes: rImgData.getArray() length: nImgSize];
+ return (nImgSize > 0);
}
+
Modified: openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/PictToBmpFlt.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/PictToBmpFlt.hxx?rev=1431234&r1=1431233&r2=1431234&view=diff
==============================================================================
--- openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/PictToBmpFlt.hxx (original)
+++ openoffice/branches/alg/clibboard/main/vcl/aqua/source/dtrans/PictToBmpFlt.hxx Thu Jan 10 09:40:17 2013
@@ -28,31 +28,31 @@
#include <Cocoa/Cocoa.h>
#include <postmac.h>
-/* Transform PICT into the a Window BMP.
+/** Transform an image from PICT to PNG format
Returns true if the conversion was successful false
otherwise.
*/
-bool PICTtoBMP(com::sun::star::uno::Sequence<sal_Int8>& aPict,
- com::sun::star::uno::Sequence<sal_Int8>& aBmp);
+bool PICTtoPNG(com::sun::star::uno::Sequence<sal_Int8>& rPictData,
+ com::sun::star::uno::Sequence<sal_Int8>& rPngData);
-/* Transform a Windows BMP to a PICT.
+/** Transform an image from PNG to a PICT format
Returns true if the conversion was successful false
otherwise.
*/
-bool BMPtoPICT(com::sun::star::uno::Sequence<sal_Int8>& aBmp,
- com::sun::star::uno::Sequence<sal_Int8>& aPict);
+bool PNGtoPICT(com::sun::star::uno::Sequence<sal_Int8>& rPngData,
+ com::sun::star::uno::Sequence<sal_Int8>& rPictData);
#define PICTImageFileType ((NSBitmapImageFileType)~0)
-bool ImageToBMP( com::sun::star::uno::Sequence<sal_Int8>& aPict,
- com::sun::star::uno::Sequence<sal_Int8>& aBmp,
+bool ImageToPNG( com::sun::star::uno::Sequence<sal_Int8>& rImgData,
+ com::sun::star::uno::Sequence<sal_Int8>& rPngData,
NSBitmapImageFileType eInFormat);
-bool BMPToImage( com::sun::star::uno::Sequence<sal_Int8>& aBmp,
- com::sun::star::uno::Sequence<sal_Int8>& aPict,
- NSBitmapImageFileType eOutFormat
- );
+bool PNGToImage( com::sun::star::uno::Sequence<sal_Int8>& rPngData,
+ com::sun::star::uno::Sequence<sal_Int8>& rImgData,
+ NSBitmapImageFileType eOutFormat);
#endif
+
Modified: openoffice/branches/alg/clibboard/main/vcl/inc/vcl/pngwrite.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/clibboard/main/vcl/inc/vcl/pngwrite.hxx?rev=1431234&r1=1431233&r2=1431234&view=diff
==============================================================================
--- openoffice/branches/alg/clibboard/main/vcl/inc/vcl/pngwrite.hxx (original)
+++ openoffice/branches/alg/clibboard/main/vcl/inc/vcl/pngwrite.hxx Thu Jan 10 09:40:17 2013
@@ -44,7 +44,7 @@ namespace vcl
public:
- PNGWriter( const BitmapEx& BmpEx,
+ explicit PNGWriter( const BitmapEx&,
const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >* pFilterData = NULL );
~PNGWriter();