Subversion Repositories Kolibri OS

Rev

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

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