Subversion Repositories Kolibri OS

Rev

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

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