Browse Source

Update zgl_application.pas

Seenkao 4 years ago
parent
commit
6bd03be4aa
1 changed files with 108 additions and 43 deletions
  1. 108 43
      Zengl_SRC/src/zgl_application.pas

+ 108 - 43
Zengl_SRC/src/zgl_application.pas

@@ -336,7 +336,7 @@ begin
   begin
     keybFlags := keybFlags or keyboardLatRusDown;
   end;
-  if keysUp[K_F12] then
+  if ((keybFlags and keyboardLatRusDown) > 0) and keysUp[K_F12] then
   begin
     keybFlags := keybFlags and ($FFFFFFFF - keyboardLatRusDown) xor keyboardLatinRus;
   end;
@@ -538,11 +538,6 @@ begin
     mouseDX := mouseX - wndWidth div 2;
     mouseDY := mouseY - wndHeight div 2;
   end;
-  if (mouseLX <> mouseX) or (mouseLY <> mouseY) Then
-  begin
-    mouseLX := mouseX;
-    mouseLY := mouseY;
-  end;
 
   if (mouseX < 0) or (mouseX > wndWidth) or (mouseY < 0) or (mouseY > wndHeight) then
   begin
@@ -1112,82 +1107,152 @@ eventLoop:
       end;
     NSScrollWheel:
       begin
-   //         s :={ s + }'wheel mouse ';
-    //        s := s + FloatToStr(ev.scrollingDeltaY);
+        if ev.scrollingDeltaY > 0 then
+          mouseDblClickWheel := mouseDblClickWheel or M_WHEEL_UP
+        else
+          mouseDblClickWheel := mouseDblClickWheel or M_WHEEL_DOWN;
       end;
     NSFlagsChanged:
       begin
         modFlags := ev.modifierFlags;
-        if ((modFlags and NSAlphaShiftKeyMask) > 0) or ((modFlags and 256) > 0) then
-          keyboardDown(K_CAPSLOCK);
+        if (modFlags and 256) > 0 then
+        begin
+          if ((modFlags and 2) = 0) then
+          begin
+            keysUp[K_SHIFT_L] := True;
+            keysDown[K_SHIFT_L] := False;
+            if ((modFlags and 4) = 0) then
+            begin
+              keysUp[K_SHIFT] := True;
+              keysDown[K_SHIFT] := False;
+              keybFlags := keybFlags and ($FFFFFFFF - keyboardShift);
+            end;
+          end;
+          if ((modFlags and 4) = 0) then
+          begin
+            keysUp[K_SHIFT_R] := True;
+            keysDown[K_SHIFT_R] := False;
+          end;
+
+          if ((modFlags and 1) = 0) then
+          begin
+            keysUp[K_CTRL_L] := True;
+            keysDown[K_CTRL_L] := False;
+            if ((modFlags and $2000) = 0) then
+            begin
+              keysUp[K_CTRL] := True;
+              keysDown[K_CTRL] := False;
+              keybFlags := keybFlags and ($FFFFFFFF - keyboardCtrl);
+            end;
+          end;
+          if ((modFlags and $2000) = 0) then
+          begin
+            keysUp[K_CTRL_R] := True;
+            keysDown[K_CTRL_R] := False;
+          end;
+
+          if ((modFlags and $20) = 0) then
+          begin
+            keysUp[K_ALT_L] := True;
+            keysDown[K_ALT_L] := False;
+            if ((modFlags and $40) = 0) then
+            begin
+              keysUp[K_ALT] := True;
+              keysDown[K_ALT] := False;
+              keybFlags := keybFlags and ($FFFFFFFF - keyboardAlt);
+            end;
+          end;
+          if ((modFlags and $40) = 0) then
+          begin
+            keysUp[K_ALT_R] := True;
+            keysDown[K_ALT_R] := False;
+          end;
+
+          if ((modFlags and 8) = 0) then
+          begin
+            keysUp[K_SUPER_L] := True;
+            keysDown[K_SUPER_L] := False;
+            if ((modFlags and 16) = 0) then
+            begin
+              keysUp[K_SUPER] := True;
+              keysDown[K_SUPER] := False;
+              keybFlags := keybFlags and ($FFFFFFFF - keyboardCommand);
+            end;
+          end;
+          if ((modFlags and 16) = 0) then
+          begin
+            keysUp[K_SUPER_R] := True;
+            keysDown[K_SUPER_R] := False;
+          end;
+        end;
+        if (modFlags and NSAlphaShiftKeyMask) > 0 then
+          keybFlags := keybFlags or keyboardCaps
+        else
+          keybFlags := keybFlags and ($FFFFFFFF - keyboardCaps);
         if (modFlags and NSShiftKeyMask) > 0 then
         begin
