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"
"NSOpenPanel"
"NSPasteboard"
"NSPropertyListSerialization"
"NSResponder"
"NSSavePanel"
"NSScreen"

View File

@ -3,7 +3,7 @@
USING: strings arrays hashtables assocs sequences
cocoa.messages cocoa.classes cocoa.application cocoa kernel
namespaces io.backend math cocoa.enumeration byte-arrays
combinators alien.c-types ;
combinators alien.c-types core-foundation ;
IN: cocoa.plists
GENERIC: >plist ( value -- plist )
@ -24,8 +24,8 @@ M: sequence >plist
[ >plist ] map <NSArray> ;
: write-plist ( assoc path -- )
>r >plist
r> normalize-path <NSString> 0 -> writeToFile:atomically:
[ >plist ] [ normalize-path <NSString> ] bi* 0
-> writeToFile:atomically:
[ "write-plist failed" throw ] unless ;
DEFER: plist>
@ -57,3 +57,13 @@ DEFER: plist>
{ [ dup NSDictionary -> isKindOfClass: c-bool> ] [ (plist-NSDictionary>) ] }
[ ]
} 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
: 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: void* CFArrayGetValueAtIndex ( CFArrayRef array, CFIndex idx ) ;

View File

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

View File

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