[Openmcl-devel] NSApplication run method does not seem to work quite right
Willem Rein Oudshoorn
woudshoo at xs4all.nl
Sat Mar 8 11:59:25 PST 2014
I am trying to use the objc bridge to create a GUI using the cocoa
framework. However the way I try it does not seem to work quite right.
In Objective C I can do the following:
#import <Cocoa/Cocoa.h>
int
main (int argn, char *argv[])
{
NSApplication* app = [NSApplication sharedApplication];
NSWindow* window = [[NSWindow alloc] initWithContentRect: NSMakeRect (100, 100, 300, 300)
styleMask: NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask
backing: NSBackingStoreBuffered
defer: YES];
[window makeKeyAndOrderFront:nil];
[app run];
return 1;
}
When running this I get a resiable window which does work, I can resize
it etc.
If I do the equivalent in CCL with the objc bridge:
(require :objc-support)
(defparameter *app* nil)
(defun make-app ()
(setf *app*
(#/sharedApplication ns:ns-application)))
(defparameter *window* nil)
(defun make-window ()
(setf *window*
(ns:with-ns-rect (frame 0 600 300 300)
(make-instance 'ns:ns-window
:with-content-rect frame
:style-mask (logior #$NSTitledWindowMask
#$NSClosableWindowMask
#$NSMiniaturizableWindowMask
#$NSResizableWindowMask)
:backing #$NSBackingStoreBuffered
:defer t))))
(defun start-run-loop ()
(#/run *app*))
(defun test ()
(make-app)
(make-window)
(#/makeKeyAndOrderFront: *window* nil)
(process-interrupt ccl::*initial-process* #'start-run-loop))
(test)
It seems to work at first glance, however, I cannot resize the window
and I get the beach ball.
So it seems that something goes wrong with handling events. But I
cannot figure out what.
If someone has any hints where I can look, that is appreciated.
Note, I can get it to work by using (require :COCOA) and use the
infrastructure setup by the IDE. (Not suprisingly :-)).
However I slightly prefer playing with cocoa without the CCL IDE.
Wim Oudshoorn.
More information about the Openmcl-devel
mailing list