Browse Source

Update zgl_keyboard.pas

Seenkao 4 years ago
parent
commit
9f61895ea3
1 changed files with 60 additions and 28 deletions
  1. 60 28
      Zengl_SRC/src/zgl_keyboard.pas

+ 60 - 28
Zengl_SRC/src/zgl_keyboard.pas

@@ -340,22 +340,34 @@ toJmp:
   case nCode of
   case nCode of
     K_PAUSE: ;
     K_PAUSE: ;
     K_INSERT:   keybFlags := keybFlags or keyboardInsertDown;
     K_INSERT:   keybFlags := keybFlags or keyboardInsertDown;
-    K_CTRL_L, K_CTRL_R, K_ALT_L, K_ALT_R, K_SHIFT_L, K_SHIFT_R, K_SUPER_L, K_SUPER_R:
+    {$IfNDef MAC_COCOA}
+    K_CTRL_L, K_CTRL_R:
       begin
       begin
-        nCode := SCA(nCode);
-        keysDown[nCode] := True;
-        keysUp  [nCode] := False;
-        if nCode = K_SHIFT then keybFlags := keybFlags or keyboardShift;
-        if nCode = K_CTRL  then keybFlags := keybFlags or keyboardCtrl;
-        if nCode = K_ALT   then keybFlags := keybFlags or keyboardAlt;
-        if nCode = K_SUPER then keybFlags := keybFlags or keyboardCommand;
+        keybFlags := keybFlags or keyboardCtrl;
+        keysDown[K_CTRL] := True;
+        keysUp  [K_CTRL] := False;
+      end;
+    K_ALT_L, K_ALT_R:
+      begin
+        keybFlags := keybFlags or keyboardAlt;
+        keysDown[K_ALT] := True;
+        keysUp  [K_ALT] := False;
+      end;
+    K_SHIFT_L, K_SHIFT_R:
+      begin
+        keybFlags := keybFlags or keyboardShift;
+        keysDown[K_SHIFT] := True;
+        keysUp  [K_SHIFT] := False;
+      end;
+    K_SUPER_L, K_SUPER_R:
+      begin
+        keybFlags := keybFlags or keyboardCommand;
+        keysDown[K_SUPER] := True;
+        keysUp  [K_SUPER] := False;
       end;
       end;
-    K_APP_MENU: ;
-    {$IfNDef MAC_COCOA}
     K_CAPSLOCK: keybFlags := keybFlags or keyboardCapsDown;
     K_CAPSLOCK: keybFlags := keybFlags or keyboardCapsDown;
-    {$Else}
-    K_CAPSLOCK: keybFlags := keybFlags xor keyboardCaps;
-    {$EndIf}  
+    {$EndIf}      
+    K_APP_MENU: ;
     K_NUMLOCK:  keybFlags := keybFlags or keyboardNumLockDown;
     K_NUMLOCK:  keybFlags := keybFlags or keyboardNumLockDown;
     K_SCROLL:   keybFlags := keybFlags or keyboardScrollLockDown;
     K_SCROLL:   keybFlags := keybFlags or keyboardScrollLockDown;
     K_F1, K_F2, K_F3, K_F4, K_F5, K_F6, K_F7, K_F8, K_F9, K_F10, K_F11, K_F12: ;
     K_F1, K_F2, K_F3, K_F4, K_F5, K_F6, K_F7, K_F8, K_F9, K_F10, K_F11, K_F12: ;
@@ -417,22 +429,43 @@ begin
     {$IfNDef MAC_COCOA}
     {$IfNDef MAC_COCOA}
     K_CAPSLOCK: if ((keybFlags and keyboardCapsDown) > 0)  then
     K_CAPSLOCK: if ((keybFlags and keyboardCapsDown) > 0)  then
                   keybFlags := keybFlags xor keyboardCapsDown xor keyboardCaps;
                   keybFlags := keybFlags xor keyboardCapsDown xor keyboardCaps;
-    {$EndIf}
-    K_NUMLOCK:  if ((keybFlags and keyboardNumLockDown) > 0) then
-                  keybFlags := keybFlags xor keyboardNumLock xor keyboardNumLockDown;
-    K_SCROLL: if ((keybFlags and keyboardScrollLockDown) > 0) then
-                  keybFlags := keybFlags xor keyboardScrollLock xor keyboardScrollLockDown;
-    K_F1, K_F2, K_F3, K_F4, K_F5, K_F6, K_F7, K_F8, K_F9, K_F10, K_F11, K_F12: ;
-    K_CTRL_R, K_CTRL_L, K_ALT_L, K_ALT_R, K_SHIFT_L, K_SHIFT_R, K_SUPER_R, K_SUPER_L:
+    K_CTRL_R, K_CTRL_L:
+      begin
+        if (keysUp[K_CTRL_L]) and (keysUp[K_CTRL_R]) then
+        begin
+          keybFlags := keybFlags and ($FFFFFFFF - keyboardCtrl);
+          keysDown[K_CTRL] := FALSE;
+          keysUp  [K_CTRL] := TRUE;
+        end;
+      end;
+    K_ALT_L, K_ALT_R:
+      begin
+        if (keysUp[K_ALT_L]) and (keysUp[K_ALT_R]) then
+        begin
+          keybFlags := keybFlags and ($FFFFFFFF - keyboardAlt);
+          keysDown[K_ALT] := FALSE;
+          keysUp  [K_ALT] := TRUE;
+        end;
+      end;
+    K_SHIFT_L, K_SHIFT_R:
+      begin
+        if (keysUp[K_SHIFT_L]) and (keysUp[K_SHIFT_R]) then
+        begin
+          keybFlags := keybFlags and ($FFFFFFFF - keyboardShift);
+          keysDown[K_SHIFT] := FALSE;
+          keysUp  [K_SHIFT] := TRUE;
+        end;
+      end;
+    K_SUPER_R, K_SUPER_L:
       begin
       begin
-        nCode := SCA(nCode);
-        keysDown[nCode] := FALSE;
-        keysUp  [nCode] := TRUE;
-        if nCode = K_SHIFT then keybFlags := keybFlags and ($FFFFFFFF - keyboardShift);
-        if nCode = K_CTRL  then keybFlags := keybFlags and ($FFFFFFFF - keyboardCtrl);
-        if nCode = K_ALT   then keybFlags := keybFlags and ($FFFFFFFF - keyboardAlt);
-        if nCode = K_SUPER then keybFlags := keybFlags and ($FFFFFFFF - keyboardCommand);
+        if (keysUp[K_SUPER_L]) and (keysUp[K_SUPER_R]) then
+        begin
+          keybFlags := keybFlags and ($FFFFFFFF - keyboardCommand);
+          keysDown[K_SUPER] := FALSE;
+          keysUp  [K_SUPER] := TRUE;
+        end;
       end;
       end;
+    {$EndIf}     
   else
   else
     begin
     begin
       keysLast[KA_UP] := nCode;
       keysLast[KA_UP] := nCode;
@@ -563,7 +596,6 @@ begin
   {$ENDIF}
   {$ENDIF}
   for i := 0 to 255 do
   for i := 0 to 255 do
   begin
   begin
-    keysUp      [i] := FALSE;
     keysPress   [i] := FALSE;
     keysPress   [i] := FALSE;
     keysCanPress[i] := TRUE;
     keysCanPress[i] := TRUE;
   end;
   end;