瀏覽代碼

Cleanups.

Mark Sibly 8 年之前
父節點
當前提交
0f8bd30cf0
共有 3 個文件被更改,包括 37 次插入71 次删除
  1. 2 4
      modules/mojo/app/app.monkey2
  2. 26 57
      modules/mojo/input/keyboard.monkey2
  3. 9 10
      modules/mojo/input/touch.monkey2

+ 2 - 4
modules/mojo/app/app.monkey2

@@ -714,6 +714,7 @@ Class AppInstance
 
 			_key=Keyboard.KeyCodeToKey( Int( kevent->keysym.sym ) )
 			_rawKey=Keyboard.ScanCodeToRawKey( Int( kevent->keysym.scancode ) )
+			_modifiers=Cast<Modifier>( kevent->keysym.mod_ )
 			_keyChar=Keyboard.KeyName( _key )
 			
 			If kevent->repeat_
@@ -721,8 +722,6 @@ Class AppInstance
 			Else
 				SendKeyEvent( EventType.KeyDown )
 			Endif
-
-			_modifiers=Keyboard.Modifiers
 			
 		Case SDL_KEYUP
 
@@ -733,12 +732,11 @@ Class AppInstance
 			
 			_key=Keyboard.KeyCodeToKey( Int( kevent->keysym.sym ) )
 			_rawKey=Keyboard.ScanCodeToRawKey( Int( kevent->keysym.scancode ) )
+			_modifiers=Cast<Modifier>( kevent->keysym.mod_ )
 			_keyChar=Keyboard.KeyName( _key )
 			
 			SendKeyEvent( EventType.KeyUp )
 
-			_modifiers=Keyboard.Modifiers
-
 		Case SDL_TEXTINPUT
 		
 			Local tevent:=Cast<SDL_TextInputEvent Ptr>( event )

+ 26 - 57
modules/mojo/input/keyboard.monkey2

@@ -90,7 +90,7 @@ Class KeyboardDevice Extends InputDevice
 
 		Local scode:=ScanCode( key )
 
-		Return _down[scode]
+		Return _keys[scode].down
 	End
 	
 	#rem monkeydoc Checks if a key was pressed.
@@ -106,7 +106,7 @@ Class KeyboardDevice Extends InputDevice
 	
 		Local scode:=ScanCode( key )
 		
-		Return _pressed[scode]
+		Return _keys[scode].pressed=_frame
 	End
 
 	#rem monkeydoc Checks if a key was released.
@@ -122,7 +122,7 @@ Class KeyboardDevice Extends InputDevice
 	
 		Local scode:=ScanCode( key )
 		
-		Return _released[scode]
+		Return _keys[scode].released=_frame
 	End
 	
 	#rem monkeydoc @hidden
@@ -208,16 +208,8 @@ Class KeyboardDevice Extends InputDevice
 	#rem monkeydoc @hidden
 	#end
 	Method Update()
-	
-		For Local key:=Eachin _pressedKeys
-			_pressed[key]=False
-		Next
-		_pressedKeys.Clear()
-		
-		For Local key:=Eachin _releasedKeys
-			_released[key]=False
-		Next
-		_releasedKeys.Clear()
+		_frame+=1
+		FlushChars()
 	End
 	
 	#rem monkeydoc @hidden
@@ -232,24 +224,9 @@ Class KeyboardDevice Extends InputDevice
 			
 			Local scode:=kevent->keysym.scancode
 			
-			If Not _down[scode]
-			
-				_down[scode]=True
-				_pressed[scode]=True
-				_pressedKeys.Push( scode )
-					
-				Select kevent->keysym.sym
-				Case $400000e0 _modifiers|=Modifier.LeftControl
-				Case $400000e1 _modifiers|=Modifier.LeftShift
-				Case $400000e2 _modifiers|=Modifier.LeftAlt
-				Case $400000e3 _modifiers|=Modifier.LeftGui
-				Case $400000e4 _modifiers|=Modifier.RightControl
-				Case $400000e5 _modifiers|=Modifier.RightShift
-				Case $400000e6 _modifiers|=Modifier.RightAlt
-				Case $400000e7 _modifiers|=Modifier.RightGui
-				End
-			
-			Endif
+			_keys[scode].down=True
+			_keys[scode].pressed=_frame
+			_modifiers=Cast<Modifier>( kevent->keysym.mod_ )
 			
 			Local char:=KeyToChar( _scan2key[scode] )
 			If char PushChar( char )
@@ -260,52 +237,44 @@ Class KeyboardDevice Extends InputDevice
 			
 			Local scode:=kevent->keysym.scancode
 			
