Revision: 12114
          http://sourceforge.net/p/skim-app/code/12114
Author:   hofman
Date:     2021-01-26 17:36:56 +0000 (Tue, 26 Jan 2021)
Log Message:
-----------
Quicklook support for postscript files, by using CGPSConvertor to convert to PDF

Modified Paths:
--------------
    trunk/QuickLook-Skim/GeneratePreviewForURL.m
    trunk/QuickLook-Skim/GenerateThumbnailForURL.m
    trunk/QuickLook-Skim/Info.plist

Modified: trunk/QuickLook-Skim/GeneratePreviewForURL.m
===================================================================
--- trunk/QuickLook-Skim/GeneratePreviewForURL.m        2021-01-24 23:04:47 UTC 
(rev 12113)
+++ trunk/QuickLook-Skim/GeneratePreviewForURL.m        2021-01-26 17:36:56 UTC 
(rev 12114)
@@ -83,6 +83,25 @@
             }
         }
         
+    } else if (UTTypeEqual(CFSTR("com.adobe.postscript"), contentTypeUTI)) {
+        
+        bool converted = false;
+        CGPSConverterCallbacks converterCallbacks = { 0, NULL, NULL, NULL, 
NULL, NULL, NULL, NULL };
+        CGPSConverterRef converter = CGPSConverterCreate(NULL, 
&converterCallbacks, NULL);
+        CGDataProviderRef provider = CGDataProviderCreateWithURL(url);
+        CFMutableDataRef data = CFDataCreateMutable(NULL, 0);
+        CGDataConsumerRef consumer = CGDataConsumerCreateWithCFData(data);
+        if (provider != NULL && consumer != NULL)
+            converted = CGPSConverterConvert(converter, provider, consumer, 
NULL);
+        CGDataProviderRelease(provider);
+        CGDataConsumerRelease(consumer);
+        CFRelease(converter);
+        if (converted) {
+            QLPreviewRequestSetDataRepresentation(preview, data, kUTTypePDF, 
NULL);
+            err = noErr;
+        }
+        if (data) CFRelease(data);
+        
     } else if (UTTypeEqual(CFSTR("net.sourceforge.skim-app.skimnotes"), 
contentTypeUTI)) {
         
         NSData *data = [[NSData alloc] initWithContentsOfURL:(NSURL *)url 
options:NSUncachedRead error:NULL];

Modified: trunk/QuickLook-Skim/GenerateThumbnailForURL.m
===================================================================
--- trunk/QuickLook-Skim/GenerateThumbnailForURL.m      2021-01-24 23:04:47 UTC 
(rev 12113)
+++ trunk/QuickLook-Skim/GenerateThumbnailForURL.m      2021-01-26 17:36:56 UTC 
(rev 12114)
@@ -164,6 +164,48 @@
             CGPDFDocumentRelease(pdfDoc);
         }
         
+    } else if (UTTypeEqual(CFSTR("com.adobe.postscript"), contentTypeUTI)) {
+        
+        bool converted = false;
+        CGPSConverterCallbacks converterCallbacks = { 0, NULL, NULL, NULL, 
NULL, NULL, NULL, NULL };
+        CGPSConverterRef converter = CGPSConverterCreate(NULL, 
&converterCallbacks, NULL);
+        CGDataProviderRef provider = CGDataProviderCreateWithURL(url);
+        CFMutableDataRef pdfData = CFDataCreateMutable(NULL, 0);
+        CGDataConsumerRef consumer = CGDataConsumerCreateWithCFData(pdfData);
+        if (provider != NULL && consumer != NULL)
+            converted = CGPSConverterConvert(converter, provider, consumer, 
NULL);
+        CGDataProviderRelease(provider);
+        CGDataConsumerRelease(consumer);
+        CFRelease(converter);
+        
+        if (converted) {
+            // sadly, we can't use the system's QL generator from inside 
quicklookd, so we don't get the fancy binder on the left edge
+            provider = CGDataProviderCreateWithCFData(pdfData);
+            CGPDFDocumentRef pdfDoc = 
CGPDFDocumentCreateWithProvider(provider);
+            CGPDFPageRef pdfPage = NULL;
+            if (pdfDoc && CGPDFDocumentGetNumberOfPages(pdfDoc) > 0)
+                pdfPage = CGPDFDocumentGetPage(pdfDoc, 1);
+            
+            if (pdfPage) {
+                CGRect pageRect = CGPDFPageGetBoxRect(pdfPage, kCGPDFCropBox);
+                CGRect thumbRect = {{0.0, 0.0}, {CGRectGetWidth(pageRect), 
CGRectGetHeight(pageRect)}};
+                CGFloat color[4] = {1.0, 1.0, 1.0, 1.0};
+                CGContextRef ctxt = QLThumbnailRequestCreateContext(thumbnail, 
thumbRect.size, FALSE, NULL);
+                CGAffineTransform t = CGPDFPageGetDrawingTransform(pdfPage, 
kCGPDFCropBox, thumbRect, 0, true);
+                CGContextConcatCTM(ctxt, t);
+                CGContextClipToRect(ctxt, pageRect);
+                CGContextSetFillColor(ctxt, color);
+                CGContextFillRect(ctxt, pageRect);
+                CGContextDrawPDFPage(ctxt, pdfPage);
+                QLThumbnailRequestFlushContext(thumbnail, ctxt);
+                CGContextRelease(ctxt);
+                didGenerate = true;
+            }
+            CGPDFDocumentRelease(pdfDoc);
+            CGDataProviderRelease(provider);
+        }
+        if (pdfData) CFRelease(pdfData);
+        
     } else if (UTTypeEqual(CFSTR("net.sourceforge.skim-app.skimnotes"), 
contentTypeUTI)) {
         
         NSData *data = [[NSData alloc] initWithContentsOfURL:(NSURL *)url 
options:NSUncachedRead error:NULL];

Modified: trunk/QuickLook-Skim/Info.plist
===================================================================
--- trunk/QuickLook-Skim/Info.plist     2021-01-24 23:04:47 UTC (rev 12113)
+++ trunk/QuickLook-Skim/Info.plist     2021-01-26 17:36:56 UTC (rev 12114)
@@ -13,6 +13,7 @@
                        <array>
                                <string>net.sourceforge.skim-app.pdfd</string>
                                
<string>net.sourceforge.skim-app.skimnotes</string>
+                               <string>com.adobe.postscript</string>
                        </array>
                </dict>
        </array>

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to