1 ! Copyright (C) 2006, 2007 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays cocoa cocoa.application command-line
4 kernel memory namespaces cocoa.messages cocoa.runtime
5 cocoa.subclassing cocoa.pasteboard cocoa.types cocoa.windows
6 cocoa.classes cocoa.application sequences system ui ui.backend
7 ui.clipboards ui.gadgets ui.gadgets.worlds ui.cocoa.views
8 core-foundation threads ;
11 TUPLE: cocoa-ui-backend ;
13 SYMBOL: stop-after-last-window?
15 : event-loop? ( -- ? )
16 stop-after-last-window? get-global
17 [ windows get-global empty? not ] [ t ] if ;
22 [ NSApp do-events ui-step 10 sleep ] ui-try
23 ] with-autorelease-pool event-loop
26 TUPLE: pasteboard handle ;
28 C: <pasteboard> pasteboard
30 M: pasteboard clipboard-contents
31 pasteboard-handle pasteboard-string ;
33 M: pasteboard set-clipboard-contents
34 pasteboard-handle set-pasteboard-string ;
36 : init-clipboard ( -- )
37 NSPasteboard -> generalPasteboard <pasteboard>
39 <clipboard> selection set-global ;
41 : world>NSRect ( world -- NSRect )
42 dup world-loc first2 rot rect-dim first2 <NSRect> ;
44 : gadget-window ( world -- )
47 dup rot world>NSRect <ViewWindow>
48 dup install-window-delegate
51 ] keep set-world-handle ;
53 M: cocoa-ui-backend set-title ( string world -- )
54 world-handle second swap <NSString> -> setTitle: ;
56 : auto-position ( world -- )
57 dup world-loc { 0 0 } = [
58 world-handle second -> center
63 M: cocoa-ui-backend (open-window) ( world -- )
66 world-handle second f -> makeKeyAndOrderFront: ;
68 M: cocoa-ui-backend (close-window) ( handle -- )
69 first unregister-window ;
71 M: cocoa-ui-backend close-window ( gadget -- )
73 world-handle second f -> performClose:
76 M: cocoa-ui-backend raise-window ( world -- )
78 second dup f -> orderFront: -> makeKeyWindow
79 NSApp 1 -> activateIgnoringOtherApps:
82 M: cocoa-ui-backend select-gl-context ( handle -- )
83 first -> openGLContext -> makeCurrentContext ;
85 M: cocoa-ui-backend flush-gl-context ( handle -- )
86 first -> openGLContext -> flushBuffer ;
88 SYMBOL: cocoa-init-hook
90 M: cocoa-ui-backend ui
94 cocoa-init-hook get [ call ] when*
101 T{ cocoa-ui-backend } ui-backend set-global
103 [ running.app? "ui" "listener" ? ] main-vocab-hook set-global