1 ! Copyright (C) 2006 Slava Pestov
2 ! See http://factorcode.org/license.txt for BSD license.
4 DEFER: FactorWindowDelegate
7 USING: arrays gadgets kernel math objc sequences ;
9 : NSBorderlessWindowMask 0 ; inline
10 : NSTitledWindowMask 1 ; inline
11 : NSClosableWindowMask 2 ; inline
12 : NSMiniaturizableWindowMask 4 ; inline
13 : NSResizableWindowMask 8 ; inline
15 : NSBackingStoreRetained 0 ; inline
16 : NSBackingStoreNonretained 1 ; inline
17 : NSBackingStoreBuffered 2 ; inline
19 : standard-window-type
21 NSClosableWindowMask bitor
22 NSMiniaturizableWindowMask bitor
23 NSResizableWindowMask bitor ; inline
25 : <NSWindow> ( rect -- window )
26 NSWindow -> alloc swap
27 standard-window-type NSBackingStoreBuffered 1
28 -> initWithContentRect:styleMask:backing:defer: ;
30 : <ViewWindow> ( view bounds -- window )
31 <NSWindow> [ swap -> setContentView: ] keep
32 dup dup -> contentView -> setInitialFirstResponder:
33 dup 1 -> setAcceptsMouseMovedEvents: ;
35 : window-pref-dim -> contentView window pref-dim ;
37 : frame-content-rect ( window rect -- rect )
38 swap -> styleMask NSWindow -rot
39 -> frameRectForContentRect:styleMask: ;
41 : window-content-rect ( window -- rect )
42 NSWindow over -> frame rot -> styleMask
43 -> contentRectForFrameRect:styleMask: ;
45 "NSObject" "FactorWindowDelegate" {
46 ! Doesn't work on Intel since we don't support struct
50 ! "windowWillUseStandardFrame:defaultFrame:" "NSRect"
51 ! { "id" "SEL" "id" "NSRect" }
54 ! dup window-content-rect NSRect-x-far-y
55 ! pick window-pref-dim first2 <far-y-NSRect>
61 "windowDidMove:" "void" { "id" "SEL" "id" } [
63 dup window-content-rect NSRect-x-y 2array
64 swap -> contentView window set-world-loc
69 "windowDidBecomeKey:" "void" { "id" "SEL" "id" } [
70 2nip -> object -> contentView window focus-world
75 "windowDidResignKey:" "void" { "id" "SEL" "id" } [
77 2nip -> object -> contentView window unfocus-world
82 : install-window-delegate ( window -- )
83 FactorWindowDelegate install-delegate ;