ImageTargetFileQuartz::ImageTargetFileQuartz( DataTargetRef dataTarget, ImageSourceRef imageSource, const std::string &extensionData ) : cocoa::ImageTargetCgImage( imageSource ) { cocoa::SafeCfString uti = cocoa::createSafeCfString( extensionData ); mImageDest = NULL; if( dataTarget->providesFilePath() ) { cocoa::SafeCfString pathString = cocoa::createSafeCfString( dataTarget->getFilePath() ); std::shared_ptr<const __CFURL> urlRef( ::CFURLCreateWithFileSystemPath( kCFAllocatorDefault, pathString.get(), kCFURLPOSIXPathStyle, false ), cocoa::safeCfRelease ); mImageDest = ::CGImageDestinationCreateWithURL( urlRef.get(), uti.get(), 1, NULL ); } else if( dataTarget->providesUrl() ) { std::shared_ptr<const __CFURL> urlRef( cocoa::createCfUrl( dataTarget->getUrl() ), cocoa::safeCfRelease ); mImageDest = ::CGImageDestinationCreateWithURL( urlRef.get(), uti.get(), 1, NULL ); } else { // we'll wrap a cinder::OStream in a CGDataConsumer for output OStreamRef *ostreamRef = new OStreamRef( dataTarget->getStream() ); ::CGDataConsumerCallbacks callbacks; callbacks.putBytes = cgDataConsumerPutBytes; callbacks.releaseConsumer = cgDataConsumerRelease; std::shared_ptr<CGDataConsumer> consumer( ::CGDataConsumerCreate( ostreamRef, &callbacks ), ::CGDataConsumerRelease ); mImageDest = ::CGImageDestinationCreateWithDataConsumer( consumer.get(), uti.get(), 1, NULL ); } if( ! mImageDest ) throw ImageIoExceptionFailedWrite(); setupImageDestOptions(); }
void GraphicsContext::setURLForRect(const KURL& link, const IntRect& destRect) { if (paintingDisabled()) return; RetainPtr<CFURLRef> urlRef(AdoptCF, link.createCFURL()); if (!urlRef) return; CGContextRef context = platformContext(); // Get the bounding box to handle clipping. CGRect box = CGContextGetClipBoundingBox(context); IntRect intBox((int)box.origin.x, (int)box.origin.y, (int)box.size.width, (int)box.size.height); IntRect rect = destRect; rect.intersect(intBox); CGPDFContextSetURLForRect(context, urlRef.get(), CGRectApplyAffineTransform(rect, CGContextGetCTM(context))); }