vcl/aqua/source/dtrans/DataFlavorMapping.cxx | 14 +++++++++++- vcl/aqua/source/dtrans/PictToBmpFlt.cxx | 30 ++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-)
New commits: commit b201c7b5bf8af3423392b031c818008d39ec8d26 Author: Herbert Dürr <[email protected]> Date: Wed Jan 22 14:26:16 2014 +0000 #i123895# implement Drag&Drop for images on OSX>=10.6 diff --git a/vcl/aqua/source/dtrans/DataFlavorMapping.cxx b/vcl/aqua/source/dtrans/DataFlavorMapping.cxx index c3650e5..095a5ee 100644 --- a/vcl/aqua/source/dtrans/DataFlavorMapping.cxx +++ b/vcl/aqua/source/dtrans/DataFlavorMapping.cxx @@ -608,7 +608,13 @@ DataProviderPtr_t DataFlavorMapper::getDataProvider( const NSString* systemFlavo } else */ - if ([systemFlavor caseInsensitiveCompare: NSPICTPboardType] == NSOrderedSame) +#ifdef MAC_OS_X_VERSION_10_6 + if ([systemFlavor caseInsensitiveCompare: NSPasteboardTypePNG] == NSOrderedSame) + { + dp = DataProviderPtr_t( new PNGDataProvider( data, NSPNGFileType)); + } else +#endif // MAC_OS_X_VERSION_10_5 + if ([systemFlavor caseInsensitiveCompare: NSPICTPboardType] == NSOrderedSame) { dp = DataProviderPtr_t( new PNGDataProvider( data, PICTImageFileType)); } @@ -657,6 +663,12 @@ DataProviderPtr_t DataFlavorMapper::getDataProvider( const NSString* systemFlavo { dp = DataProviderPtr_t(new HTMLFormatDataProvider(systemData)); } +#ifdef MAC_OS_X_VERSION_10_6 + else if ([systemFlavor caseInsensitiveCompare: NSPasteboardTypePNG] == NSOrderedSame) + { + dp = DataProviderPtr_t( new PNGDataProvider(systemData, NSPNGFileType)); + } +#endif // MAC_OS_X_VERSION_10_6 else if ([systemFlavor caseInsensitiveCompare: NSPICTPboardType] == NSOrderedSame) { dp = DataProviderPtr_t( new PNGDataProvider(systemData, PICTImageFileType)); diff --git a/vcl/aqua/source/dtrans/PictToBmpFlt.cxx b/vcl/aqua/source/dtrans/PictToBmpFlt.cxx index 2697fcd..ef103a8 100644 --- a/vcl/aqua/source/dtrans/PictToBmpFlt.cxx +++ b/vcl/aqua/source/dtrans/PictToBmpFlt.cxx @@ -39,6 +39,9 @@ bool PICTtoPNG( com::sun::star::uno::Sequence<sal_Int8>& rPictData, com::sun::star::uno::Sequence<sal_Int8>& rPngData) { +#ifdef MAC_OS_X_VERSION_10_6 + return false; +#else // MAC_OS_X_VERSION_10_6 ComponentInstance pngExporter = NULL; if( OpenADefaultComponent( GraphicsExporterComponentType, kQTFileTypePNG, &pngExporter) != noErr) return false; @@ -72,12 +75,16 @@ bool PICTtoPNG( com::sun::star::uno::Sequence<sal_Int8>& rPictData, CloseComponent( pngExporter); return (nPngSize > 0); +#endif // MAC_OS_X_VERSION_10_6 } bool PNGtoPICT( com::sun::star::uno::Sequence<sal_Int8>& rPngData, com::sun::star::uno::Sequence<sal_Int8>& rPictData) { +#ifdef MAC_OS_X_VERSION_10_6 + return false; +#else // MAC_OS_X_VERSION_10_6 ComponentInstance pictExporter; if( OpenADefaultComponent( GraphicsImporterComponentType, kQTFileTypePNG, &pictExporter) != noErr) return false; @@ -99,9 +106,11 @@ bool PNGtoPICT( com::sun::star::uno::Sequence<sal_Int8>& rPngData, rtl_copyMemory( rPictData.getArray(), ((sal_Int8*)*hPict), nPictSize); HUnlock( (Handle)hPict); +#if __MAC_OS_X_VERSION_MAX_ALLOWED <= 1060 // Release the data associated with the picture - // Note: This function is deprecated in Mac OSX 10.4 + // Note: This function has been deprecated in OSX 10.4 and removed in OSX 10.7 KillPicture( hPict); +#endif } if( hPng) @@ -110,15 +119,24 @@ bool PNGtoPICT( com::sun::star::uno::Sequence<sal_Int8>& rPngData, CloseComponent( pictExporter); return (nPictSize > 512); +#endif // MAC_OS_X_VERSION_10_6 } bool ImageToPNG( com::sun::star::uno::Sequence<sal_Int8>& rImgData, com::sun::star::uno::Sequence<sal_Int8>& rPngData, NSBitmapImageFileType eInFormat) { + // short circuit for PNG->PNG request + if( eInFormat == NSPNGFileType) { + rPngData = rImgData; + return true; + } + + // special handling for old PICT images that are not supported by NSBitmapImage if( eInFormat == PICTImageFileType) return PICTtoPNG( rImgData, rPngData); + // let Cocoa's NSBitmapImageRep do the conversion NSData* pData = [NSData dataWithBytesNoCopy: (void*)rImgData.getConstArray() length: rImgData.getLength() freeWhenDone: 0]; if( !pData) return false; @@ -131,6 +149,7 @@ bool ImageToPNG( com::sun::star::uno::Sequence<sal_Int8>& rImgData, if( !pOut) return false; + // get the conversion result const size_t nPngSize = [pOut length]; rPngData.realloc( nPngSize); [pOut getBytes: rPngData.getArray() length: nPngSize]; @@ -142,9 +161,17 @@ bool PNGToImage( com::sun::star::uno::Sequence<sal_Int8>& rPngData, NSBitmapImageFileType eOutFormat ) { + // short circuit for PNG->PNG request + if( eOutFormat == NSPNGFileType) { + rImgData = rPngData; + return true; + } + + // special handling for old PICT images that are not supported by NSBitmapImage if( eOutFormat == PICTImageFileType) return PNGtoPICT( rPngData, rImgData); + // let Cocoa's NSBitmapImageRep do the conversion NSData* pData = [NSData dataWithBytesNoCopy: const_cast<sal_Int8*>(rPngData.getConstArray()) length: rPngData.getLength() freeWhenDone: 0]; if( !pData) return false; @@ -157,6 +184,7 @@ bool PNGToImage( com::sun::star::uno::Sequence<sal_Int8>& rPngData, if( !pOut) return false; + // get the conversion result const size_t nImgSize = [pOut length]; rImgData.realloc( nImgSize); [pOut getBytes: rImgData.getArray() length: nImgSize];
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
