Subversion Repositories Kolibri OS

Rev

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