]> gitweb.factorcode.org Git - factor.git/commitdiff
dinput: Do not unacquire the device after every read, otherwise keyboard does not...
authorU-VICTORIA\Administrator <Administrator@victoria.(none)>
Sun, 27 Jul 2008 03:02:06 +0000 (20:02 -0700)
committerU-VICTORIA\Administrator <Administrator@victoria.(none)>
Sun, 27 Jul 2008 03:02:06 +0000 (20:02 -0700)
extra/game-input/backend/dinput/dinput.factor
extra/joystick-demo/joystick-demo.factor
extra/key-caps/key-caps.factor [changed mode: 0644->0755]
extra/windows/dinput/constants/constants.factor
extra/windows/dinput/dinput.factor

index 86eaaac921e8ff9690cdeceae809d63f34a35c04..47ffa69493cc520c234495209fbdca1ac07de5ed 100755 (executable)
@@ -218,9 +218,7 @@ M: dinput-game-input-backend instance-id
 
 :: with-acquisition ( device acquired-quot succeeded-quot failed-quot -- result/f )
     device IDirectInputDevice8W::Acquire succeeded? [
-        device acquired-quot
-        [ device IDirectInputDevice8W::Unacquire ole32-error ]
-        [ ] cleanup
+        device acquired-quot call
         succeeded-quot call
     ] failed-quot if ; inline
 
index 6cc14b2500e1cf3349af2a0450b50668ede691ad..44d35021ae1893b4d1f1343520a2fa43781af19b 100755 (executable)
@@ -82,7 +82,7 @@ TUPLE: joystick-demo-gadget < pack axis raxis controller buttons alarm ;
 
 : kill-update-axes ( gadget -- )
     gray <solid> >>interior
-    [ cancel-alarm f ] change-alarm
+    [ [ cancel-alarm ] when* f ] change-alarm
     relayout-1 ;
 
 : (update-axes) ( gadget controller-state -- )
