Bläddra i källkod

Graph2, TermBox: Key modifiers change

Arthur Yefimov 3 år sedan
förälder
incheckning
41eb9f188f
5 ändrade filer med 42 tillägg och 89 borttagningar
  1. 3 3
      src/Editor.Mod
  2. 1 1
      src/FreeOberon.Mod
  3. 18 55
      src/Graph2.Mod
  4. 6 6
      src/OV.Mod
  5. 14 24
      src/TermBox.Mod

+ 3 - 3
src/Editor.Mod

@@ -1020,15 +1020,15 @@ END EditorClose;
 PROCEDURE EditorKeyDown*(c: OV.Control; VAR E: T.Event);
 VAR shiftPressed: BOOLEAN;
 BEGIN OV.WindowKeyDown(c, E); HideMsg(c);
-  shiftPressed := E.mod * T.mShift # {};
+  shiftPressed := T.mShift IN E.mod;
   CASE E.key OF
     T.kLeft:
-    IF E.mod * T.mCtrl # {} THEN MoveByWord(c(Editor), FALSE, shiftPressed)
+    IF T.mCtrl IN E.mod THEN MoveByWord(c(Editor), FALSE, shiftPressed)
     ELSE MoveByChar(c(Editor), FALSE, shiftPressed)
     END;
     PrintText(c(Editor))
   | T.kRight:
-    IF E.mod * T.mCtrl # {} THEN MoveByWord(c(Editor), TRUE, shiftPressed)
+    IF T.mCtrl IN E.mod THEN MoveByWord(c(Editor), TRUE, shiftPressed)
     ELSE MoveByChar(c(Editor), TRUE, shiftPressed)
     END;
     PrintText(c(Editor))

+ 1 - 1
src/FreeOberon.Mod

@@ -381,7 +381,7 @@ BEGIN
         DEC(inputBufLen); Backspace
       END
     | T.kPause:
-      IF E.mod * T.mCtrl # {} THEN
+      IF T.mCtrl IN E.mod THEN
         KillProgram;
         quit := TRUE
       END

+ 18 - 55
src/Graph2.Mod

@@ -166,23 +166,17 @@ CONST
   kMax*        = 226;
 
   (* Modifiers Set *)
-  mLShift*   = 0;
-  mRShift*   = 1;
-  mLCtrl*    = 6;
-  mRCtrl*    = 7;
-  mLAlt*     = 8;
-  mRAlt*     = 9;
-  mLMeta*    = 10;
-  mRMeta*    = 11;
-  mNumLock*  = 12;
-  mCapsLock* = 13;
-  mMenu*     = 14;
-  mCommand*  = 29;
-  mScrLock*  = 30;
-  mCtrl*  = {mLCtrl, mRCtrl};
-  mShift* = {mLShift, mRShift};
-  mAlt*   = {mLAlt, mRAlt};
-  mMeta*   = {mLMeta, mRMeta};
+  mShift*      = 0;
+  mCtrl*       = 1;
+  mAlt*        = 2;
+  mLwin*       = 3;
+  mRwin*       = 4;
+  mMenu*       = 5;
+  mAltGr*      = 6;
+  mCommand*    = 7;
+  mScrolllock* = 8;
+  mNumlock*    = 9;
+  mCapslock*   = 10;
 
 TYPE
   ADRINT = SYSTEM.ADRINT;
@@ -298,33 +292,6 @@ VAR
   target: Bitmap;
   black: Color;
 
