read-plist word for cocoa.plists

db4
Joe Groff 2008-07-19 15:17:12 -07:00
parent cad006719f
commit 42b3d01b94
5 changed files with 30 additions and 11 deletions

View File

@ -61,6 +61,7 @@ SYMBOL: super-sent-messages
"NSOpenGLView" "NSOpenGLView"
"NSOpenPanel" "NSOpenPanel"
"NSPasteboard" "NSPasteboard"
"NSPropertyListSerialization"
"NSResponder" "NSResponder"
"NSSavePanel" "NSSavePanel"
"NSScreen" "NSScreen"

View File

@ -3,7 +3,7 @@
USING: strings arrays hashtables assocs sequences USING: strings arrays hashtables assocs sequences
cocoa.messages cocoa.classes cocoa.application cocoa kernel cocoa.messages cocoa.classes cocoa.application cocoa kernel
namespaces io.backend math cocoa.enumeration byte-arrays namespaces io.backend math cocoa.enumeration byte-arrays
combinators alien.c-types ; combinators alien.c-types core-foundation ;
IN: cocoa.plists IN: cocoa.plists
GENERIC: >plist ( value -- plist ) GENERIC: >plist ( value -- plist )
@ -24,8 +24,8 @@ M: sequence >plist
[ >plist ] map <NSArray> ; [ >plist ] map <NSArray> ;
: write-plist ( assoc path -- ) : write-plist ( assoc path -- )
>r >plist [ >plist ] [ normalize-path <NSString> ] bi* 0
r> normalize-path <NSString> 0 -> writeToFile:atomically: -> writeToFile:atomically:
[ "write-plist failed" throw ] unless ; [ "write-plist failed" throw ] unless ;
DEFER: plist> DEFER: plist>
@ -57,3 +57,13 @@ DEFER: plist>
{ [ dup NSDictionary -> isKindOfClass: c-bool> ] [ (plist-NSDictionary>) ] } { [ dup NSDictionary -> isKindOfClass: c-bool> ] [ (plist-NSDictionary>) ] }
[ ] [ ]
} cond ; } cond ;
: (read-plist) ( NSData -- id )
NSPropertyListSerialization swap kCFPropertyListImmutable f f <void*>
[ -> propertyListFromData:mutabilityOption:format:errorDescription: ] keep
*void* [ -> release "read-plist failed" throw ] when* ;
: read-plist ( path -- assoc )
normalize-path <NSString>
NSData swap -> dataWithContentsOfFile:
[ (read-plist) plist> ] [ "read-plist failed" throw ] if* ;

View File

@ -43,6 +43,11 @@ TYPEDEF: int CFNumberType
: kCFNumberCGFloatType 16 ; inline : kCFNumberCGFloatType 16 ; inline
: kCFNumberMaxType 16 ; inline : kCFNumberMaxType 16 ; inline
TYPEDEF: int CFPropertyListMutabilityOptions
: kCFPropertyListImmutable 0 ; inline
: kCFPropertyListMutableContainers 1 ; inline
: kCFPropertyListMutableContainersAndLeaves 2 ; inline
FUNCTION: CFArrayRef CFArrayCreateMutable ( CFAllocatorRef allocator, CFIndex capacity, void* callbacks ) ; FUNCTION: CFArrayRef CFArrayCreateMutable ( CFAllocatorRef allocator, CFIndex capacity, void* callbacks ) ;
FUNCTION: void* CFArrayGetValueAtIndex ( CFArrayRef array, CFIndex idx ) ; FUNCTION: void* CFArrayGetValueAtIndex ( CFArrayRef array, CFIndex idx ) ;

View File

@ -119,17 +119,20 @@ SINGLETON: iokit-game-input-backend
: hat-switch? ( {usage-page,usage} -- ? ) : hat-switch? ( {usage-page,usage} -- ? )
{ 1 HEX: 39 } = ; { 1 HEX: 39 } = ;
: pov-values
{
pov-up pov-up-right pov-right pov-down-right
pov-down pov-down-left pov-left pov-up-left
pov-neutral
} ;
: button-value ( value -- f/(0,1] ) : button-value ( value -- f/(0,1] )
IOHIDValueGetIntegerValue dup zero? [ drop f ] when ; IOHIDValueGetIntegerValue dup zero? [ drop f ] when ;
! XXX calibration ! XXX calibration
: axis-value ( value -- [-1,1] ) : axis-value ( value -- [-1,1] )
kIOHIDValueScaleTypeCalibrated IOHIDValueGetScaledValue ; kIOHIDValueScaleTypeCalibrated IOHIDValueGetScaledValue ;
: slider-value ( value -- [0,1] )
kIOHIDValueScaleTypeCalibrated IOHIDValueGetScaledValue
1.0 + 0.5 * ;
: pov-value ( value -- pov-direction ) : pov-value ( value -- pov-direction )
! XXX IOHIDValueGetIntegerValue pov-values ?nth [ pov-neutral ] unless* ;
IOHIDValueGetIntegerValue ;
: record-controller ( controller-state value -- ) : record-controller ( controller-state value -- )
dup IOHIDValueGetElement element-usage { dup IOHIDValueGetElement element-usage {
@ -140,7 +143,7 @@ SINGLETON: iokit-game-input-backend
{ [ dup rx-axis? ] [ drop axis-value >>rx drop ] } { [ dup rx-axis? ] [ drop axis-value >>rx drop ] }
{ [ dup ry-axis? ] [ drop axis-value >>ry drop ] } { [ dup ry-axis? ] [ drop axis-value >>ry drop ] }
{ [ dup rz-axis? ] [ drop axis-value >>rz drop ] } { [ dup rz-axis? ] [ drop axis-value >>rz drop ] }
{ [ dup slider? ] [ drop slider-value >>slider drop ] } { [ dup slider? ] [ drop axis-value >>slider drop ] }
{ [ dup hat-switch? ] [ drop pov-value >>pov drop ] } { [ dup hat-switch? ] [ drop pov-value >>pov drop ] }
[ 3drop ] [ 3drop ]
} cond ; } cond ;

View File

@ -17,8 +17,8 @@ M: controller-state clone
SYMBOLS: SYMBOLS:
pov-neutral pov-neutral
pov-up pov-up-left pov-left pov-down-left pov-up pov-up-right pov-right pov-down-right
pov-down pov-down-right pov-right pov-up-right ; pov-down pov-down-left pov-left pov-up-left ;
HOOK: get-controllers game-input-backend ( -- sequence ) HOOK: get-controllers game-input-backend ( -- sequence )