mouse.inc 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. {
  2. System independent mouse interface for linux
  3. $Id$
  4. }
  5. uses
  6. Linux,Video
  7. {$ifndef NOMOUSE}
  8. {$ifdef OLDGPM}
  9. ,gpm114
  10. {$else}
  11. ,gpm
  12. {$endif}
  13. {$endif ndef NOMOUSE}
  14. ;
  15. const
  16. mousecur : boolean = false;
  17. mousecurofs : longint = -1;
  18. var
  19. mousecurcell : TVideoCell;
  20. procedure PlaceMouseCur(ofs:longint);
  21. {$ifndef NOMOUSE}
  22. var
  23. upd : boolean;
  24. {$endif ndef NOMOUSE}
  25. begin
  26. {$ifndef NOMOUSE}
  27. if VideoBuf=nil then
  28. exit;
  29. upd:=false;
  30. if (MouseCurOfs<>-1) and (VideoBuf^[MouseCurOfs]=MouseCurCell) then
  31. begin
  32. VideoBuf^[MouseCurOfs]:=MouseCurCell xor $7f00;
  33. upd:=true;
  34. end;
  35. MouseCurOfs:=ofs;
  36. if (MouseCurOfs<>-1) then
  37. begin
  38. MouseCurCell:=VideoBuf^[MouseCurOfs] xor $7f00;
  39. VideoBuf^[MouseCurOfs]:=MouseCurCell;
  40. upd:=true;
  41. end;
  42. if upd then
  43. Updatescreen(false);
  44. {$endif ndef NOMOUSE}
  45. end;
  46. procedure InitMouse;
  47. {$ifndef NOMOUSE}
  48. var
  49. connect : TGPMConnect;
  50. {$endif ndef NOMOUSE}
  51. begin
  52. {$ifndef NOMOUSE}
  53. PendingMouseHead:=@PendingMouseEvent;
  54. PendingMouseTail:=@PendingMouseEvent;
  55. PendingMouseEvents:=0;
  56. FillChar(LastMouseEvent,sizeof(TMouseEvent),0);
  57. { open gpm }
  58. connect.EventMask:=GPM_MOVE or GPM_DRAG or GPM_DOWN or GPM_UP;
  59. connect.DefaultMask:=0;
  60. connect.MinMod:=0;
  61. connect.MaxMod:=0;
  62. Gpm_Open(connect,0);
  63. { show mousepointer }
  64. ShowMouse;
  65. {$endif ndef NOMOUSE}
  66. end;
  67. procedure DoneMouse;
  68. begin
  69. {$ifndef NOMOUSE}
  70. HideMouse;
  71. Gpm_Close;
  72. {$endif ndef NOMOUSE}
  73. end;
  74. function DetectMouse:byte;
  75. begin
  76. {$ifdef NOMOUSE}
  77. DetectMouse:=0;
  78. {$else ndef NOMOUSE}
  79. { always a mouse deamon present }
  80. DetectMouse:=2;
  81. {$endif ndef NOMOUSE}
  82. end;
  83. procedure ShowMouse;
  84. begin
  85. PlaceMouseCur(MouseCurOfs);
  86. mousecur:=true;
  87. end;
  88. procedure HideMouse;
  89. begin
  90. PlaceMouseCur(-1);
  91. mousecur:=false;
  92. end;
  93. function GetMouseX:word;
  94. {$ifndef NOMOUSE}
  95. var
  96. e : TGPMEvent;
  97. {$endif ndef NOMOUSE}
  98. begin
  99. {$ifdef NOMOUSE}
  100. GetMouseX:=0;
  101. {$else ndef NOMOUSE}
  102. if gpm_fd<0 then
  103. exit(0);
  104. Gpm_GetSnapshot(e);
  105. GetMouseX:=e.x-1;
  106. {$endif ndef NOMOUSE}
  107. end;
  108. function GetMouseY:word;
  109. {$ifndef NOMOUSE}
  110. var
  111. e : TGPMEvent;
  112. {$endif ndef NOMOUSE}
  113. begin
  114. {$ifdef NOMOUSE}
  115. GetMouseY:=0;
  116. {$else ndef NOMOUSE}
  117. if gpm_fd<0 then
  118. exit(0);
  119. Gpm_GetSnapshot(e);
  120. GetMouseY:=e.y-1;
  121. {$endif ndef NOMOUSE}
  122. end;
  123. function GetMouseButtons:word;
  124. {$ifndef NOMOUSE}
  125. var
  126. e : TGPMEvent;
  127. {$endif ndef NOMOUSE}
  128. begin
  129. {$ifdef NOMOUSE}
  130. GetMouseButtons:=0;
  131. {$else ndef NOMOUSE}
  132. if gpm_fd<0 then
  133. exit(0);
  134. Gpm_GetSnapshot(e);
  135. GetMouseButtons:=e.buttons;
  136. {$endif ndef NOMOUSE}
  137. end;
  138. procedure SetMouseXY(x,y:word);
  139. begin
  140. end;
  141. procedure GetMouseEvent(var MouseEvent: TMouseEvent);
  142. {$ifndef NOMOUSE}
  143. var
  144. e : TGPMEvent;
  145. {$endif ndef NOMOUSE}
  146. begin
  147. {$ifdef NOMOUSE}
  148. fillchar(MouseEvent,SizeOf(TMouseEvent),#0);
  149. {$else ndef NOMOUSE}
  150. if gpm_fd<0 then
  151. exit;
  152. Gpm_GetEvent(e);
  153. MouseEvent.x:=e.x-1;
  154. MouseEvent.y:=e.y-1;
  155. MouseEvent.buttons:=0;
  156. if e.buttons and Gpm_b_left<>0 then
  157. inc(MouseEvent.buttons,1);
  158. if e.buttons and Gpm_b_right<>0 then
  159. inc(MouseEvent.buttons,2);
  160. if e.buttons and Gpm_b_middle<>0 then
  161. inc(MouseEvent.buttons,4);
  162. case (e.EventType and $f) of
  163. GPM_MOVE,
  164. GPM_DRAG : MouseEvent.Action:=MouseActionMove;
  165. GPM_DOWN : MouseEvent.Action:=MouseActionDown;
  166. GPM_UP : MouseEvent.Action:=MouseActionUp;
  167. else
  168. MouseEvent.Action:=0;
  169. end;
  170. LastMouseEvent:=MouseEvent;
  171. { update mouse cursor }
  172. if mousecur then
  173. PlaceMouseCur(MouseEvent.y*ScreenWidth+MouseEvent.x);
  174. {$endif ndef NOMOUSE}
  175. end;
  176. function PollMouseEvent(var MouseEvent: TMouseEvent):boolean;
  177. {$ifndef NOMOUSE}
  178. var
  179. e : TGPMEvent;
  180. fds : FDSet;
  181. {$endif ndef NOMOUSE}
  182. begin
  183. {$ifdef NOMOUSE}
  184. fillchar(MouseEvent,SizeOf(TMouseEvent),#0);
  185. exit(false);
  186. {$else ndef NOMOUSE}
  187. if gpm_fd<0 then
  188. exit(false);
  189. FD_Zero(fds);
  190. FD_Set(gpm_fd,fds);
  191. if (Select(gpm_fd+1,@fds,nil,nil,1)>0) then
  192. begin
  193. Gpm_GetSnapshot(e);
  194. MouseEvent.x:=e.x-1;
  195. MouseEvent.y:=e.y-1;
  196. MouseEvent.buttons:=0;
  197. if e.buttons and Gpm_b_left<>0 then
  198. inc(MouseEvent.buttons,1);
  199. if e.buttons and Gpm_b_right<>0 then
  200. inc(MouseEvent.buttons,2);
  201. if e.buttons and Gpm_b_middle<>0 then
  202. inc(MouseEvent.buttons,4);
  203. case (e.EventType and $f) of
  204. GPM_MOVE,
  205. GPM_DRAG : MouseEvent.Action:=MouseActionMove;
  206. GPM_DOWN : MouseEvent.Action:=MouseActionDown;
  207. GPM_UP : MouseEvent.Action:=MouseActionUp;
  208. else
  209. MouseEvent.Action:=0;
  210. end;
  211. PollMouseEvent:=true;
  212. end
  213. else
  214. PollMouseEvent:=false;
  215. {$endif ndef NOMOUSE}
  216. end;
  217. {
  218. $Log$
  219. Revision 1.2 2000-07-13 11:32:25 michael
  220. + removed logs
  221. }