old mode 100644 (file)
new mode 100755 (executable)
index bd0160c..1490362
@@ -7,20 +7,20 @@ IN: key-caps
 : key-locations H{
     { key-escape        { {   0   0 } {  10  10 } } }
 
-    { key-f1            { {  15   0 } {  10  10 } } } 
-    { key-f2            { {  25   0 } {  10  10 } } }
-    { key-f3            { {  35   0 } {  10  10 } } }
-    { key-f4            { {  45   0 } {  10  10 } } }
+    { key-f1            { {  20   0 } {  10  10 } } }
+    { key-f2            { {  30   0 } {  10  10 } } }
+    { key-f3            { {  40   0 } {  10  10 } } }
+    { key-f4            { {  50   0 } {  10  10 } } }
 
-    { key-f5            { {  60   0 } {  10  10 } } }
-    { key-f6            { {  70   0 } {  10  10 } } }
-    { key-f7            { {  80   0 } {  10  10 } } }
-    { key-f8            { {  90   0 } {  10  10 } } }
+    { key-f5            { {  65   0 } {  10  10 } } }
+    { key-f6            { {  75   0 } {  10  10 } } }
+    { key-f7            { {  85   0 } {  10  10 } } }
+    { key-f8            { {  95   0 } {  10  10 } } }
 
-    { key-f9            { { 105   0 } {  10  10 } } }
-    { key-f10           { { 115   0 } {  10  10 } } }
-    { key-f11           { { 125   0 } {  10  10 } } }
-    { key-f12           { { 135   0 } {  10  10 } } }
+    { key-f9            { { 110   0 } {  10  10 } } }
+    { key-f10           { { 120   0 } {  10  10 } } }
+    { key-f11           { { 130   0 } {  10  10 } } }
+    { key-f12           { { 140   0 } {  10  10 } } }
 
 
     { key-`             { {   0  15 } {  10  10 } } }
@@ -36,7 +36,7 @@ IN: key-caps
     { key-0             { { 100  15 } {  10  10 } } }
     { key--             { { 110  15 } {  10  10 } } }
     { key-=             { { 120  15 } {  10  10 } } }
-    { key-backspace     { { 130  15 } {  15  10 } } }
+    { key-backspace     { { 130  15 } {  20  10 } } }
 
     { key-tab           { {   0  25 } {  15  10 } } }
     { key-q             { {  15  25 } {  10  10 } } }
@@ -51,7 +51,7 @@ IN: key-caps
     { key-p             { { 105  25 } {  10  10 } } }
     { key-[             { { 115  25 } {  10  10 } } }
     { key-]             { { 125  25 } {  10  10 } } }
-    { key-\             { { 135  25 } {  10  10 } } }
+    { key-\             { { 135  25 } {  15  10 } } }
 
     { key-caps-lock     { {   0  35 } {  20  10 } } }
     { key-a             { {  20  35 } {  10  10 } } }
@@ -65,7 +65,7 @@ IN: key-caps
     { key-l             { { 100  35 } {  10  10 } } }
     { key-;             { { 110  35 } {  10  10 } } }
     { key-'             { { 120  35 } {  10  10 } } }
-    { key-return        { { 130  35 } {  15  10 } } }
+    { key-return        { { 130  35 } {  20  10 } } }
 
     { key-left-shift    { {   0  45 } {  25  10 } } }
     { key-z             { {  25  45 } {  10  10 } } }
@@ -78,59 +78,60 @@ IN: key-caps
     { key-,             { {  95  45 } {  10  10 } } }
     { key-.             { { 105  45 } {  10  10 } } }
     { key-/             { { 115  45 } {  10  10 } } }
-    { key-right-shift   { { 125  45 } {  20  10 } } }
+    { key-right-shift   { { 125  45 } {  25  10 } } }
 
     { key-left-control  { {   0  55 } {  15  10 } } }
     { key-left-gui      { {  15  55 } {  15  10 } } }
     { key-left-alt      { {  30  55 } {  15  10 } } }
-    { key-space         { {  45  55 } {  55  10 } } }
-    { key-right-alt     { { 100  55 } {  15  10 } } }
-    { key-right-gui     { { 115  55 } {  15  10 } } }
-    { key-right-control { { 130  55 } {  15  10 } } }
+    { key-space         { {  45  55 } {  45  10 } } }
+    { key-right-alt     { {  90  55 } {  15  10 } } }
+    { key-right-gui     { { 105  55 } {  15  10 } } }
+    { key-application   { { 120  55 } {  15  10 } } }
+    { key-right-control { { 135  55 } {  15  10 } } }
 
 
-    { key-print-screen  { { 150   0 } {  10  10 } } }
-    { key-scroll-lock   { { 160   0 } {  10  10 } } }
-    { key-pause         { { 170   0 } {  10  10 } } }
+    { key-print-screen  { { 155   0 } {  10  10 } } }
+    { key-scroll-lock   { { 165   0 } {  10  10 } } }
+    { key-pause         { { 175   0 } {  10  10 } } }
     
-    { key-insert        { { 150  15 } {  10  10 } } }
-    { key-home          { { 160  15 } {  10  10 } } }
-    { key-page-up       { { 170  15 } {  10  10 } } }
+    { key-insert        { { 155  15 } {  10  10 } } }
+    { key-home          { { 165  15 } {  10  10 } } }
+    { key-page-up       { { 175  15 } {  10  10 } } }
 
-    { key-delete        { { 150  25 } {  10  10 } } }
-    { key-end           { { 160  25 } {  10  10 } } }
-    { key-page-down     { { 170  25 } {  10  10 } } }
+    { key-delete        { { 155  25 } {  10  10 } } }
+    { key-end           { { 165  25 } {  10  10 } } }
+    { key-page-down     { { 175  25 } {  10  10 } } }
 
-    { key-up-arrow      { { 160  45 } {  10  10 } } }
-    { key-left-arrow    { { 150  55 } {  10  10 } } }
-    { key-down-arrow    { { 160  55 } {  10  10 } } }
-    { key-right-arrow   { { 170  55 } {  10  10 } } }
+    { key-up-arrow      { { 165  45 } {  10  10 } } }
+    { key-left-arrow    { { 155  55 } {  10  10 } } }
+    { key-down-arrow    { { 165  55 } {  10  10 } } }
+    { key-right-arrow   { { 175  55 } {  10  10 } } }
 
 
-    { key-keypad-numlock { { 185 15 } {  10  10 } } }
-    { key-keypad-/       { { 195 15 } {  10  10 } } }
-    { key-keypad-*       { { 205 15 } {  10  10 } } }
-    { key-keypad--       { { 215 15 } {  10  10 } } }
+    { key-keypad-numlock { { 190 15 } {  10  10 } } }
+    { key-keypad-/       { { 200 15 } {  10  10 } } }
+    { key-keypad-*       { { 210 15 } {  10  10 } } }
+    { key-keypad--       { { 220 15 } {  10  10 } } }
 
-    { key-keypad-7       { { 185 25 } {  10  10 } } }
-    { key-keypad-8       { { 195 25 } {  10  10 } } }
-    { key-keypad-9       { { 205 25 } {  10  10 } } }
-    { key-keypad-+       { { 215 25 } {  10  20 } } }
+    { key-keypad-7       { { 190 25 } {  10  10 } } }
+    { key-keypad-8       { { 200 25 } {  10  10 } } }
+    { key-keypad-9       { { 210 25 } {  10  10 } } }
+    { key-keypad-+       { { 220 25 } {  10  20 } } }
 
-    { key-keypad-4       { { 185 35 } {  10  10 } } }
-    { key-keypad-5       { { 195 35 } {  10  10 } } }
-    { key-keypad-6       { { 205 35 } {  10  10 } } }
+    { key-keypad-4       { { 190 35 } {  10  10 } } }
+    { key-keypad-5       { { 200 35 } {  10  10 } } }
+    { key-keypad-6       { { 210 35 } {  10  10 } } }
 
-    { key-keypad-1       { { 185 45 } {  10  10 } } }
-    { key-keypad-2       { { 195 45 } {  10  10 } } }
-    { key-keypad-3       { { 205 45 } {  10  10 } } }
-    { key-keypad-enter   { { 215 45 } {  10  20 } } }
+    { key-keypad-1       { { 190 45 } {  10  10 } } }
+    { key-keypad-2       { { 200 45 } {  10  10 } } }
+    { key-keypad-3       { { 210 45 } {  10  10 } } }
+    { key-keypad-enter   { { 220 45 } {  10  20 } } }
 
-    { key-keypad-0       { { 185 55 } {  20  10 } } }
-    { key-keypad-.       { { 205 55 } {  10  10 } } }
+    { key-keypad-0       { { 190 55 } {  20  10 } } }
+    { key-keypad-.       { { 210 55 } {  10  10 } } }
 } ;
 
-: KEYBOARD-SIZE { 225 65 } ;
+: KEYBOARD-SIZE { 230 65 } ;
 : FREQUENCY ( -- f ) 30 recip seconds ;
 
 TUPLE: key-caps-gadget < gadget keys alarm ;
index bd8a0939d3cecde0699ac2a0d7ffa4e405bbabd8..b918ec121bc6ca8b72c705f80820d8682e0ad663 100755 (executable)
@@ -24,12 +24,15 @@ SYMBOLS:
 : (sizeof) ( field struct -- size )
     [ (field-spec-of) class>> "[" split1 drop heap-size ] [ drop 1 ] if* ;
 
-MACRO: (flags) ( array -- )
-    0 [ {
+: (flag) ( thing -- integer )
+    {
         { [ dup word? ] [ execute ] }
         { [ dup callable? ] [ call ] }
         [ ]
-    } cond bitor ] reduce 1quotation ;
+    } cond ;
+
+: (flags) ( array -- )
+    0 [ (flag) bitor ] reduce ;
 
 : (DIOBJECTDATAFORMAT) ( pguid dwOfs dwType dwFlags alien -- alien )
     [ {
@@ -45,7 +48,7 @@ MACRO: (flags) ( array -- )
         [ second rot [ (offsetof) ] [ (sizeof) ] 2bi ]
         [ third * + ]
         [ fourth (flags) ]
-        [ 4 swap nth ]
+        [ 4 swap nth (flag) ]
     } cleave
     "DIOBJECTDATAFORMAT" <c-object> (DIOBJECTDATAFORMAT) ;
 
@@ -245,30 +248,30 @@ MACRO: (flags) ( array -- )
             { f           "rgbButtons" 125 { DIDFT_OPTIONAL DIDFT_BUTTON DIDFT_ANYINSTANCE } 0 }
             { f           "rgbButtons" 126 { DIDFT_OPTIONAL DIDFT_BUTTON DIDFT_ANYINSTANCE } 0 }
             { f           "rgbButtons" 127 { DIDFT_OPTIONAL DIDFT_BUTTON DIDFT_ANYINSTANCE } 0 }
-            { GUID_XAxis_malloced  "lVX"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_YAxis_malloced  "lVY"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_ZAxis_malloced  "lVZ"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_RxAxis_malloced "lVRx"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_RyAxis_malloced "lVRy"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_RzAxis_malloced "lVRz"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_Slider_malloced "rglVSlider"   0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_Slider_malloced "rglVSlider"   1 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_XAxis_malloced  "lAX"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_YAxis_malloced  "lAY"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_ZAxis_malloced  "lAZ"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_RxAxis_malloced "lARx"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_RyAxis_malloced "lARy"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_RzAxis_malloced "lARz"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_Slider_malloced "rglASlider"   0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_Slider_malloced "rglASlider"   1 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_XAxis_malloced  "lFX"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_YAxis_malloced  "lFY"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_ZAxis_malloced  "lFZ"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_RxAxis_malloced "lFRx"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_RyAxis_malloced "lFRy"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_RzAxis_malloced "lFRz"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_Slider_malloced "rglFSlider"   0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
-            { GUID_Slider_malloced "rglFSlider"   1 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } 0 }
+            { GUID_XAxis_malloced  "lVX"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTVELOCITY }
+            { GUID_YAxis_malloced  "lVY"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTVELOCITY }
+            { GUID_ZAxis_malloced  "lVZ"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTVELOCITY }
+            { GUID_RxAxis_malloced "lVRx"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTVELOCITY }
+            { GUID_RyAxis_malloced "lVRy"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTVELOCITY }
+            { GUID_RzAxis_malloced "lVRz"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTVELOCITY }
+            { GUID_Slider_malloced "rglVSlider"   0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTVELOCITY }
+            { GUID_Slider_malloced "rglVSlider"   1 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTVELOCITY }
+            { GUID_XAxis_malloced  "lAX"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTACCEL }
+            { GUID_YAxis_malloced  "lAY"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTACCEL }
+            { GUID_ZAxis_malloced  "lAZ"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTACCEL }
+            { GUID_RxAxis_malloced "lARx"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTACCEL }
+            { GUID_RyAxis_malloced "lARy"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTACCEL }
+            { GUID_RzAxis_malloced "lARz"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTACCEL }
+            { GUID_Slider_malloced "rglASlider"   0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTACCEL }
+            { GUID_Slider_malloced "rglASlider"   1 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTACCEL }
+            { GUID_XAxis_malloced  "lFX"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTFORCE }
+            { GUID_YAxis_malloced  "lFY"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTFORCE }
+            { GUID_ZAxis_malloced  "lFZ"          0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTFORCE }
+            { GUID_RxAxis_malloced "lFRx"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTFORCE }
+            { GUID_RyAxis_malloced "lFRy"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTFORCE }
+            { GUID_RzAxis_malloced "lFRz"         0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTFORCE }
+            { GUID_Slider_malloced "rglFSlider"   0 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTFORCE }
+            { GUID_Slider_malloced "rglFSlider"   1 { DIDFT_OPTIONAL DIDFT_AXIS   DIDFT_ANYINSTANCE } DIDOI_ASPECTFORCE }
         } <DIDATAFORMAT>
     ] unless* ] change-at ;
 
index bb9ba622d28462758435dafaf4c0adb6958ef98b..0c75f4377029ed6466f944fb142841253386d4f8 100755 (executable)
@@ -434,6 +434,16 @@ FUNCTION: HRESULT DirectInput8Create ( HINSTANCE hinst, DWORD dwVersion, REFIID
 : DIDFT_ENUMCOLLECTION ( n -- instance ) 8 shift HEX: FFFF bitand ; inline
 : DIDFT_NOCOLLECTION      HEX: 00FFFF00 ; inline
 
+: DIDOI_FFACTUATOR        HEX: 00000001 ; inline
+: DIDOI_FFEFFECTTRIGGER   HEX: 00000002 ; inline
+: DIDOI_POLLED            HEX: 00008000 ; inline
+: DIDOI_ASPECTPOSITION    HEX: 00000100 ; inline
+: DIDOI_ASPECTVELOCITY    HEX: 00000200 ; inline
+: DIDOI_ASPECTACCEL       HEX: 00000300 ; inline
+: DIDOI_ASPECTFORCE       HEX: 00000400 ; inline
+: DIDOI_ASPECTMASK        HEX: 00000F00 ; inline
+: DIDOI_GUIDISUSAGE       HEX: 00010000 ; inline
+
 : DISCL_EXCLUSIVE     HEX: 00000001 ; inline
 : DISCL_NONEXCLUSIVE  HEX: 00000002 ; inline
 : DISCL_FOREGROUND    HEX: 00000004 ; inline