2006-02-09 20:36:11 -05:00
|
|
|
! Copyright (C) 2006 Slava Pestov
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2006-05-24 18:40:54 -04:00
|
|
|
IN: objc-FactorWindowDelegate
|
|
|
|
DEFER: FactorWindowDelegate
|
|
|
|
|
2006-02-09 20:36:11 -05:00
|
|
|
IN: cocoa
|
2006-05-27 17:39:38 -04:00
|
|
|
USING: arrays gadgets gadgets-layouts kernel math objc
|
|
|
|
objc-NSNotification objc-NSObject objc-NSView objc-NSWindow
|
|
|
|
sequences ;
|
2006-02-09 20:36:11 -05:00
|
|
|
|
|
|
|
: 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
|
|
|
|
|
2006-05-26 02:29:44 -04:00
|
|
|
: <NSWindow> ( rect -- window )
|
2006-02-09 22:11:22 -05:00
|
|
|
NSWindow [alloc] swap
|
|
|
|
standard-window-type NSBackingStoreBuffered 1
|
2006-05-26 02:29:44 -04:00
|
|
|
[initWithContentRect:styleMask:backing:defer:] ;
|
2006-03-17 02:50:16 -05:00
|
|
|
|
2006-05-27 17:39:38 -04:00
|
|
|
: <ViewWindow> ( view bounds -- window )
|
|
|
|
<NSWindow> [ swap [setContentView:] ] keep
|
2006-03-17 02:50:16 -05:00
|
|
|
dup dup [contentView] [setInitialFirstResponder:]
|
2006-05-26 02:29:44 -04:00
|
|
|
dup 1 [setAcceptsMouseMovedEvents:] ;
|
2006-05-24 18:40:54 -04:00
|
|
|
|
2006-05-27 17:56:11 -04:00
|
|
|
: window-pref-dim [contentView] window pref-dim ;
|
2006-05-24 18:40:54 -04:00
|
|
|
|
2006-05-26 16:34:31 -04:00
|
|
|
: frame-content-rect ( window rect -- rect )
|
2006-05-24 18:40:54 -04:00
|
|
|
swap [styleMask] NSWindow -rot
|
|
|
|
[frameRectForContentRect:styleMask:] ;
|
|
|
|
|
|
|
|
: window-content-rect ( window -- rect )
|
2006-05-26 16:34:31 -04:00
|
|
|
NSWindow over [frame] rot [styleMask]
|
|
|
|
[contentRectForFrameRect:styleMask:] ;
|
2006-05-24 18:40:54 -04:00
|
|
|
|
|
|
|
"NSObject" "FactorWindowDelegate" {
|
|
|
|
{
|
|
|
|
"windowWillUseStandardFrame:defaultFrame:" "NSRect"
|
|
|
|
{ "id" "SEL" "id" "NSRect" }
|
|
|
|
[
|
|
|
|
drop 2nip
|
|
|
|
dup window-content-rect NSRect-x-far-y
|
2006-05-26 16:34:31 -04:00
|
|
|
pick window-pref-dim first2 <far-y-NSRect>
|
|
|
|
frame-content-rect
|
2006-05-24 18:40:54 -04:00
|
|
|
]
|
|
|
|
}
|
2006-05-28 18:35:01 -04:00
|
|
|
|
2006-05-27 17:39:38 -04:00
|
|
|
{
|
|
|
|
"windowDidMove:" "void" { "id" "SEL" "id" } [
|
|
|
|
2nip [object]
|
|
|
|
dup window-content-rect NSRect-x-y 0 3array
|
2006-05-27 17:56:11 -04:00
|
|
|
swap [contentView] window set-world-loc
|
2006-05-27 17:39:38 -04:00
|
|
|
]
|
|
|
|
}
|
2006-05-28 18:35:01 -04:00
|
|
|
|
|
|
|
{
|
|
|
|
"windowDidBecomeKey:" "void" { "id" "SEL" "id" } [
|
|
|
|
2nip [object] [contentView] window focus-world
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
"windowDidResignKey:" "void" { "id" "SEL" "id" } [
|
|
|
|
2nip [object] [contentView] window unfocus-world
|
|
|
|
]
|
|
|
|
}
|
2006-05-24 18:40:54 -04:00
|
|
|
} { } define-objc-class
|
|
|
|
|
|
|
|
: install-window-delegate ( window -- )
|
|
|
|
FactorWindowDelegate [alloc] [init] [setDelegate:] ;
|