-  (* Keyboard modifier keys *)
-  keyModMap: ARRAY 256 OF INTEGER;
-  keyMods: SET;
-
-PROCEDURE InitKeyMod;
-VAR i: INTEGER;
-BEGIN keyMods := {};
-  FOR i := 0 TO LEN(keyModMap) - 1 DO keyModMap[i] := -1 END;
-  keyModMap[kLShift] := mLShift; keyModMap[kRShift] := mRShift;
-  keyModMap[kLCtrl] := mLCtrl; keyModMap[kRCtrl] := mRCtrl;
-  keyModMap[kAlt] := mLAlt; keyModMap[kAltGr] := mRAlt;
-  keyModMap[kLMeta] := mLMeta; keyModMap[kRMeta] := mRMeta;
-  keyModMap[kNumLock] := mNumLock; keyModMap[kCapsLock] := mCapsLock;
-  keyModMap[kScrLock] := mScrLock; keyModMap[kCommand] := mCommand;
-  keyModMap[kMenu] := mMenu
-END InitKeyMod;
-
-PROCEDURE SetKeyMod(key: INTEGER; on: BOOLEAN);
-BEGIN
-  IF key < LEN(keyModMap) THEN
-    key := keyModMap[key];
-    IF key >= 0 THEN
-      IF on THEN INCL(keyMods, key) ELSE EXCL(keyMods, key) END
-    END
-  END
-END SetKeyMod;
-
 PROCEDURE Error(s: ARRAY OF CHAR);
 BEGIN Out.String(s); Out.Ln
 END Error;
@@ -807,7 +774,6 @@ VAR d: Al.Display;
   isCurTarget: BOOLEAN;
 BEGIN isCurTarget := target = W;
   IF W.display # NIL THEN Al.destroy_display(W.display) END;
-  keyMods := {};
 
   W.rzoom := W.wantZoom;
   IF W.wantZoom = 1.0 THEN W.zoom := noZoom
@@ -1048,7 +1014,7 @@ BEGIN
         W.lastX := event.x; W.lastY := event.y
       END;
       event.button := ME.button;
-      event.mod := keyMods;
+      event.mod := {};
       event.display := ME.display; event.window := W
     ELSE event.type := noEvent
     END
@@ -1068,7 +1034,7 @@ BEGIN
     event.x := x; event.y := y;
     event.z := ME.z; event.w := ME.w;
     event.button := ME.button;
-    event.mod := keyMods;
+    event.mod := {};
     event.display := ME.display
   ELSIF E.type = Al.eventMouseButtonUp THEN
     event.type := mouseUp;
@@ -1086,7 +1052,7 @@ BEGIN
     event.x := x; event.y := y;
     event.z := ME.z; event.w := ME.w;
     event.button := ME.button;
-    event.mod := keyMods;
+    event.mod := {};
     event.display := ME.display
   ELSIF E.type = Al.eventTimer THEN
     event.type := timer;
@@ -1097,16 +1063,14 @@ BEGIN
     event.type := keyDown;
     KE := SYSTEM.VAL(Al.PKeyboardEvent, SYSTEM.ADR(E));
     event.key := KE.keycode;
-    SetKeyMod(event.key, TRUE);
-    event.mod := keyMods;
+    event.mod := {};
     event.display := KE.display;
     event.window := GetWindow(event.display)
   ELSIF E.type = Al.eventKeyUp THEN
     event.type := keyUp;
     KE := SYSTEM.VAL(Al.PKeyboardEvent, SYSTEM.ADR(E));
     event.key := KE.keycode;
-    event.mod := keyMods;
-    SetKeyMod(event.key, FALSE);
+    event.mod := {};
     event.display := KE.display;
     event.window := GetWindow(event.display)
   ELSIF E.type = Al.eventKeyChar THEN
@@ -1114,7 +1078,7 @@ BEGIN
     event.type := char;
     event.key := KE.keycode;
     event.ch := CHR(KE.unichar);
-    event.mod := keyMods;
+    event.mod := KE.modifiers;
     event.repeat := KE.repeat;
     event.display := KE.display;
     event.window := GetWindow(event.display)
@@ -1442,8 +1406,7 @@ BEGIN ok := TRUE;
       Al.register_event_source(queue, Al.get_keyboard_event_source());
       IF ~(noMouse IN settings) THEN
         Al.register_event_source(queue, Al.get_mouse_event_source())
-      END;
-      InitKeyMod
+      END
     END;
 
     IF ~(manual IN settings) THEN

+ 6 - 6
src/OV.Mod

