Subversion Repositories Kolibri OS

Rev

Rev 6887 | Rev 7422 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #ifndef INCLUDE_MOUSE_H
  2. #define INCLUDE_MOUSE_H
  3.  
  4. //Button MOUSE
  5. #define MOUSE_LEFT   001b
  6. #define MOUSE_RIGHT  010b
  7. #define MOUSE_LR     011b
  8. #define MOUSE_CENTER 100b
  9.  
  10. /**
  11.  *  The structure of the MOUSE
  12.  *  x - coordinate X
  13.  *  y - coordinate Y
  14.  *  xx and yy - time coordinates
  15.  *  lkm - left MOUSE button
  16.  *  pkm - right MOUSE button
  17.  *  mkm - MOUSE wheel
  18.  *  key - keycode button
  19.  *  tmp - time keycode
  20.  *  down - key event press
  21.  *  up - key release events
  22.  *  move - event MOUSE movements
  23.  *  click - when clicked
  24.  *  dblclick - double-click get system value
  25.  *  drag - drag the element event
  26.  */
  27.  
  28. :struct MOUSE
  29. {
  30.         signed x,y,xx,yy,lkm,mkm,pkm,key,tmp,tmp_time,hor,vert,down,up,move,click,dblclick,drag,left,top;
  31.         dword handle,_;
  32.         byte cmd;
  33.         void get();
  34.         void set();
  35.         void center();
  36.         dword hide();
  37.         void slider();
  38.         void show();
  39. } mouse;
  40.  
  41. :void MOUSE::show()
  42. {
  43.         if(!handle)return;
  44.         ECX = handle;
  45.         EAX = 37;
  46.         EBX = 5;
  47.         $int 0x40;
  48. }
  49. :dword MOUSE::hide()
  50. {
  51.         if(!_)
  52.         {
  53.                 EAX = 68;
  54.                 EBX = 12;
  55.                 ECX = 32*32*4;
  56.                 $int 0x40
  57.                 ECX = EAX;
  58.                 _ = EAX;
  59.         } else ECX = _;
  60.         EAX = 37;
  61.         EBX = 4;
  62.         DX  = 2;
  63.         $int 0x40;
  64.         handle = EAX;
  65.         ECX = EAX;
  66.         EAX = 37;
  67.         EBX = 5;
  68.         $int 0x40;
  69.         handle = EAX;
  70. }
  71.  
  72. //set new attributes MOUSE
  73. :void MOUSE::set()
  74. {
  75.         if((xx!=x)||(yy!=y))
  76.         {
  77.                 EAX = 18;
  78.                 EBX = 19;
  79.                 ECX = 4;
  80.                 EDX = (x<<16)+y;
  81.                 $int 0x40
  82.                 //move = true;
  83.         }
  84.         if((key)||(lkm|mkm|pkm))&&(down|up|click|dblclick|move)
  85.         {
  86.                 if(lkm|mkm|pkm)key=(lkm)|(pkm<<1)|(2<<mkm);
  87.                 EAX = 18;
  88.                 EBX = 19;
  89.                 ECX = key;
  90.                 EDX = (x<<16)+y;
  91.                 $int 0x40
  92.         }
  93. }
  94.  
  95. :void MOUSE::center()
  96. {
  97.         EAX = 18;
  98.         EBX = 15;
  99.         $int 0x40
  100. }
  101.  
  102. //get new attributes MOUSE
  103. :void MOUSE::get()
  104. {
  105.         EAX = 37;
  106.         EBX = 1;
  107.         $int    0x40
  108.         $mov    ebx, eax
  109.         $shr    eax, 16
  110.         $and    ebx,0x0000FFFF
  111.         x = EAX;
  112.         y = EBX;
  113.         if (x>6000) x-=65535;
  114.         if (y>6000) y-=65535;
  115.         EAX = 37;
  116.         EBX = 2;
  117.         $int    0x40
  118.         $mov    ebx, eax
  119.         $mov    ecx, eax
  120.         key = EAX;
  121.         $and    eax, 0x00000001
  122.         $shr    ebx, 1
  123.         $and    ebx, 0x00000001
  124.         $shr    ecx, 2
  125.         $and    ecx, 0x00000001
  126.         lkm = EAX;
  127.         pkm = EBX;
  128.         mkm = ECX;
  129.        
  130.         //when you release the MOUSE button
  131.         // Mouse Move Event
  132.         if(xx!=x)||(yy!=y)
  133.         {
  134.                 move = true;
  135.                 xx = x;
  136.                 yy = y;
  137.         }
  138.         else move = false;
  139.         // Mouse Up Event
  140.         if(cmd)&&(!key){
  141.                 up   = true;
  142.                 down = false;
  143.                 drag = false;
  144.                 if(!move) click = true;
  145.                 if(GetStartTime()-GetMouseDoubleClickDelay()<=tmp_time)
  146.                 {
  147.                         dblclick = true;
  148.                         click    = false;
  149.                 }
  150.                 tmp_time = GetStartTime();
  151.                 //returns the key code
  152.                 key = tmp;
  153.                 lkm = 1&tmp;
  154.                 pkm = 2&tmp;
  155.                 pkm >>= 1;
  156.                 mkm = 4&tmp;
  157.                 mkm >>= 2;
  158.                 cmd = false;
  159.         }
  160.        
  161.         //when you press the MOUSE button
  162.         // Mouse Down Event/Move Event
  163.         else
  164.         {
  165.             up       = false;
  166.                 click    = false;
  167.                 dblclick = false;
  168.                 down     = false;
  169.                 // Mouse Move Event
  170.                 if(key)if(!cmd)
  171.                 {
  172.                         down = true;
  173.                         if(move)drag = true;
  174.                         cmd = true;
  175.                         tmp=key;
  176.                 }
  177.         }
  178.        
  179.         //scroll
  180.         EAX = 37;
  181.         EBX = 7;
  182.         $int    0x40
  183.         $mov    ebx, eax
  184.         $shr    eax, 16
  185.         $and    ebx,0x0000FFFF
  186.         //hor = EAX;
  187.         vert = EBX;
  188. }
  189.  
  190.  
  191.  
  192. :void MOUSE::slider()
  193. {
  194.         signed _x,_y;
  195.         if(!handle)hide();
  196.         get();
  197.         _x = x;_y = y;
  198.         pause(5);
  199.         get();
  200.         left = _x - x;
  201.         top  = _y - y;
  202.         center();
  203.         get();
  204.         _x = x;_y = y;
  205.         pause(5);
  206. }
  207.  
  208.  
  209. /*=====================================================================================
  210. ===========================                                 ===========================
  211. ===========================              SYSTEM             ===========================
  212. ===========================                                 ===========================
  213. =====================================================================================*/
  214.  
  215.  
  216. inline fastcall int GetMouseSpeed() {
  217.         $mov eax,18
  218.         $mov ebx,19
  219.         $mov ecx,0
  220.         $int 0x40
  221. }
  222.  
  223. inline fastcall void SetMouseSpeed(EDX) {
  224.         $mov eax,18
  225.         $mov ebx,19
  226.         $mov ecx,1
  227.         $int 0x40
  228. }
  229.  
  230. inline fastcall int GetMouseAcceleration() {
  231.         $mov eax,18
  232.         $mov ebx,19
  233.         $mov ecx,2
  234.         $int 0x40
  235. }
  236.  
  237. inline fastcall void SetMouseAcceleration(EDX) {
  238.         $mov eax,18
  239.         $mov ebx,19
  240.         $mov ecx,3
  241.         $int 0x40
  242. }
  243.  
  244. inline fastcall int GetMouseDoubleClickDelay() {
  245.         $mov eax,18
  246.         $mov ebx,19
  247.         $mov ecx,6
  248.         $int 0x40
  249. }
  250.  
  251. inline fastcall void SetMouseDoubleClickDelay(DL) {
  252.         $mov eax,18
  253.         $mov ebx,19
  254.         $mov ecx,7
  255.         $int 0x40
  256. }
  257.  
  258. #endif