+          keybFlags := keybFlags or keyboardShift;
+          keysDown[K_SHIFT] := true;
+          keysUp[K_SHIFT] := False;
           if (modFlags and 2) > 0 then
           begin
-            keyboardDown(K_SHIFT_L);
-          end
-          else begin
-            keyboardUp(K_SHIFT_L);
+            keysDown[K_SHIFT_L] := true;
+            keysUp[K_SHIFT_L] := False;
           end;
           if (modFlags and 4) > 0 then
           begin
-            keyboardDown(K_SHIFT_R);
-          end
-          else begin
-            keyboardUp(K_SHIFT_R);
+            keysDown[K_SHIFT_R] := true;
+            keysUp[K_SHIFT_R] := False;
           end;
         end;
         if (modFlags and NSControlKeyMask) > 0 then
         begin
+          keybFlags := keybFlags or keyboardCtrl;
+          keysDown[K_CTRL] := true;
+          keysUp[K_CTRL] := False;
           if (modFlags and 1) > 0 then
           begin
-            keyboardDown(K_CTRL_L);
-          end
-          else begin
-            keyboardUp(K_CTRL_L);
+            keysDown[K_CTRL_L] := true;
+            keysUp[K_CTRL_L] := False;
           end;
           if (modFlags and $2000) > 0 then
           begin
-            keyboardDown(K_CTRL_R);
-          end
-          else begin
-            keyboardUp(K_CTRL_R);
+            keysDown[K_CTRL_R] := true;
+            keysUp[K_CTRL_R] := False;
           end;
         end;
         if (modFlags and NSAlternateKeyMask) > 0 then
         begin
+          keybFlags := keybFlags or keyboardAlt;
+          keysDown[K_ALT] := true;
+          keysUp[K_ALT] := False;
           if (modFlags and $20) > 0 then
           begin
-            keyboardDown(K_ALT_L);
-          end
-          else begin
-            keyboardUp(K_ALT_L);
+            keysDown[K_ALT_L] := true;
+            keysUp[K_ALT_L] := False;
           end;
           if (modFlags and $40) > 0 then
           begin
-            keyboardDown(K_ALT_R);
-          end
-          else begin
-            keyboardUp(K_ALT_R);
+            keysDown[K_ALT_R] := true;
+            keysDown[K_ALT_R] := False;
           end;
         end;
         if (modFlags and NSCommandKeyMask) > 0 then
         begin
+          keybFlags := keybFlags or keyboardCommand;
+          keysDown[K_SUPER] := true;
+          keysUp[K_SUPER] := False;
           if (modFlags and 8) > 0 then
           begin
-            keyboardDown(K_SUPER_L);
-          end
-          else begin
-            keyboardUp(K_SUPER_L);
+            keysDown[K_SUPER_L] := true;
+            keysUp[K_SUPER_L] := False;
           end;
           if (modFlags and 16) > 0 then
           begin
-            keyboardDown(K_SUPER_R);
-          end
-          else begin
-            keyboardUp(K_SUPER_R);
+            keysDown[K_SUPER_R] := true;
+            keysUp[K_SUPER_R] := False;
           end;
-        end;
+        end;                                
       end;
     NSKeyDown, NSKeyDownMask:
       begin