static void quartzgen_begin_anchor(GVJ_t *job, char *url, char *tooltip, char *target, char *id) { pointf *url_map = job->obj->url_map_p; if (url && url_map) { /* set up the hyperlink to the given url */ CGContextRef context = (CGContextRef)job->context; CFURLRef uri = CFURLCreateWithBytes (kCFAllocatorDefault, (const UInt8 *)url, strlen(url), kCFStringEncodingUTF8, NULL); CGPDFContextSetURLForRect( context, uri, /* need to reverse the CTM on the area to get it to work */ CGRectApplyAffineTransform(CGRectMake(url_map[0].x, url_map[0].y, url_map[1].x - url_map[0].x, url_map[1].y - url_map[0].y),CGContextGetCTM(context)) ); /* clean up */ CFRelease(uri); } }
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))); }