Browse Source

Mouse wheel for go32v2.

Margers 3 weeks ago
parent
commit
57092e3336
1 changed files with 25 additions and 4 deletions
  1. 25 4
      packages/rtl-console/src/go32v2/mouse.pp

+ 25 - 4
packages/rtl-console/src/go32v2/mouse.pp

@@ -80,6 +80,7 @@ const
   oldmousey : longint = -1;
   oldmousey : longint = -1;
   mouselock : boolean = false;
   mouselock : boolean = false;
 
 
+{$ASMMODE ATT}
 { if the cursor is drawn by this the unit, we must be careful }
 { if the cursor is drawn by this the unit, we must be careful }
 { when drawing while the interrupt handler is called          }
 { when drawing while the interrupt handler is called          }
 procedure lockmouse;assembler;
 procedure lockmouse;assembler;
@@ -99,12 +100,22 @@ procedure unlockmouse;
   end;
   end;
 
 
 
 
-{$ASMMODE ATT}
 procedure MouseInt;assembler;
 procedure MouseInt;assembler;
 asm
 asm
         pushl   %edi
         pushl   %edi
         pushl   %ebx
         pushl   %ebx
-        movb    %bl,mousebuttons
+        movl    %bh,%al
+        xorb    %bh,%bh
+        cmpb    $0,%al
+        je  .LNoWheel
+        { mouse wheel }
+        jg  .LWheelUp
+        orw     MouseButton4,%bx
+        jmp .LNoWheel
+.LWheelUp:
+        orw     MouseButton5,%bx
+.LNoWheel:
+        movw    %bx,mousebuttons
         movw    %cx,mousewherex
         movw    %cx,mousewherex
         movw    %dx,mousewherey
         movw    %dx,mousewherey
         shrw    $3,%cx
         shrw    $3,%cx
@@ -185,7 +196,6 @@ asm
 end;
 end;
 
 
 
 
-
 PROCEDURE Mouse_Trap; ASSEMBLER;
 PROCEDURE Mouse_Trap; ASSEMBLER;
 ASM
 ASM
    PUSH %ES;                                          { Save ES register }
    PUSH %ES;                                          { Save ES register }
@@ -698,7 +708,15 @@ asm
         pushl   %ebp
         pushl   %ebp
         int     $0x33
         int     $0x33
         popl    %ebp
         popl    %ebp
-        movw    %bx,%ax
+        movb    %bl,%al
+        cmpb    $0,%bh
+        je      .Lexit
+        { mouse wheel }
+        jg      .LWheelUp
+        orw     MouseButton5,%ax
+        jmp     .Lexit
+.LWheelUp:
+        orw     MouseButton4,%ax
         jmp     .Lexit
         jmp     .Lexit
 .LGetMouseButtonsError:
 .LGetMouseButtonsError:
         xorl    %eax,%eax
         xorl    %eax,%eax
@@ -811,7 +829,10 @@ begin
      else
      else
        MouseEvent.Action:=MouseActionDown;
        MouseEvent.Action:=MouseActionDown;
    end;
    end;
+  if ((MouseEvent.Buttons and (MouseButton4 or MouseButton5)) <> 0) then
+    MouseEvent.Action:=MouseActionDown;
   LastMouseEvent:=MouseEvent;
   LastMouseEvent:=MouseEvent;
+  LastMouseEvent.Buttons:=LastMouseEvent.Buttons and (not (MouseButton4 or MouseButton5));
 end;
 end;