Subversion Repositories Kolibri OS

Rev

Rev 1214 | 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. ch_struc_size=36
  6. ch_flag_en=10b
  7.  
  8. ch_left  equ [edi]         ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® å
  9. ch_top   equ [edi+2]       ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® ã
  10. ch_text_margin equ [edi+4] ;=4 à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨
  11. ch_size  equ [edi+8]       ;12 à §¬¥à ª¢ ¤à â  祪 ¡®ªá 
  12. ch_color equ [edi+12]      ;梥⠢­ãâਠcheckbox
  13. ch_border_color equ [edi+16] ; or [edi+4] ;梥â à ¬ª¨ checkbox ¥¥ ¬®¦­® § ¤ âì á ¬®áâ®ï⥫쭮
  14. ch_text_color   equ [edi+20] ;[edi+4]  ;梥â ⥪áâ 
  15. ch_text_ptr     equ [edi+24] ;㪠§ â¥«ì ­  ­ ç «® ⥪á⮢®© áâப¨
  16. ch_text_length  equ [edi+28]
  17. ch_flags equ [edi+32]      ;ä« £¨
  18.  
  19. macro check_boxes_set_sys_color start,end,color_table
  20. {
  21. ch_left equ [edi]    ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® å
  22. ch_top equ [edi+2]   ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® ã
  23. ch_text_margin equ [edi+4]      ;=4 à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨
  24. ch_size equ [edi+8]             ;12 à §¬¥à ª¢ ¤à â  祪 ¡®ªá 
  25. ch_color equ [edi+12]           ;梥⠢­ãâਠcheckbox
  26. ch_border_color equ [edi+16] ; or [edi+4] ;梥â à ¬ª¨ checkbox ¥¥ ¬®¦­® § ¤ âì á ¬®áâ®ï⥫쭮
  27. ch_text_color equ   [edi+20];[edi+4]  ;梥â ⥪áâ 
  28. ch_text_ptr equ [edi+24]    ;㪠§ â¥«ì ­  ­ ç «® ⥪á⮢®© áâப¨
  29. ch_text_length equ [edi+28]
  30. ch_flags equ [edi+32]       ;ä« £¨
  31.  
  32.         mov     edi,start
  33.         mov     ecx,((end-start)/ch_struc_size)
  34.         mov     esi,color_table
  35. @@:
  36.         push    dword [esi+32]
  37.         pop     dword ch_text_color
  38.         push    dword [esi+36]
  39.         pop     dword ch_border_color
  40.         add     edi,ch_struc_size
  41.         loop    @b
  42. }
  43. struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags
  44. {        ;áâàãªâãà  ¯ à ¬¥â஢ ¤«ï 祪 ¡®ªá 
  45. ch_flag_en=10b
  46. .left: dw left      ;+0        ;¯®«®¦¥­¨¥ ¯® å
  47. .top: dw top        ;¯®«®¦¥­¨¥ ¯® ã
  48. .ch_text_margin:  dd ch_text_margin ;à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨
  49. .ch_size: dd ch_size ;à §¬¥à ª¢ ¤à â  祪 ¡®ªá , ¤«ï ¯à¨¬¥à  12
  50. .color: dd color    ;梥⠢­ãâਠ祪¡®ªá 
  51. .border_color: dd border_color ;梥â à ¬ª¨
  52. .text_color: dd text_color     ;梥⠭ ¤¯¨á¨
  53. .text: dd text                 ; ¤à¥á ¢ ª®¤¥ ¯à®£à ¬¬ë £¤¥ à á¯®«®¦¥­ ⥪áâ
  54. .ch_text_length: dd ch_text_length ;¤«¨­­  áâப¨ á ᨬ¢®« ¬¨
  55. .flags: dd flags+0   ; ä« £¨        
  56. }
  57.  
  58. macro use_checkbox_draw
  59. {
  60. check_box_draw:
  61.        pusha   ;ñîõðàíèì âñå ðåãèñòðû
  62.        mov     edi,dword [esp+36]
  63.        mov eax,13
  64.        movzx ebx,word ch_left
  65.        shl ebx,16
  66.        add ebx,ch_size
  67.        mov ecx,ch_top
  68.        shl ecx,16
  69.        add ecx,dword ch_size
  70.        mov edx,dword ch_border_color
  71.        mcall ;ðèñóåì ðàìêó
  72.  
  73.        mov edx,dword ch_color
  74.        add ebx,1 shl 16 - 2
  75.        add ecx,1 shl 16 - 2
  76.        mcall ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà
  77.  
  78.        test dword ch_flags,2  ;äîñòàòü çíà÷åíèå áèòà èç ïåðåìåííîé è ïîìåñòèòü â  ôëàã CF
  79.        jz   @f                ;â åñëè CF=1, òî âûïîëíèì ñëåäóþùóþ ïðîöåäóðó èíà÷å ïåðåéòè íà íèæíþþ @@
  80.        call check_box_draw_ch  ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
  81. @@:
  82. ;----------------------------
  83. ;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà
  84. ;----------------------------
  85.         movzx ebx,word ch_left        ;çàãðóçèòü çíà÷åíèå õ äëÿ ÷åê áîêñà
  86.         add   ebx,dword ch_size
  87.         add   ebx,dword ch_text_margin;äîáàâèòü ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
  88.         shl   ebx,16                ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  89.         mov   bx,word ch_top        ;çàãðóçèì çíà÷åíèå ïî y
  90.         add   ebx,ch_size
  91.         mov   ecx,dword ch_text_color        ;çàãðóçèì öâåò íàäïèñè + flags
  92.         sub   ebx,7        ;äîáàâèì çíà÷åíèå äëèíû ñòîðîíû -9+2
  93.        
  94.         mov   edx,dword ch_text_ptr                ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
  95.         mov   esi,dword ch_text_length
  96.         ;âíåñåì â eax çíà÷åíèå âûâîäà íàäïèñè íà êàíâó
  97.         mov   eax,4
  98.         mcall                  ;Âûâîä
  99. popa                              ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
  100. ret 4                             ;âûéäåì èç ïðîöåäóðû
  101.  
  102. check_box_clear_ch:                        ;î÷èñòêà ÷åê áîêñà
  103.         mov   edx,dword ch_color   ;öâåò âíóòðè ÷åê áîêñà
  104.         jmp   @f             ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@
  105. check_box_draw_ch:            ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
  106.         mov   edx,dword ch_border_color        ;çàãðóçèòü öâåò
  107. @@:
  108.         movzx ebx,word ch_left  ;çàãðóçèòü êîîðäèíàòó ïî õ
  109.         mov   eax,dword ch_size
  110.         mov   bp,ax
  111.         shr   eax,2
  112.         push  ax
  113.  
  114.         push  ax
  115.         add   ebx,eax          
  116.         shl   ebx,16            ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  117.         pop   ax
  118.         lea   eax,[eax*2]
  119.         sub   bp,ax             ;ñîõðàíèì ðåãèñòð bx â ðåãèñòðå óêàçàòåëÿ áàçû
  120.         mov   bx,bp
  121.  
  122.         movzx ecx,word ch_top ;çàãðóçèòü êîîðäèíàòó ïî ó
  123.         pop   ax
  124.         add   cx,ax        
  125.         shl   ecx,16          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  126.         mov   cx,bp           ;çàãðóçèì çíà÷åíèÿ ðåãèñòðà óêàçàòåëÿ áàçû â cx
  127.         mov   eax,13          ;â eax - çíà÷åíèÿ ôóíêöèè äëÿ âûâîäà ïîëîñû ò.å. ïî ñóòè ïðÿìîóãîëüíèêà, êîòîðûé îòîáðàæàåò âêëþ÷åííûé êîìïîíåíò ÷åê áîêñ
  128.         mcall            ;âûâîä
  129. ret                                ;âûéòè èç ïðîöåäóðû
  130. }
  131.  
  132.  
  133. macro use_checkbox_mouse
  134. {
  135.  
  136. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  137. ;Îáðàáîò÷èê mouse
  138. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  139. check_box_mouse:      ;îáðàáîòêà ìûøè
  140. pusha
  141.         mov     edi,dword [esp+36]
  142.         mov     eax,37           ;áóäåì ÷òî òî äåëàòü åñëè ó íàñ ÷òî - íèòü íàæàòî
  143.         mov     ebx,2            ;âíåñòè â ðåãèñòð çíà÷åíèå 2
  144.         mcall             ;ïðîâåðêà íå íàæàë ëè ïîëüçîâàòåëü êíîïêó ìûøêè
  145.         test    eax,eax   ;ïðîâåðêà åñëè ó íàñ â eax=0, òî óñòàíîâèì ôëàã è âûéäåì
  146.         jnz     @f         ;ïåðåéòè íà íèæíþþ ìåòêó @@
  147.         btr     dword ch_flags,2  ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå.
  148.         jmp     check_box_mouse_end
  149.        
  150. @@:
  151.         bts  dword ch_flags,2   ;ïðîâåðêà ôëàãà ò.å. ïåðåíîñ â cf çíà÷åíèå áèòà è óñòàíîâêà áèòà â ñîñòîÿíèå âêëþ÷åíî
  152.         jc   check_box_mouse_end         ;åñëè CF=1 òî ïåðåéòè  â êîíåö ò.å. ýòî âûõîä
  153.         mov  esi,dword ch_text_length ;çàãðóçèòü êîë-âî ñèìâîëîâ â òåêñòîâîé ñòðîêå
  154.         ;Óìíîæåíèå íà 6 Áûñòðîå óìíîæåíèå ìîæíî âîñïîëüçîâàòüñÿ ëþáûì ìç ìåòîäîâ, íî íà ñòàðûõ Ïðîöåññîðàõ (386,486,P1)áûñòðåå áóäåò ñ èíñòðóêöèåé Lea
  155.         lea esi,[eax*3]  
  156.         shl esi,1
  157. ;        imul esi,6             ; èëè ìîæíî è òàê óìíîæèòü íà 6
  158.         add  esi,dword ch_text_margin ;äîáàâèòü 3 - ðàññòîÿíèå îò ÷åê áîêñà äî íàäïèñè
  159.  
  160.         mov  eax,37             ;ïîëó÷èì êîîðäèíàòû ìûøêè
  161.         mov  ebx,1              ;äîáàâèòü 1
  162.         mcall               ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà
  163.        
  164.         movzx ebx,word ch_top  ;çàãðóçèòü â bx çíà÷åíèå êîîðäèíàòû ó
  165.         cmp   ax,bx              ;ñðàâíèòü ñ ñ êîîðäèíàòîé êóðñîðà
  166.         jl   check_box_mouse_end          ;SF <> OF åñëè ìåíüøå
  167.         add   ebx,dword ch_size        ;äîáàâèòü ðàçìåð
  168.         cmp   ax,bx              ;ñðàâíèòü
  169.         jg   check_box_mouse_end          ;ZF = 0 è SF = OF åñëè áîëüøå
  170.              
  171.         shr   eax,16              ;ðàçäåëèì íà 65536 èëè ïðîñòî ñäâèíåì áèòû íà 16 çíà÷åíèé
  172.         movzx ebx,word ch_left  ;ïðîèçâåäåì àíàëîãè÷íîå ñðàâíåíèå
  173.         cmp   ax,bx            ;ñðàâíèòü ðåãèñòðû
  174.         jl   check_box_mouse_end        ;åñëè ìåíüøå
  175.         add   ebx,dword ch_size      ;äîáàâèòü äëèíó ñòîðîíû ïðÿìîóãîëüíèêà
  176.         add   ebx,esi          ;Ó÷åñòü â çíà÷åíèè ïî õ åùå è äëèíó íàäïèñè ê ÷åêáîêñó
  177.         cmp   ax,bx            ;ñòðàâíèòü ðåãèñòðû
  178.         jg   check_box_mouse_end        ;åñëè áîëüøå
  179.  
  180.         bts  dword ch_flags,1  ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà 1.
  181.         jc   @f                ;CF=1 òî ïåðåéòè íà íèæíþþ @@
  182.        
  183.         call check_box_draw_ch        ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ
  184. ;        mov   dword [esp+24],1 ;äàëüíåéøàÿ ïðîâåðêà ÷åê áîêñîâ áåñìûñëåíà, ïî ýòîìó â ñòåê, ãäå ðàñïîëàãàåòñÿ ecx ïîìåñòèòì 0
  185.         jmp  check_box_mouse_end       ;âûéòè
  186. @@:
  187.         btr   word ch_flags,1  ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå.
  188.         call check_box_clear_ch         ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà.
  189. check_box_mouse_end:
  190. popa                                ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
  191. ret  4                              ;âûéòè
  192. }