Re: Drawing a view inside an image
Re: Drawing a view inside an image
- Subject: Re: Drawing a view inside an image
- From: Simone Manganelli <email@hidden>
- Date: Tue, 10 Dec 2002 10:34:56 -0800
Olivier --
The thing is, with my new code, I changed it so the progress indicator
that is used to display the things in the table view is actually a sole
progress indicator in its own window. Do I have to show the window in
order to get the image of the progress indicator? I was able to get
the image from the NSProgressIndicator programatically by using
[theLoneProgressIndicator dataWithPDFInsideRect: [self bounds]], but
this is horrendously slow.
So why am I still getting the error when the progress indicator is
actually in a window?
-- Simone Manganelli
On Tuesday, Dec 10, 2002, at 08:29 US/Pacific, Olivier wrote:
here is an update, i was able to get a nice picture with that code:
windowContainingIndicator = [[NSWindow alloc]
initWithContentRect: NSMakeRect(0, 0, 100, 100)
styleMask: NSBorderlessWindowMask
backing: NSBackingStoreNonretained
defer: NO];
indicator = [[NSProgressIndicator alloc] initWithFrame:
NSMakeRect(0, 0, 16, 16)];
[[windowContainingIndicator contentView] addSubview:
indicator];
[indicator setDoubleValue: 0];
[indicator setMinValue: 0];
[indicator setMaxValue: 100];
[windowContainingIndicator orderFront: self]; -->line added
Olivier
On Tuesday, December 10, 2002, at 10:10 AM, Olivier wrote:
You need to have the view inside a window to be able to focus the
view.
I'm trying to do exactely the same thing as you are.
I put my progress indicator in window that i created programatically.
that create an image, but that image does not contain the progress
indicator...
windowContainingIndicator = [[NSWindow alloc]
initWithContentRect: NSMakeRect(0, 0, 100, 100)
styleMask: NSBorderlessWindowMask
backing: NSBackingStoreNonretained
defer: NO];
indicator = [[NSProgressIndicator alloc] initWithFrame:
NSMakeRect(0, 0, 16, 16)];
[[windowContainingIndicator contentView] addSubview:
indicator];
[indicator setDoubleValue: 0];
[indicator setMinValue: 0];
[indicator setMaxValue: 100];
the style of the progress indicator is set somewhere else, and i make
sure to set is display when stopped to YES, but no luck yet, let me
know if you find a solution
olivier
On Monday, December 9, 2002, at 08:39 PM, Simone Manganelli wrote:
I was using init, and then I was using the setFrame: method
immediately after, but apparently it still didn't work.
I tried to modify my code to use the method you used below, but now
I'm getting some uncaught exceptions. Here's the new code:
NSProgressIndicator *theProgressIndicator;
NSBitmapImageRep *rep;
NSImage *theNewImage = [[NSImage alloc]
initWithSize:NSMakeSize(60,12)];
NSRect theRect = NSMakeRect(0,0,60,12);
[theProgBarImage release];
theProgressIndicator = [[NSProgressIndicator alloc]
initWithFrame:theRect];
[theProgressIndicator setIndeterminate:NO];
[theProgressIndicator setMaxValue:[theMaxValue doubleValue]];
[theProgressIndicator setDoubleValue:[memUsage doubleValue]];
[theProgressIndicator stopAnimation:nil];
[theProgressIndicator lockFocus];
rep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:theRect];
[theProgressIndicator unlockFocus];
[theNewImage addRepresentation:rep];
[rep release];
[theProgressIndicator release];
theProgBarImage = theNewImage;
I'm getting this set of errors:
2002-12-09 18:34:15.881 MyApp[18892] *** Assertion failure in
-[NSProgressIndicator lockFocus], AppKit.subproj/NSView.m:2343
2002-12-09 18:34:15.885 MyApp[18892] An uncaught exception was raised
2002-12-09 18:34:15.895 MyApp[18892] lockFocus sent to a view whose
window is deferred and does not yet have a corresponding platform
window
2002-12-09 18:34:15.895 MyApp[18892] *** Uncaught exception:
<NSInternalInconsistencyException> lockFocus sent to a view whose
window is deferred and does not yet have a corresponding platform
window
MyApp has exited due to signal 5 (SIGTRAP).
Any help?
-- Simone Manganelli
On Monday, Dec 9, 2002, at 16:58 US/Pacific, John C. Randolph wrote:
On Monday, December 9, 2002, at 01:12 PM, Simone Manganelli wrote:
How would one go about drawing the image of an NSView into an
NSImage? Specifically, I want to draw what a specific
NSProgressIndicator looks like into a specific NSImage, which I
then
want to use in my program. How would one go about doing that?
I've
tried it using this code:
NSProgressIndicator *theProgressIndicator;
NSImage *theProgBarImage = [[NSImage alloc]
initWithSize:NSMakeSize(60,12)];
NSRect theRect = NSMakeRect(0,0,60,12);
[theProgBarImage lockFocus];
theProgressIndicator = [[NSProgressIndicator alloc] init];
[snippage]
However, it doesn't seem to work. What am I doing wrong?
You're calling -init, instead of -initWithFrame: when you create
your
progress indicator. The designated initializer for any NSView
subclass is -initWithFrame. The effect of this is that the progress
indicator never created the cell it should use to draw its contents.
BTW, I wrote a category of NSImage a while ago that does this:
@implementation NSView (snapshot)
- (NSImage *) snapshot { return [self snapshotFromRect:[self
bounds]]; }
- (NSImage *) snapshotFromRect:(NSRect) sourceRect;
/*"This method creates a new image from a portion of the receiveing
view. The image is returned autoreleased."*/
{
NSImage
*snapshot = [[NSImage alloc] initWithSize:sourceRect.size];
NSBitmapImageRep
*rep;
[self lockFocus];
rep = [[NSBitmapImageRep alloc]
initWithFocusedViewRect:sourceRect];
[self unlockFocus];
[snapshot addRepresentation:rep];
[rep release];
return [snapshot autorelease]; // balance the +alloc call..
}
@end
It's part of the "Color Sampler" example, available at:
http://developer.apple.com/samplecode/Sample_Code/Cocoa/
Color_Sampler.htm
-jcr
John C. Randolph <email@hidden> (408) 974-8819
Sr. Cocoa Software Engineer,
Apple Worldwide Developer Relations
http://developer.apple.com/cocoa/index.html
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.