[PD-dev] Pd external-window crash

nosehair911 at bellsouth.net nosehair911 at bellsouth.net
Mon Jun 25 22:05:24 CEST 2007


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: <nosehair911 at bellsouth.net>
> Date: 2007/06/25 Mon AM 09:18:44 EDT
> To: <pd-dev at 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 at iem.at
> http://lists.puredata.info/listinfo/pd-dev
> 





More information about the Pd-dev mailing list