read-plist word for cocoa.plists
							parent
							
								
									cad006719f
								
							
						
					
					
						commit
						42b3d01b94
					
				| 
						 | 
				
			
			@ -61,6 +61,7 @@ SYMBOL: super-sent-messages
 | 
			
		|||
        "NSOpenGLView"
 | 
			
		||||
        "NSOpenPanel"
 | 
			
		||||
        "NSPasteboard"
 | 
			
		||||
        "NSPropertyListSerialization"
 | 
			
		||||
        "NSResponder"
 | 
			
		||||
        "NSSavePanel"
 | 
			
		||||
        "NSScreen"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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* ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 ) ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 )
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue