Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;Ïîñëåäíàÿ ìîäèôèêàöèÿ 03.10.2010
  2. ;ôàéë ñîçäàí 13.02.2009 <Lrz> Íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
  3. ;Ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
  4. ;Checkbox
  5.  
  6. macro use_checkbox_draw
  7. {
  8. check_box_draw:
  9.        pusha   ;ñîõðàíèì âñå ðåãèñòðû
  10. ;       mov     edi,dword [esp+36]
  11. ;       mov     ebx,ch_left_s
  12. ;       mov     ecx,ch_top_s
  13. ;       mov     edx,dword ch_border_color
  14. ;       mov     eax,13
  15. ;       mcall   ;ðèñóåì ðàìêó
  16.         mcall   13,ch_left_s,ch_top_s,ch_border_color
  17.  
  18.         mov     edx,dword ch_color
  19.         add     ebx,1 shl 16 - 2
  20.         add     ecx,1 shl 16 - 2
  21.         mcall   ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà
  22.  
  23.        test dword ch_flags,2  ;äîñòàòü çíà÷åíèå áèòà èç ïåðåìåííîé è ïîìåñòèòü â  ôëàã CF
  24.        jz   @f                ;â åñëè CF=1, òî âûïîëíèì ñëåäóþùóþ ïðîöåäóðó èíà÷å ïåðåéòè íà íèæíþþ @@
  25.        call check_box_draw_ch ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
  26. @@:
  27. ;----------------------------
  28. ;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà
  29. ;----------------------------
  30.         mov     ebx,ch_left             ;çàãðóçèòü çíà÷åíèå õ äëÿ ÷åê áîêñà
  31.         add     ebx,dword ch_size
  32.         add     ebx,dword ch_text_margin        ;äîáàâèòü ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
  33.         shl     ebx,16                          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  34.         mov     bx,word ch_top                  ;çàãðóçèì çíà÷åíèå ïî y
  35.         add     ebx,ch_size
  36.         mov     ecx,dword ch_text_color         ;çàãðóçèì öâåò íàäïèñè + flags
  37.         sub     ebx,7                           ;äîáàâèì çíà÷åíèå äëèíû ñòîðîíû -9+2
  38.        
  39.         mov     edx,dword ch_text_ptr           ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
  40.         mov     esi,dword ch_text_length
  41.         mov     eax,4                           ;âíåñåì â eax çíà÷åíèå âûâîäà íàäïèñè íà êàíâó
  42.         mcall                                   ;Âûâîä
  43.         popa                                    ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
  44.         ret 4                                   ;âûéäåì èç ïðîöåäóðû
  45.  
  46. check_box_clear_ch:                        ;î÷èñòêà ÷åê áîêñà
  47.         mov   edx,dword ch_color   ;öâåò âíóòðè ÷åê áîêñà
  48.         jmp   @f             ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@
  49. check_box_draw_ch:            ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
  50.         mov   edx,dword ch_border_color        ;çàãðóçèòü öâåò
  51. @@:
  52.         movzx ebx,word ch_left  ;çàãðóçèòü êîîðäèíàòó ïî õ
  53.         mov   eax,dword ch_size
  54.         mov   di,ax
  55.         shr   eax,2
  56.         push  ax
  57.  
  58.         push  ax
  59.         add   ebx,eax          
  60.         shl   ebx,16            ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  61.         pop   ax
  62.         lea   eax,[eax*2]
  63.         sub   bp,ax             ;ñîõðàíèì ðåãèñòð bx â ðåãèñòðå óêàçàòåëÿ áàçû
  64.         mov   bx,bp
  65.  
  66.         movzx ecx,word ch_top ;çàãðóçèòü êîîðäèíàòó ïî ó
  67.         pop   ax
  68.         add   cx,ax        
  69.         shl   ecx,16          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  70.         mov   cx,bp           ;çàãðóçèì çíà÷åíèÿ ðåãèñòðà óêàçàòåëÿ áàçû â cx
  71.         mov   eax,13          ;â eax - çíà÷åíèÿ ôóíêöèè äëÿ âûâîäà ïîëîñû ò.å. ïî ñóòè ïðÿìîóãîëüíèêà, êîòîðûé îòîáðàæàåò âêëþ÷åííûé êîìïîíåíò ÷åê áîêñ
  72.         mcall            ;âûâîä
  73. ret                                ;âûéòè èç ïðîöåäóðû
  74. }
  75.  
  76.  
  77. macro use_checkbox_mouse
  78. {
  79.  
  80. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  81. ;Îáðàáîò÷èê mouse
  82. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  83. check_box_mouse:      ;îáðàáîòêà ìûøè
  84. pusha
  85.         mov     edi,dword [esp+36]
  86.         mov     eax,37           ;áóäåì ÷òî òî äåëàòü åñëè ó íàñ ÷òî - íèòü íàæàòî
  87.         mov     ebx,2            ;âíåñòè â ðåãèñòð çíà÷åíèå 2
  88.         mcall             ;ïðîâåðêà íå íàæàë ëè ïîëüçîâàòåëü êíîïêó ìûøêè
  89.         test    eax,eax   ;ïðîâåðêà åñëè ó íàñ â eax=0, òî óñòàíîâèì ôëàã è âûéäåì
  90.         jnz     @f         ;ïåðåéòè íà íèæíþþ ìåòêó @@
  91.         btr     dword ch_flags,2  ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå.
  92.         jmp     check_box_mouse_end
  93.        
  94. @@:
  95.         bts  dword ch_flags,2   ;ïðîâåðêà ôëàãà ò.å. ïåðåíîñ â cf çíà÷åíèå áèòà è óñòàíîâêà áèòà â ñîñòîÿíèå âêëþ÷åíî
  96.         jc   check_box_mouse_end         ;åñëè CF=1 òî ïåðåéòè  â êîíåö ò.å. ýòî âûõîä
  97.         mov  esi,dword ch_text_length ;çàãðóçèòü êîë-âî ñèìâîëîâ â òåêñòîâîé ñòðîêå
  98.         ;Óìíîæåíèå íà 6 Áûñòðîå óìíîæåíèå ìîæíî âîñïîëüçîâàòüñÿ ëþáûì ìç ìåòîäîâ, íî íà ñòàðûõ Ïðîöåññîðàõ (386,486,P1)áûñòðåå áóäåò ñ èíñòðóêöèåé Lea
  99.         lea esi,[eax*3]  
  100.         shl esi,1
  101. ;        imul esi,6             ; èëè ìîæíî è òàê óìíîæèòü íà 6
  102.         add  esi,dword ch_text_margin ;äîáàâèòü 3 - ðàññòîÿíèå îò ÷åê áîêñà äî íàäïèñè
  103.  
  104.         mov  eax,37             ;ïîëó÷èì êîîðäèíàòû ìûøêè
  105.         mov  ebx,1              ;äîáàâèòü 1
  106.         mcall               ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà
  107.        
  108.         movzx ebx,word ch_top  ;çàãðóçèòü â bx çíà÷åíèå êîîðäèíàòû ó
  109.         cmp   ax,bx              ;ñðàâíèòü ñ ñ êîîðäèíàòîé êóðñîðà
  110.         jl   check_box_mouse_end          ;SF <> OF åñëè ìåíüøå
  111.         add   ebx,dword ch_size        ;äîáàâèòü ðàçìåð
  112.         cmp   ax,bx              ;ñðàâíèòü
  113.         jg   check_box_mouse_end          ;ZF = 0 è SF = OF åñëè áîëüøå
  114.              
  115.         shr   eax,16              ;ðàçäåëèì íà 65536 èëè ïðîñòî ñäâèíåì áèòû íà 16 çíà÷åíèé
  116.         movzx ebx,word ch_left  ;ïðîèçâåäåì àíàëîãè÷íîå ñðàâíåíèå
  117.         cmp   ax,bx            ;ñðàâíèòü ðåãèñòðû
  118.         jl   check_box_mouse_end        ;åñëè ìåíüøå
  119.         add   ebx,dword ch_size      ;äîáàâèòü äëèíó ñòîðîíû ïðÿìîóãîëüíèêà
  120.         add   ebx,esi          ;Ó÷åñòü â çíà÷åíèè ïî õ åùå è äëèíó íàäïèñè ê ÷åêáîêñó
  121.         cmp   ax,bx            ;ñòðàâíèòü ðåãèñòðû
  122.         jg   check_box_mouse_end        ;åñëè áîëüøå
  123.  
  124.         bts  dword ch_flags,1  ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà 1.
  125.         jc   @f                ;CF=1 òî ïåðåéòè íà íèæíþþ @@
  126.        
  127.         call check_box_draw_ch        ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ
  128. ;        mov   dword [esp+24],1 ;äàëüíåéøàÿ ïðîâåðêà ÷åê áîêñîâ áåñìûñëåíà, ïî ýòîìó â ñòåê, ãäå ðàñïîëàãàåòñÿ ecx ïîìåñòèòì 0
  129.         jmp  check_box_mouse_end       ;âûéòè
  130. @@:
  131.         btr   word ch_flags,1  ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå.
  132.         call check_box_clear_ch         ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà.
  133. check_box_mouse_end:
  134. popa                                ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
  135. ret  4                              ;âûéòè
  136. }