summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2014-11-08 18:14:31 +0000
committerManolo Gouy <Manolo>2014-11-08 18:14:31 +0000
commit574e31276e7006e1f558ebcb3af6fbd3c4274633 (patch)
tree9634f8a5aaef7d0405c990a063ef42040d965265 /src
parentbaf5ea7d56abed44ab3224a47496250dedaa8b83 (diff)
Rewrite Fl_Copy_Surface::complete_copy_pdf_and_tiff() using cocoa APIs.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10442 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
-rw-r--r--src/Fl_Copy_Surface.cxx43
-rw-r--r--src/Fl_cocoa.mm52
2 files changed, 33 insertions, 62 deletions
diff --git a/src/Fl_Copy_Surface.cxx b/src/Fl_Copy_Surface.cxx
index 706b87f1e..3f3db0d7f 100644
--- a/src/Fl_Copy_Surface.cxx
+++ b/src/Fl_Copy_Surface.cxx
@@ -212,49 +212,6 @@ void Fl_Copy_Surface::prepare_copy_pdf_and_tiff(int w, int h)
CGContextSaveGState(gc);
}
-
-void Fl_Copy_Surface::complete_copy_pdf_and_tiff()
-{
- CGContextRestoreGState(gc);
- CGContextEndPage(gc);
- CGContextRelease(gc);
- PasteboardRef clipboard = NULL;
- PasteboardCreate(kPasteboardClipboard, &clipboard);
- PasteboardClear(clipboard); // first, copy PDF to clipboard
- PasteboardPutItemFlavor (clipboard, (PasteboardItemID)1,
- CFSTR("com.adobe.pdf"), // kUTTypePDF
- pdfdata, kPasteboardFlavorNoFlags);
- //second, transform this PDF to a bitmap image and put it as tiff in clipboard
- CGDataProviderRef prov;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040
- if(fl_mac_os_version >= 100400)
- prov = CGDataProviderCreateWithCFData(pdfdata); // 10.4
- else
-#endif
- prov = CGDataProviderCreateWithData(NULL, CFDataGetBytePtr(pdfdata), CFDataGetLength(pdfdata), NULL);
- CGPDFDocumentRef pdfdoc = CGPDFDocumentCreateWithProvider(prov);
- CGPDFPageRef pdfpage = CGPDFDocumentGetPage(pdfdoc, 1);
- CGDataProviderRelease(prov);
- CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
- void *mem = ( fl_mac_os_version >= 100600 ? NULL : malloc(width * height * 4) );
- gc = CGBitmapContextCreate(mem, width, height, 8, width * 4, space, kCGImageAlphaNoneSkipLast);
- CFRelease(space);
- if (gc == NULL) { if (mem) free(mem); return; }
- CGRect rect = CGRectMake(0, 0, width, height);
- CGContextSetRGBFillColor(gc, 1,1,1,1);//need to clear background
- CGContextFillRect(gc, rect);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
- CGContextDrawPDFPage(gc, pdfpage); // requires 10.3
-#endif
- CGPDFDocumentRelease(pdfdoc);
- CFRelease(pdfdata);
- PasteboardPutItemFlavor(clipboard, (PasteboardItemID)1, CFSTR("public.tiff"),
- Fl_X::CGBitmapContextToTIFF(gc), kPasteboardFlavorNoFlags);
- CFRelease(clipboard);
- CGContextRelease(gc);
- if (mem) free(mem);
-}
-
#endif // __APPLE__
#if !(defined(__APPLE__) || defined(WIN32) || defined(FL_DOXYGEN))
diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm
index 90b133b27..ff693c57e 100644
--- a/src/Fl_cocoa.mm
+++ b/src/Fl_cocoa.mm
@@ -44,6 +44,7 @@ extern "C" {
#include <FL/Fl_Printer.H>
#include <FL/Fl_Input_.H>
#include <FL/Fl_Text_Display.H>
+#include <FL/Fl_Copy_Surface.H>
#include <stdio.h>
#include <stdlib.h>
#include "flstring.h"
@@ -3031,6 +3032,38 @@ void Fl_X::q_end_image() {
CGContextRestoreGState(fl_gc);
}
+void Fl_Copy_Surface::complete_copy_pdf_and_tiff()
+{
+ CGContextRestoreGState(gc);
+ CGContextEndPage(gc);
+ CGContextRelease(gc);
+ NSPasteboard *clip = [NSPasteboard generalPasteboard];
+ [clip declareTypes:[NSArray arrayWithObjects:@"com.adobe.pdf", @"public.tiff", nil] owner:nil];
+ [clip setData:(NSData*)pdfdata forType:@"com.adobe.pdf"];
+ //second, transform this PDF to a bitmap image and put it as tiff in clipboard
+ NSPDFImageRep *vectorial = [[NSPDFImageRep alloc] initWithData:(NSData*)pdfdata];
+ CFRelease(pdfdata);
+ NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
+ pixelsWide:width
+ pixelsHigh:height
+ bitsPerSample:8
+ samplesPerPixel:3
+ hasAlpha:NO
+ isPlanar:NO
+ colorSpaceName:NSDeviceRGBColorSpace
+ bytesPerRow:width*4
+ bitsPerPixel:32];
+ memset([bitmap bitmapData], -1, [bitmap bytesPerRow] * [bitmap pixelsHigh]);
+ NSDictionary *dict = [NSDictionary dictionaryWithObject:bitmap
+ forKey:NSGraphicsContextDestinationAttributeName];
+ NSGraphicsContext *oldgc = [NSGraphicsContext currentContext];
+ [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithAttributes:dict]];
+ [vectorial draw];
+ [vectorial release];
+ [NSGraphicsContext setCurrentContext:oldgc];
+ [clip setData:[bitmap TIFFRepresentation] forType:@"public.tiff"];
+ [bitmap release];
+}
////////////////////////////////////////////////////////////////
// Copy & Paste fltk implementation.
@@ -3438,25 +3471,6 @@ static NSImage *CGBitmapContextToNSImage(CGContextRef c)
return [image autorelease];
}
-
-CFDataRef Fl_X::CGBitmapContextToTIFF(CGContextRef c)
-{ // the returned value is autoreleased
- unsigned char *pdata = (unsigned char *)CGBitmapContextGetData(c);
- NSBitmapImageRep *imagerep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:&pdata
- pixelsWide:CGBitmapContextGetWidth(c)
- pixelsHigh:CGBitmapContextGetHeight(c)
- bitsPerSample:8
- samplesPerPixel:3
- hasAlpha:NO
- isPlanar:NO
- colorSpaceName:NSDeviceRGBColorSpace
- bytesPerRow:CGBitmapContextGetBytesPerRow(c)
- bitsPerPixel:CGBitmapContextGetBitsPerPixel(c)];
- NSData* tiff = [imagerep TIFFRepresentation];
- [imagerep release];
- return (CFDataRef)tiff;
-}
-
int Fl_X::set_cursor(Fl_Cursor c)
{
if (cursor) {