Author: hdu
Date: Wed Jan 22 14:26:16 2014
New Revision: 1560359

URL: http://svn.apache.org/r1560359
Log:
#i123895# implement Drag&Drop for images on OSX>=10.6

Modified:
    openoffice/trunk/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
    openoffice/trunk/main/vcl/aqua/source/dtrans/PictToBmpFlt.cxx

Modified: openoffice/trunk/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx?rev=1560359&r1=1560358&r2=1560359&view=diff
==============================================================================
--- openoffice/trunk/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx 
(original)
+++ openoffice/trunk/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx Wed Jan 
22 14:26:16 2014
@@ -608,7 +608,13 @@ DataProviderPtr_t DataFlavorMapper::getD
                        }
                  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::getD
        {
          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));

Modified: openoffice/trunk/main/vcl/aqua/source/dtrans/PictToBmpFlt.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/aqua/source/dtrans/PictToBmpFlt.cxx?rev=1560359&r1=1560358&r2=1560359&view=diff
==============================================================================
--- openoffice/trunk/main/vcl/aqua/source/dtrans/PictToBmpFlt.cxx (original)
+++ openoffice/trunk/main/vcl/aqua/source/dtrans/PictToBmpFlt.cxx Wed Jan 22 
14:26:16 2014
@@ -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::Seq
                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::Seq
                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::Seq
                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::Se
        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::Se
                             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::Se
        if( !pOut)
                return false;
 
+       // get the conversion result
        const size_t nImgSize = [pOut length];
        rImgData.realloc( nImgSize);
        [pOut getBytes: rImgData.getArray() length: nImgSize];


Reply via email to