factor/library/ui/cocoa/window-utils.factor

70 lines
2.0 KiB
Factor
Raw Normal View History

2006-02-09 20:36:11 -05:00
! Copyright (C) 2006 Slava Pestov
! See http://factorcode.org/license.txt for BSD license.
IN: objc-FactorWindowDelegate
DEFER: FactorWindowDelegate
2006-02-09 20:36:11 -05:00
IN: cocoa
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
: <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-27 17:56:11 -04:00
: 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 <far-y-NSRect>
frame-content-rect
]
}
{
"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
]
}
} { } define-objc-class
: install-window-delegate ( window -- )
FactorWindowDelegate [alloc] [init] [setDelegate:] ;