! Copyright (C) 2006 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. IN: objc-FactorWindowDelegate DEFER: FactorWindowDelegate IN: cocoa USING: arrays gadgets gadgets-layouts kernel math objc objc-NSNotification objc-NSObject objc-NSView objc-NSWindow sequences ; : NSBorderlessWindowMask 0 ; inline : NSTitledWindowMask 1 ; inline : NSClosableWindowMask 2 ; inline : NSMiniaturizableWindowMask 4 ; inline : NSResizableWindowMask 8 ; inline : NSBackingStoreRetained 0 ; inline : NSBackingStoreNonretained 1 ; inline : NSBackingStoreBuffered 2 ; inline : standard-window-type NSTitledWindowMask NSClosableWindowMask bitor NSMiniaturizableWindowMask bitor NSResizableWindowMask bitor ; inline : ( rect -- window ) NSWindow [alloc] swap standard-window-type NSBackingStoreBuffered 1 [initWithContentRect:styleMask:backing:defer:] ; : ( view bounds -- window ) [ swap [setContentView:] ] keep dup dup [contentView] [setInitialFirstResponder:] dup 1 [setAcceptsMouseMovedEvents:] ; : window-pref-dim [contentView] window pref-dim ; : frame-content-rect ( window rect -- rect ) swap [styleMask] NSWindow -rot [frameRectForContentRect:styleMask:] ; : window-content-rect ( window -- rect ) NSWindow over [frame] rot [styleMask] [contentRectForFrameRect:styleMask:] ; "NSObject" "FactorWindowDelegate" { { "windowWillUseStandardFrame:defaultFrame:" "NSRect" { "id" "SEL" "id" "NSRect" } [ drop 2nip dup window-content-rect NSRect-x-far-y pick window-pref-dim first2 frame-content-rect ] } { "windowDidMove:" "void" { "id" "SEL" "id" } [ 2nip [object] dup window-content-rect NSRect-x-y 0 3array swap [contentView] window set-world-loc ] } { "windowDidBecomeKey:" "void" { "id" "SEL" "id" } [ 2nip [object] [contentView] window focus-world ] } { "windowDidResignKey:" "void" { "id" "SEL" "id" } [ 2nip [object] [contentView] window unfocus-world ] } } { } define-objc-class : install-window-delegate ( window -- ) FactorWindowDelegate [alloc] [init] [setDelegate:] ;