Re: NSGraphicsContext restore crashes my xtension
Re: NSGraphicsContext restore crashes my xtension
- Subject: Re: NSGraphicsContext restore crashes my xtension
- From: email@hidden
- Date: Sun, 27 Jul 2008 18:07:35 +0000
-------------- Original message ----------------------
From: email@hidden
>
> -------------- Original message ----------------------
> From: glenn andreas <email@hidden>
> >
> > You're setting a graphics context:
> > > // uncommenting the next line works fine for all ads except the
> > > last which
> > > // causes a crash after the last ad image is placed.
> > > //[NSGraphicsContext setCurrentContext: nsContext];
> >
> > But you're never restoring the original context, and as a result, the
> > context is autoreleased later (and is still the current context).
> > saveGraphicsState and restoreGraphicsState only saves and restores the
> > state of the current context - it doesn't save/restore the current
> > context...
>
> If you look a couple of lines down from that one, you'll see
>
> [nsContext restoreGraphicsState];
>
> It doesn't seem to make any difference when I uncomment that line as the gdb
> backtrace of the crash is exactly the same.
>
> Is that "restoreGraphicsState " what you mean?
If it's any help, here's the method that calls "drawImageTextInCGContext." I'm trying to take advantage of CGLayers for speed but if there is a simpler way to do this that in the ballpark, speed-wise as CGLayer, I'm not married to my solution....
- (void) initImageLayer
{
NSRect selfFrame = [self adFrame];
CGRect rect = CGRectMake(0, 0, selfFrame.size.width, selfFrame.size.height);
CGContextRef imageLayerContext = NULL;
CFMutableDataRef consumerDataRef = CFDataCreateMutable(kCFAllocatorDefault, 0);
CGDataConsumerRef consumer = CGDataConsumerCreateWithCFData(consumerDataRef);
CGContextRef context = CGPDFContextCreate(consumer, &rect, NULL);
CGContextSaveGState(context);
imageLayer = CGLayerCreateWithContext(context, rect.size, NULL);
imageLayerContext = CGLayerGetContext(imageLayer);
// draw background in image layer
CGContextDrawLayerInRect(imageLayerContext, rect, [self backgroundLayer]);
// it's far easier to handle styled text in Cocoa so, just for the
// ad text, wrap imageLayerContext inside a NSGraphicsContext
[self drawImageTextInCGContext: imageLayerContext];
CGContextRestoreGState(context);
}
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden