Subversion Repositories Kolibri OS

Rev

Rev 1101 | Blame | Last modification | View Log | Download | RSS feed

  1. ;ôàéë ñîçäàí 13.02.2009 <Lrz> Íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
  2. ;Ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
  3. ;Optionbox
  4.  
  5. macro use_optionbox_driver      ;ìàêðîñû êîòîðûå óïðàâëÿþò ðàáîòîé áîêñà )
  6. {
  7. option_box_draw:
  8.         pusha
  9.  
  10.         mov     eax,dword [esp+36]
  11. @@:     mov     edi,dword [eax]
  12.         test    edi,edi
  13.         je      option_check
  14.         call    option_box_draw_box
  15.         add     eax,4
  16.         jmp    @b
  17.  
  18. option_check:
  19.         mov     eax,dword [esp+36]
  20. @@:     mov     edi,dword [eax]
  21.         test    edi,edi
  22.         je      @f
  23.        
  24.         mov     ebx,dword [edi]
  25.         mov     ebx,dword [ebx]
  26.         cmp     edi,ebx
  27.         jne     .clear_op
  28.        
  29.         pusha
  30.         call    option_box_draw_op
  31.         popa
  32.         add     eax,4
  33.         jmp     @b
  34.  
  35. .clear_op:
  36.         pusha
  37.         call    option_box_clear_op
  38.         popa
  39.         add     eax,4
  40.         jmp     @b
  41.  
  42.  
  43. @@:     popa
  44.         ret 4
  45.         ; exit âîîáùå :)
  46.  
  47.  
  48. option_box_mouse:
  49.         pusha
  50.         mcall   37,2
  51.         test    eax,eax
  52.         jnz     @f
  53.         popa
  54.         ret 4
  55. @@:
  56.         mov     eax,dword [esp+36]
  57. @@:     mov     edi,dword [eax]
  58.         test    edi,edi
  59.         je      option_check
  60.         call    option_box_mouse_op
  61.         add     eax,4
  62.         jmp    @b
  63.  
  64. }
  65. macro use_optionbox_draw
  66. {
  67. option_box_draw_box:
  68. option_group equ [edi]
  69. op_left equ [edi+4]    ;êîîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî õ
  70. op_top equ [edi+6]     ;êîîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî ó
  71. op_text_margin equ [edi+8]      ;=4 ðàññòîÿíèå îò ïðÿìîóãîëüíèêà ÷åê áîêñà äî íàäïèñè
  72. op_size equ [edi+12]             ;12 ðàçìåð êâàäðàòà ÷åê áîêñà
  73. op_color equ [edi+16]
  74. op_border_color equ [edi+20] ; or [edi+4] ;öâåò ðàìêè checkbox åå ìîæíî çàäàòü ñàìîñòîÿòåëüíî
  75. op_text_color equ   [edi+24];[edi+4]  ;öâåò òåêñòà
  76. op_text_ptr equ [edi+28]    ;óêàçàòåëü íà íà÷àëî òåêñòîâîé ñòðîêè
  77. op_text_length equ [edi+32]
  78. op_flags equ [edi+36]       ;ôëàãè
  79.  
  80.         pusha   ;ñîõðàíèì âñå ðåãèñòðû
  81.  
  82.         movzx ebx,word op_left
  83.         shl ebx,16
  84.         add ebx,dword op_size
  85.         movzx ecx,word op_top
  86.         shl ecx,16
  87.         add ecx,dword op_size
  88.         mov edx,dword op_border_color
  89.         mov eax,13
  90.         mcall ;ðèñóåì ðàìêó
  91.  
  92.         mov edx,dword op_color
  93.         add ebx,1 shl 16 - 2
  94.         add ecx,1 shl 16 - 2
  95.         mcall ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà
  96.  
  97. ;        mov     eax,dword option_group
  98. ;        mov     dword eax,[eax]
  99. ;        cmp     eax,edi
  100. ;        jne     @f
  101. ;        call    option_box_draw_op  ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
  102.  
  103.  
  104. ;----------------------------
  105. ;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà
  106. ;----------------------------
  107. @@:     movzx ebx,word op_left        ;çàãðóçèòü çíà÷åíèå õ äëÿ ÷åê áîêñà
  108.         add   ebx,dword op_size
  109.         add   ebx,dword op_text_margin;äîáàâèòü ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
  110.         shl   ebx,16                ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  111.         mov   bx,word op_top        ;çàãðóçèì çíà÷åíèå ïî y
  112.         add   ebx,op_size
  113.         mov   ecx,dword op_text_color        ;çàãðóçèì öâåò íàäïèñè + flags
  114.         sub   ebx,7        ;äîáàâèì çíà÷åíèå äëèíû ñòîðîíû -9+2
  115.        
  116.         mov   edx,dword op_text_ptr                ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
  117.         mov   esi,dword op_text_length
  118.         ;âíåñåì â eax çíà÷åíèå âûâîäà íàäïèñè íà êàíâó
  119.         mov   eax,4
  120.         mcall                  ;Âûâîä
  121. popa                           ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
  122. ret                            ;âûéäåì èç ïðîöåäóðû
  123.  
  124. option_box_clear_op:                      ;î÷èñòêà ÷åê áîêñà
  125.         mov     edx,dword op_color    ;öâåò âíóòðè ÷åê áîêñà
  126.         jmp     @f              ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@
  127.  
  128.  
  129. option_box_draw_op:            ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
  130.         mov   edx,dword op_border_color        ;çàãðóçèòü öâåò
  131. @@:
  132.         movzx ebx,word op_left  ;çàãðóçèòü êîîðäèíàòó ïî õ
  133.         mov   eax,dword op_size
  134.         mov   bp,ax
  135.         shr   eax,2
  136.         push  ax
  137.  
  138.         push  ax
  139.         add   ebx,eax          
  140.         shl   ebx,16            ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  141.         pop   ax
  142.         lea   eax,[eax*2]
  143.         sub   bp,ax             ;ñîõðàíèì ðåãèñòð bx â ðåãèñòðå óêàçàòåëÿ áàçû
  144.         mov   bx,bp
  145.  
  146.         movzx ecx,word op_top ;çàãðóçèòü êîîðäèíàòó ïî ó
  147.         pop   ax
  148.         add   cx,ax        
  149.         shl   ecx,16          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  150.         mov   cx,bp           ;çàãðóçèì çíà÷åíèÿ ðåãèñòðà óêàçàòåëÿ áàçû â cx
  151.         mov   eax,13          ;â eax - çíà÷åíèÿ ôóíêöèè äëÿ âûâîäà ïîëîñû ò.å. ïî ñóòè ïðÿìîóãîëüíèêà, êîòîðûé îòîáðàæàåò âêëþ÷åííûé êîìïîíåíò ÷åê áîêñ
  152.         mcall            ;âûâîä
  153. ret                                ;âûéòè èç ïðîöåäóðû
  154. }
  155.  
  156.  
  157. macro use_optionbox_mouse
  158. {
  159. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  160. ;Îáðàáîò÷èê mouse
  161. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  162. option_box_mouse_op:                 ;îáðàáîòêà ìûøè
  163. pusha
  164.         mov     esi,dword op_text_length ;çàãðóçèòü êîë-âî ñèìâîëîâ â òåêñòîâîé ñòðîêå
  165.         ;Óìíîæåíèå íà 6 Áûñòðîå óìíîæåíèå ìîæíî âîñïîëüçîâàòüñÿ ëþáûì ìç ìåòîäîâ, íî íà ñòàðûõ Ïðîöåññîðàõ (386,486,P1)áûñòðåå áóäåò ñ èíñòðóêöèåé Lea
  166. ;        lea    esi,[eax*2+eax]
  167. ;        shl    eax,1
  168.         imul    esi,6               ; èëè ìîæíî è òàê óìíîæèòü íà 6
  169.         xor     ebx,ebx
  170.         add     esi,dword op_text_margin   ;äîáàâèòü 3 - ðàññòîÿíèå îò ÷åê áîêñà äî íàäïèñè
  171.        
  172.         mov     eax,37          ;ïîëó÷èì êîîðäèíàòû ìûøêè
  173.         inc     ebx             ;äîáàâèòü 1
  174.         mcall                ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà
  175.  
  176.         movzx   ebx,word op_top           ;çàãðóçèòü â bx çíà÷åíèå êîîðäèíàòû ó
  177.         cmp     ax,bx               ;ñðàâíèòü ñ ñ êîîðäèíàòîé êóðñîðà
  178.         jl      option_box_mouse_end          ;SF <> OF åñëè ìåíüøå
  179.         add     ebx,dword op_size          ;äîáàâèòü ðàçìåð
  180.         cmp     ax,bx               ;ñðàâíèòü
  181.         jg      option_box_mouse_end          ;ZF = 0 è SF = OF åñëè áîëüøå
  182.        
  183.         shr     eax,16              ;ðàçäåëèì íà 65536 èëè ïðîñòî ñäâèíåì áèòû íà 16 çíà÷åíèé
  184.         movzx   ebx,word op_left          ;ïðîèçâåäåì àíàëîãè÷íîå ñðàâíåíèå
  185.         cmp     ax,bx                ;ñðàâíèòü ðåãèñòðû
  186.         jl      option_box_mouse_end           ;åñëè ìåíüøå
  187.         add     ebx,dword op_size          ;äîáàâèòü äëèíó ñòîðîíû ïðÿìîóãîëüíèêà
  188.         add     ebx,esi              ;Ó÷åñòü â çíà÷åíèè ïî õ åùå è äëèíó íàäïèñè ê ÷åêáîêñó
  189.         cmp     ax,bx                ;ñòðàâíèòü ðåãèñòðû
  190.         jg      option_box_mouse_end           ;åñëè áîëüøå
  191.         mov     eax,dword option_group
  192.         mov     [eax],edi
  193.  
  194. option_box_mouse_end:
  195. popa                              ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
  196. ret                               ;âûéòè
  197.  
  198. }