Jamie, I am running thru your 2004 apple developer posts. http://lists.apple.com/archives/carbon-development/2004/Jan/msg00318.html I am trying to figure out how you solved the carbon windowing issue you had with Gem for my external but you never posted a solution. What did you finaly do to get it working? I am looking at the GemWinCreateMac.cpp but cant find the solution. Thanks, Alain > > From: <[EMAIL PROTECTED]> > Date: 2007/06/25 Mon AM 09:18:44 EDT > To: <pd-dev@iem.at> > Subject: Re: [PD-dev] Pd external-window crash > > > Well it looks like if I get a Gemwin opened first, then I can open an > > opencv window without a crash... > > > It seems like the window is made using Carbon. Is there any special way > > > Pd handles Carbon > > > windows that would cause this stall? > > This is my last hurdle. I have my externals working but in order to use the > carbon window I have to > open a gemwin first(not very profecional). I am using an opencv function > for windowing that looks > like this: > > CV_IMPL int cvNamedWindow( const char* name, int flags ) > { > int result = 0; > CV_FUNCNAME( "cvNamedWindow" ); > if (!wasInitialized) > cvInitSystem(0, NULL); > > // to be able to display a window, we need to be a 'faceful' application > // http://lists.apple.com/archives/carbon-dev/2005/Jun/msg01414.html > static bool switched_to_faceful = false; > if (! switched_to_faceful) > { > ProcessSerialNumber psn = { 0, kCurrentProcess }; > OSStatus ret = TransformProcessType (&psn, > kProcessTransformToForegroundApplication ); > > if (ret == noErr) > { > SetFrontProcess( &psn ); > switched_to_faceful = true; > } > else > { > fprintf(stderr, "Failed to tranform process type: %d\n", (int) > ret); > fflush (stderr); > } > } > > __BEGIN__; > > WindowRef outWindow = NULL; > OSStatus err = noErr; > Rect contentBounds = {100,100,320,440}; > > CvWindow* window; > UInt wAttributes = 0; > > int len; > > const EventTypeSpec genericWindowEventHandler[] = { > { kEventClassMouse, kEventMouseMoved}, > { kEventClassMouse, kEventMouseUp}, > { kEventClassMouse, kEventMouseDown}, > { kEventClassWindow, kEventWindowClose }, > { kEventClassWindow, kEventWindowBoundsChanged }//FD > }; > > if( !name ) > CV_ERROR( CV_StsNullPtr, "NULL name string" ); > > if( icvFindWindowByName( name ) != 0 ){ > result = 1; > EXIT; > } > len = strlen(name); > CV_CALL( window = (CvWindow*)cvAlloc(sizeof(CvWindow) + len + 1)); > memset( window, 0, sizeof(*window)); > window->name = (char*)(window + 1); > memcpy( window->name, name, len + 1 ); > window->flags = flags; > window->signature = CV_WINDOW_MAGIC_VAL; > window->image = 0; > window->last_key = 0; > window->on_mouse = 0; > window->on_mouse_param = 0; > > window->next = hg_windows; > window->prev = 0; > if( hg_windows ) > hg_windows->prev = window; > hg_windows = window; > wAttributes = kWindowStandardDocumentAttributes | > kWindowStandardHandlerAttribute | > kWindowLiveResizeAttribute; > > err = CreateNewWindow ( > kDocumentWindowClass,wAttributes,&contentBounds,&outWindow); > if (err != noErr) > fprintf(stderr,"Error while creating the window\n"); > > SetWindowTitleWithCFString(outWindow,CFStringCreateWithCString > (NULL,name,kCFStringEncodingASCII)); > if (err != noErr) > fprintf(stdout,"Error SetWindowTitleWithCFString\n"); > > window->window = outWindow; > > err = InstallWindowEventHandler(outWindow, > NewEventHandlerUPP(windowEventHandler), > GetEventTypeCount(genericWindowEventHandler), genericWindowEventHandler, > outWindow, > NULL); > > ShowWindow( outWindow ); > result = 1; > > __END__; > return result; > } > > It seems to me that if this works outside of Pd then there must be something > Pd needs in order to > display a carbon window properly. It seems that the "faceful" stuff was > written in to prevent this from > happening but it doesnt work in Pd. I have been digging thru the Gem code to > find out how it does it > but it is so intertwined with the openGL code that I cant seem to figure out > how it displays a carbon > window corectly. Anyway if anyone has any ideas let me know. Until I figure > this out I will be opening > up a gemwin along with my external:(. > Alain > > > _______________________________________________ > PD-dev mailing list > PD-dev@iem.at > http://lists.puredata.info/listinfo/pd-dev >
_______________________________________________ PD-dev mailing list PD-dev@iem.at http://lists.puredata.info/listinfo/pd-dev