@@ -2365,9 +2365,9 @@ VAR m: Menu;
   handled: BOOLEAN;
 BEGIN handled := FALSE; hotkey := E.key;
   IF (hotkey # 0) & ~HasModalWindow(app) THEN
-    IF E.mod * T.mCtrl  # {} THEN INC(hotkey, 100H) END;
-    IF E.mod * T.mAlt   # {} THEN INC(hotkey, 200H) END;
-    IF E.mod * T.mShift # {} THEN INC(hotkey, 400H) END;
+    IF T.mCtrl IN E.mod THEN INC(hotkey, 100H) END;
+    IF E.mod * {T.mMenu, T.mAlt, T.mAltGr} # {} THEN INC(hotkey, 200H) END;
+    IF T.mShift IN E.mod THEN INC(hotkey, 400H) END;
     m := FindMenuWithHotkey(app.menu, hotkey);
     IF m # NIL THEN handled := TRUE;
       IF m.do.click # NIL THEN m.do.click(m) END
@@ -2421,15 +2421,15 @@ RETURN worked END OnTabPress;
 PROCEDURE OnKey(app: App; VAR E: T.Event);
 VAR handled: BOOLEAN; p: Control;
 BEGIN handled := FALSE; p := app.cur;
-  IF (E.mod * (T.mCtrl + T.mAlt + T.mShift) # {}) OR
+  IF (E.mod * {T.mCtrl, T.mShift, T.mAlt, T.mAltGr, T.mMenu} # {}) OR
      (T.kF1 <= E.key) & (E.key <= T.kF12) OR (E.key = T.kPause)
   THEN handled := CheckHotkey(app, E);
-    IF ~handled & (E.mod * T.mAlt # {}) THEN
+    IF ~handled & (E.mod * {T.mAlt, T.mAltGr, T.mMenu} # {}) THEN
       handled := CheckMenuOpenKey(app, E)
     END
   END;
   IF ~handled & (p # NIL) &
-     ((E.key # T.kTab) OR ~OnTabPress(app, E.mod * T.mShift # {}))
+     ((E.key # T.kTab) OR ~OnTabPress(app, T.mShift IN E.mod))
   THEN
     IF p.do.keyDown # NIL THEN p.do.keyDown(p, E) END;
     IF (p.parent # NIL) & (p.parent IS Window) &

+ 14 - 24
src/TermBox.Mod

@@ -154,23 +154,17 @@ CONST
   kMax*        = 226;
 
   (* Modifiers Set *)
-  mLShift*   = 0;
-  mRShift*   = 1;
-  mLCtrl*    = 6;
-  mRCtrl*    = 7;
-  mLAlt*     = 8;
-  mRAlt*     = 9;
-  mLMeta*    = 10;
-  mRMeta*    = 11;
-  mNumLock*  = 12;
-  mCapsLock* = 13;
-  mMenu*     = 14;
-  mCommand*  = 29;
-  mScrLock*  = 30;
-  mCtrl*  = {mLCtrl, mRCtrl};
-  mShift* = {mLShift, mRShift};
-  mAlt*   = {mLAlt, mRAlt};
-  mMeta*  = {mLMeta, mRMeta};
+  mShift*      = 0;
+  mCtrl*       = 1;
+  mAlt*        = 2;
+  mLwin*       = 3;
+  mRwin*       = 4;
+  mMenu*       = 5;
+  mAltGr*      = 6;
+  mCommand*    = 7;
+  mScrolllock* = 8;
+  mNumlock*    = 9;
+  mCapslock*   = 10;
 
   (* Characters *)
   lineHor*         = 2500X;
@@ -570,14 +564,10 @@ BEGIN
     mouseDown := FALSE; GetMousePos(e, event.x, event.y);
     MoveMouse(event.x, event.y);
     event.button := 0; (* 0 means release *)
-  ELSIF e.type = G.keyDown THEN
-    IF (e.key = G.kEnter) & (e.mod * G.mAlt # {}) THEN
-      ToggleFS; skipEnter := TRUE
-    END;
-    event.type := noEvent
   ELSIF e.type = G.char THEN
-    IF skipEnter & (e.key = G.kEnter) THEN
-      event.type := noEvent; skipEnter := FALSE
+    Out.String('MOD '); Out.Int(ORD(e.mod), 0); Out.Ln;
+    IF (e.key = G.kEnter) & (e.mod * {G.mMenu, G.mAlt, G.mAltGr} # {}) THEN
+      ToggleFS; skipEnter := TRUE
     ELSE event.type := key;
       event.key := e.key;
       event.ch := e.ch;