Subversion Repositories Kolibri OS

Rev

Rev 2538 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;------------------------------------------------------------------------------
  2. align 4
  3. START_mouse_thread:
  4.         mcall   40,100000b      ; only Event 6 - Mouse
  5. ;------------------------------------------------------------------------------
  6. align 4
  7. still_mouse:
  8.         mcall   10
  9. align 4
  10. mouse:
  11.         mcall   37,2
  12.         cmp     eax,1   ; åñëè íå ëåâàÿ, âîçâðàò
  13.         jne     still_mouse
  14. ; êîîðäèíàòû êóðñîðà   
  15.         xor     ebx,ebx
  16.         mcall   37
  17.  
  18.         mov     ebx,eax         ; eax = cursor_x
  19.         shr     eax,16          ; ebx = cursor_y
  20.         and     ebx,0xffff
  21.         mov     [curx1],eax     ; curx1 = cursor_x
  22.         mov     [cury1],ebx     ; cury1 = cursor_y
  23.        
  24. ; êîìó ïðèíàäëåæèò òî÷êà?
  25.         mcall   34,[curx1],[cury1]
  26.         cmp     al,1 ; 1 - ÿäðî
  27.         jne     still_mouse
  28.        
  29. ; check for icon by click down
  30.         call    check_icons_position
  31.         mov     eax,[click_pos]
  32.         test    eax,eax
  33.         jz      still_mouse
  34.        
  35.         mov     eax,[current_X_mouse_thread]
  36.         mov     [curx_restore],eax
  37.         mov     eax,[current_Y_mouse_thread]
  38.         mov     [cury_restore],eax
  39.  
  40.         call    draw_select
  41. ;--------------------------------------
  42. align 4
  43. @@:             ; ïîäîæä¸ì, ïîêà ïîëüçîâàòåëü íå îòïóñòèë ïðàâóþ êíîïêó ìûøè
  44.         mcall   37,2    ;   íàæàòû ëè êíîïêè ìûøè?
  45.         test    eax,1   ; åñëè îòïóñòèë
  46.         jz      @f      ;   èä¸ì â íà÷àëî ãëàâíîãî öèêëà
  47.  
  48.         mcall   68,1    ; èíà÷å ïåðåêëþ÷èìñÿ íà ñëåäóþùèé ïîòîê ñèñòåìû è êîãäà
  49.         jmp     @b      ; âûïîëíåíèå âåðíåòñÿ ýòîìó ïîòîêó, ïðîâåðèì ìûøü îïÿòü
  50. ;--------------------------------------
  51. align 4
  52. @@:
  53. ; êîîðäèíàòû êóðñîðà   
  54.         xor     ebx,ebx
  55.         mcall   37
  56.  
  57.         mov     ebx,eax         ; eax = cursor_x
  58.         shr     eax,16          ; ebx = cursor_y
  59.         and     ebx,0xffff
  60.         mov     [curx2],eax     ; curx1 = cursor_x
  61.         mov     [cury2],ebx     ; cury1 = cursor_y
  62.        
  63. ; êîìó ïðèíàäëåæèò òî÷êà?
  64.         mcall   34,[curx2],[cury2]
  65.         cmp     al,1 ; 1 - ÿäðî
  66.         je      @f
  67.         call    restore_background
  68.         jmp     still_mouse
  69. ;--------------------------------------
  70. align 4        
  71. @@:
  72. ; check for icon by click down
  73.         call    check_icons_position
  74.         mov     eax,[click_pos]
  75.         test    eax,eax
  76.         jz      still_mouse
  77.        
  78.         push    eax
  79.         mov     eax,[curx2]
  80.         mov     [curx1],eax
  81.         mov     eax,[cury2]
  82.         mov     [cury1],eax    
  83. ; check for icon by click up
  84.         call    check_icons_position   
  85.         pop     eax
  86.        
  87.         call    restore_background
  88.        
  89.         mov     ebx,[click_pos]
  90.        
  91.         test    ebx,ebx
  92.         jz      still_mouse
  93.        
  94.         cmp     eax,ebx
  95.         jne     still_mouse
  96. ;--------------------------------------
  97. ;start_appl:
  98.         mov     esi,[adress_of_icon_data_2]
  99.         mov     ebx,1
  100.         mov     edi,finfo.path
  101.         call    fill_paths
  102.         inc     ebx
  103.         mov     edi,param_str
  104.         mov     dword[finfo_start+8],edi
  105.         call    fill_paths
  106.         cmp     byte[edi],0
  107.         jne     .no0
  108.         and     dword[finfo_start+8],0
  109. ;--------------------------------------
  110. align 4
  111. .no0:
  112.         mov     ebx,finfo_start
  113.         mcall   70
  114.         jmp     still_mouse
  115. ;------------------------------------------------------------------------------
  116. align 4
  117. fill_paths:
  118.         push    esi edi
  119.         movzx   ecx,byte[str_lens+ebx]
  120.         add     esi,[positions+ebx*4]
  121.         push    esi
  122.         add     esi,ecx
  123. ;--------------------------------------
  124. align 4
  125. .l1:
  126.         dec     esi
  127.         cmp     byte[esi],' '
  128.         jnz     .found
  129.         loop    .l1
  130.         pop     esi
  131.         jmp     .noms
  132. ;--------------------------------------
  133. align 4
  134. .found:
  135.         lea     ecx,[esi+1]
  136.         pop     esi
  137.         sub     ecx,esi
  138.         rep     movsb
  139. ;--------------------------------------
  140. align 4
  141. .noms:
  142.         and     byte[edi],0
  143.         pop     edi esi
  144.         ret
  145. ;------------------------------------------------------------------------------
  146. align 4
  147. check_icons_position:
  148.         mov     ecx,[icons]
  149.         mov     ebx,icon_data
  150. ;--------------------------------------
  151. align 4
  152. .loop:
  153.         push    ebx ecx
  154.         mov     [adress_of_icon_data_2],ebx
  155.         mov     eax,[ebx]
  156.         call    calc_icon_pos
  157.  
  158.         mov     [current_X_mouse_thread],ebx
  159.         mov     [current_Y_mouse_thread],eax
  160.         mov     eax,[curx1]
  161.         mov     ebx,[current_X_mouse_thread]
  162.         cmp     eax,ebx
  163.         jb      .next
  164.        
  165.         add     ebx,52
  166.         cmp     eax,ebx
  167.         ja      .next
  168.        
  169.         mov     eax,[cury1]
  170.         mov     ebx,[current_Y_mouse_thread]
  171.         cmp     eax,ebx
  172.         jb      .next
  173.        
  174.         add     ebx,52
  175.         cmp     eax,ebx
  176.         ja      .next
  177.  
  178.         pop     ecx ebx
  179.         mov     eax,[adress_of_icon_data_2]
  180.         mov     [click_pos],eax
  181.         ret
  182. ;--------------------------------------
  183. align 4
  184. .next:
  185.         pop     ecx ebx
  186.         add     ebx,REC_SIZE
  187.         dec     ecx
  188.         jnz     .loop
  189. ; all icons survived!
  190.         xor     eax,eax
  191.         mov     [click_pos],eax
  192.         ret
  193. ;------------------------------------------------------------------------------
  194. align 4
  195. draw_select:
  196.         mcall   68,12,52*52*4+8
  197.         mov     [draw_area_2],eax
  198.         mov     ebx,52
  199.         mov     [eax],ebx
  200.         mov     [eax+4],ebx
  201. ;--------------------------------------
  202. ; draw black square
  203.         mov     eax,-1
  204.         mov     edi,[draw_area_2]
  205.         add     edi,8
  206.         cld
  207.         mov     ecx,52*52
  208.         rep     stosd
  209. ;--------------------------------------
  210. ; draw white square    
  211.         mov     eax,0xff000000
  212.         mov     edi,[draw_area_2]
  213.         add     edi,8+(4*1)+(52*4*1)
  214.         mov     ebx,50
  215.         cld
  216. ;--------------------------------------
  217. align 4
  218. @@:
  219.         mov     ecx,50
  220.         rep     stosd
  221.        
  222.         add     edi,2*4
  223.         dec     ebx
  224.         jnz     @b
  225. ;--------------------------------------
  226. ; draw black square
  227.         xor     eax,eax
  228.         mov     edi,[draw_area_2]
  229.         add     edi,8+(4*2)+(52*4*2)
  230.         mov     ebx,48
  231.         cld
  232. ;--------------------------------------
  233. align 4
  234. @@:
  235.         mov     ecx,48
  236.         rep     stosd
  237.        
  238.         add     edi,4*4
  239.         dec     ebx
  240.         jnz     @b     
  241. ;--------------------------------------
  242.         mov     edx,[current_X_mouse_thread]
  243.         shl     edx,16
  244.         add     edx,[current_Y_mouse_thread]
  245.         mov     ebx,[draw_area_2]
  246.         add     ebx,8
  247.         mcall   25,,<52,52>
  248.         mcall   68,13,[draw_area_2]
  249.         ret
  250. ;------------------------------------------------------------------------------
  251. align 4
  252. restore_background:
  253.         pusha
  254.         mov     eax,[curx_restore]
  255.         mov     ecx,eax
  256.         shl     ecx,16
  257.         add     ecx,eax
  258.         add     ecx,52
  259.        
  260.         mov     eax,[cury_restore]
  261.         mov     edx,eax
  262.         shl     edx,16
  263.         add     edx,eax
  264.         add     edx,52
  265.        
  266.         mcall   15,9
  267.         popa
  268.         ret
  269. ;------------------------------------------------------------------------------