-			If Not _down[scode] Return
-			
-			_down[scode]=False
-			_released[scode]=True
-			_releasedKeys.Push( scode )
-	
-			Select kevent->keysym.sym
-			Case $400000e0 _modifiers&=~Modifier.LeftControl
-			Case $400000e1 _modifiers&=~Modifier.LeftShift
-			Case $400000e2 _modifiers&=~Modifier.LeftAlt
-			Case $400000e3 _modifiers&=~Modifier.LeftGui
-			Case $400000e4 _modifiers&=~Modifier.RightControl
-			Case $400000e5 _modifiers&=~Modifier.RightShift
-			Case $400000e6 _modifiers&=~Modifier.RightAlt
-			Case $400000e7 _modifiers&=~Modifier.RightGui
-			End
+			_keys[scode].down=False
+			_keys[scode].released=_frame
+			_modifiers=Cast<Modifier>( kevent->keysym.mod_ )
 			
 		Case SDL_TEXTINPUT
 		
 			Local tevent:=Cast<SDL_TextInputEvent Ptr>( event )
 			Local char:=tevent->text[0]
 			If char PushChar( char )
+			
 		End
 
 	End
 
 	Private
 	
+	Struct KeyState
+		Field down:Bool
+		Field pressed:Int
+		Field released:Int
+	End
+
 	Const CHAR_QUEUE_SIZE:=32
 	Const CHAR_QUEUE_MASK:=31
-	
+
+	Field _frame:Int=1
+	Field _keys:=New KeyState[512]
 	Field _modifiers:Modifier
-	Field _down:=New Bool[512]
-	Field _pressed:=New Bool[512]
-	Field _released:=New Bool[512]
-	Field _pressedKeys:=New IntStack
-	Field _releasedKeys:=New IntStack
+	Field _charQueue:=New Int[CHAR_QUEUE_SIZE]
+	Field _charPut:Int
+	Field _charGet:Int
+
 	Field _names:=New String[512]
 	Field _raw2scan:=New Int[512]	'no translate
 	Field _scan2raw:=New Key[512]	'no translate
 	Field _key2scan:=New Int[512]	'translate
 	Field _scan2key:=New Int[512]	'translate
-	Field _charQueue:=New Int[CHAR_QUEUE_SIZE]
-	Field _charPut:Int
-	Field _charGet:Int
-	
+
 	Method New()
 	End
 

+ 9 - 10
modules/mojo/input/touch.monkey2

@@ -21,12 +21,12 @@ Class TouchDevice Extends InputDevice
 	
 	Method FingerPressed:Bool( finger:Int )
 		DebugAssert( finger>=0 And finger<10,"Finger index out of range" )
-		Return _fingers[finger].pressed
+		Return _fingers[finger].pressed=_frame
 	End
 	
 	Method FingerReleased:Bool( finger:Int )
 		DebugAssert( finger>=0 And finger<10,"Finger index out of range" )
-		Return _fingers[finger].released
+		Return _fingers[finger].released=_frame
 	End
 	
 	Method FingerPressure:Float( finger:Int )
@@ -59,9 +59,7 @@ Class TouchDevice Extends InputDevice
 	#rem monkeydoc @hidden
 	#end
 	Method Update()
-		For Local i:=0 Until 10
-			_fingers[i].pressed=False
-		Next
+		_frame+=1
 	End
 	
 	#rem monkeydoc @hidden
@@ -97,7 +95,7 @@ Class TouchDevice Extends InputDevice
 			If id=-1 Return
 			
 			_fingers[id].down=True
-			_fingers[id].pressed=True
+			_fingers[id].pressed=_frame
 			_fingers[id].pressure=tevent->pressure
 			_fingers[id].location=EventLocation( tevent )
 		
@@ -114,7 +112,7 @@ Class TouchDevice Extends InputDevice
 			If id=-1 Return
 			
 			_fingers[id].down=False
-			_fingers[id].released=False
+			_fingers[id].released=_frame
 			_fingers[id].pressure=0
 			_fingers[id].location=EventLocation( tevent )
 			
@@ -142,12 +140,13 @@ Class TouchDevice Extends InputDevice
 	Struct FingerState
 		Field id:Int
 		Field down:Bool
-		Field pressed:Bool
-		Field released:Bool
+		Field pressed:Int
+		Field released:Int
 		Field pressure:Float
 		Field location:Vec2i
 	End
-	
+
+	Field _frame:Int=1	
 	Field _fingers:=New FingerState[10]
 	
 	Method New()