Subversion Repositories Kolibri OS

Rev

Rev 1715 | 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. ;Èíèöèàëèçàöèÿ checkbox
  7. macro _init_checkbox2
  8. {
  9. init_checkbox2:
  10. ;ïîäñ÷èòàåì êîë-âî ñèìâîëîâ â äëèííå âûâîäèìîé ñòðîêè.
  11.         pushad
  12.         mov     ebp,dword [esp+36]      ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
  13.         mov     ebx,dword 2ch_text_margin       ;eax=0
  14.         mov     esi,dword 2ch_text_ptr   ;óêàçàòåëü íà ñòðî÷êó
  15.         lodsb                           ;â al ïåðâûé ñèìâîë èç ñòðîêè
  16.         test    al,al
  17.         jz      .ex_loop
  18. @@:    
  19.         add     ebx,6                   ;øèðèíà ñèìâîëà
  20.         lodsb
  21.         test    al,al
  22.         jnz     @b
  23. .ex_loop:
  24.  
  25.         mov     dword 2ch_sz_str,ebx     ;çàïèøåì äëèííó ñòðîêè ñ ó÷åòîì îòñòóïà îò êâàäðàòèêà
  26.         or      dword 2ch_text_color,0x80000000 ;äîáàâëÿåì áèò äëÿ âûâîäà ASCIIZ-ñòðîêè
  27.                 ;íà ñëó÷àé åñëè ïîëüçîâàòåëü çàáûë åãî ñàìîñòîÿòåëüíî ïîñòàâèòü â ñòðóêòóðå
  28.         popad
  29.         ret 4
  30. }
  31.  
  32. macro use_checkbox_draw2
  33. {
  34. check_box_draw2:
  35.         pushad   ;ñîõðàíèì âñå ðåãèñòðû
  36.         mov     ebp,dword [esp+36]      ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
  37.         mcall   13,2ch_left_s,2ch_top_s,2ch_border_color                ;ðèñóåì ðàìêó ÷åê áîêñà, ôàêòè÷åñêè ðèñóåì ïðÿìîóãîëüíèê è çàêðàøèâàåì ôîí âíóòðè öâåòîì ðàìêè áîêñà
  38.  
  39.         mov     edx,dword 2ch_color     ;çàãðóæàåì öâåò ôîíà
  40.         add     ebx,1 shl 16 - 2
  41.         add     ecx,1 shl 16 - 2
  42.         mcall   ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà ôîíîì
  43.  
  44.         test dword 2ch_flags,2  ;äîñòàòü çíà÷åíèå áèòà èç ïåðåìåííîé è ïîìåñòèòü â  ôëàã CF
  45.         jz   @f                ;â åñëè CF=1, òî âûïîëíèì ñëåäóþùóþ ïðîöåäóðó èíà÷å ïåðåéòè íà íèæíþþ @@
  46.         call check_box_draw_ch2 ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
  47. @@:
  48. ;----------------------------
  49. ;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà
  50. ;----------------------------
  51. ;        mov    ebx,dword ch_left_s             ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà)  äëÿ ÷åê áîêñà
  52. ;        add    ebx,dword ch_text_margin        ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
  53. ;        shl    ebx,16                          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  54. ;        add    ebx,dword ch_left_s             ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ
  55.  
  56. ;        mov    eax,word ch_top_s               ;çàãðóçèì çíà÷åíèå ïî (y shl 16 + äëèííà) äëÿ ÷åê áîêñà
  57. ;        shr    eax,16                          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  58. ;        add    eax,dword ch_top_s              ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Y
  59.        
  60. ; Îïòèìèçàöèÿ äëÿ ÖÏ
  61.         mov     ebx,dword 2ch_left_s            ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà)  äëÿ ÷åê áîêñà
  62.         mov     eax,dword 2ch_top_s             ;çàãðóçèì çíà÷åíèå ïî (y shl 16 + äëèííà) äëÿ ÷åê áîêñà
  63.         mov     ecx,eax
  64.         add     ebx,dword 2ch_text_margin       ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
  65.         shr     eax,16                          ;ñäâèíåì íà 16 ðàçðÿäîâ â ïðàâî (ðàçäåëèì íà 65536) â ax âåðõíàÿ òî÷êà
  66.         shl     ebx,16                          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  67.  
  68.         sub     ecx,8                           ;êîððåòèðîâêà ó÷èòûâàåì âûñîòó øðèôòà
  69.  
  70.         test    dword 2ch_flags,ch_flag_bottom  ;ïðîâåðèì, íóæíî ëè âûâîäèòü ââåðõó íàäïèñü
  71.         jnz     .bottom
  72.  
  73.         test    dword 2ch_flags,ch_flag_middle  ;ïðîâåðèì, íóæíî ëè âûâîäèòü â öåíòð íàäïèñü
  74.         jz      .top                            ;îñòàëñÿ òîëüêî top
  75.        
  76.         shr     cx,1                            ;ðàçäåëèì íà 2
  77. .bottom:
  78.         add     ax,cx
  79. .top:
  80.         add     ebx,dword 2ch_left_s             ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ
  81.         mov     bx,ax
  82.                                                 ;ebx õ shl 16 +y êîîðäèíàòû âûâîäà ñòðî÷êè
  83.  
  84.         mov     ecx,dword 2ch_text_color                ;çàãðóçèì öâåò íàäïèñè + flags
  85.         mov     edx,dword 2ch_text_ptr          ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
  86.         mcall   4                               ;Âûâîä
  87.         popad                                   ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
  88.         ret 4                                   ;âûéäåì èç ïðîöåäóðû è óäàëèì èç ñòåêà óêàçàòåëü íà ñòðóêòóðó (4 áàéòà)
  89.  
  90. check_box_clear_ch2:                            ;î÷èñòêà ÷åê áîêñà
  91.         mov     edx,dword 2ch_color             ;öâåò âíóòðè ÷åê áîêñà
  92.         jmp     @f                              ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@
  93. check_box_draw_ch2:                             ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
  94.         mov     edx,dword 2ch_border_color      ;çàãðóçèòü öâåò
  95. @@:
  96. ;Îòîáðàçèòü âêëþ÷åíûé checkbox
  97.         mov     ebx,dword 2ch_left_s            ;çàãðóæàåì õ shl 16 + äëèííà ïî Õ
  98.         mov     ecx,dword 2ch_top_s             ;çàãðóæàåì Y shl 16 + äëèííà ïî Y
  99.         add     ebx,2 shl 16 - 4                ;ïîñëå ýòèõ èçìåíåíèé (X+2) shl 16 +äëèííà ïî (Õ-2)
  100.         add     ecx,2 shl 16 - 4                ;ïîñëå ýòèõ èçìåíåíèé (Y+2) shl 16 +äëèííà ïî (Y-2)
  101.         mcall   13                              ;îòîáðàçèòü êâàäðàò âíóòðè checkbox
  102.         ret
  103. }
  104.  
  105.  
  106. macro use_checkbox_mouse2
  107. {
  108.  
  109. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  110. ;Îáðàáîò÷èê mouse
  111. ;Ïðè ïîïàäàíèè ìûøêè + íàæàòà êëàâèøà â îáëàñòü checkbox ñîñòîÿíèå áîêñà äîëæíî ìåíÿòñÿ àêòèâíûé - íå àêòèâíûé.
  112. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  113. check_box_mouse2:      ;îáðàáîòêà ìûøè
  114. pushad
  115.         mov     ebp,dword [esp+36]      ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
  116.         mcall   37,2                    ;ïðîâåðÿåì ñîñòîÿíèå êëàâèø ìûøêè. Áûëî ëè ñîáûòèå íàæàòàÿ êëàâèøà íà ìûøêå.
  117.         test    eax,eax                 ;ïðîâåðêà åñëè ó íàñ â eax=0, âûéäåì
  118.         jz      .check_box_mouse_end    ;îáðàáîòêà çàêîí÷èëàñü
  119. ; Äà ñîáûòèå: íàæàòèå êëàâèøè ìûøêè ïðîèçîøëî.        
  120. @@:
  121.         mcall   37,1                    ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà
  122.                                         ;íà âûõîäå â eax x shl 16 + y
  123. ;ñðàâíåíèå âåðõíåé òî÷êè ïî Y
  124.         mov     ecx,dword 2ch_top_s     ;y shl 16 +äëèííà ïî y
  125.         mov     ebx,ecx
  126.         shr     ebx,16                  ;bx = êîîðäèíàòà ïî y
  127.         cmp     ax,bx
  128.         jb      .check_box_mouse_end    ;óêàçàòåëü ìûøêè ìåíüøå íà÷àëüíîé êîîðäèíàòû ïî y ÷åì êîîðäèíàòà ïî Y ó áîêñà
  129. ;ñðàâíåíèå íèæíåé òî÷êè ïî Y
  130.         add     cx,bx                   ;ñëîæèì äëèííó ïî y è êîîðäèíàòó âåðõíåé òî÷êè ïî y ïîëè÷èì êîîðäèíàòó íèæíåé òî÷êè ïî Y
  131.         cmp     ax,cx
  132.         ja      .check_box_mouse_end    ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî y ÷åì êîîðäèíàòà ïî Y ó áîêñà
  133. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  134.         shr     eax,16                  ;ñìåñòèì êîîðäèíàòó ïî Õ â íèæíóþ ÷àñòü ðåãèñòðà ò.å. â ax
  135. ;ñðàâíåíèå ïî íà÷àëüíîé òî÷êå Õ
  136.         mov     ecx,dword 2ch_left_s    ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà)  äëÿ ÷åê áîêñà
  137.         mov     ebx,ecx
  138.         shr     ebx,16                  ;bx = êîîðäèíàòà ïî X
  139.         cmp     ax,bx
  140.         jb      .check_box_mouse_end    ;óêàçàòåëü ìûøêè ìåíüøå íà÷àëüíîé êîîðäèíàòû ïî X ÷åì êîîðäèíàòà ïî X ó áîêñà
  141. ;ñðàâíåíèå êîíå÷íîé òî÷êè ïî X
  142.         add     bx,cx                   ;ñëîæèì äëèííó ïî x è êîîðäèíàòó òî÷êè ïî õ ïîëó÷èì êîîðäèíàòó êîíå÷íîé òî÷êè ïî Õ
  143.         add     bx,word 2ch_sz_str      ;äîáàâèì äëèííó ñòðîêè òåêñòà ñ îòñòóïîì ïðåäâàðòèåëüíî çàïèñàâ èõ â ìîìåíò èíèöèàëèçàöèè
  144.         cmp     ax,bx
  145.         ja      .check_box_mouse_end    ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî õ ÷åì êîîðäèíàòà ïî Õ ó áîêñà
  146. ;åñëè âñå ïðîâåðêè áûëè óñïåøíî ïðîéäåíû ìû îáÿçàíû ïîìåíÿòü ñîñòîÿíèå áîêñà
  147.         btc     dword   2ch_flags,1     ;ïåðåíîñ 2-ãî áèòà â cf è èíâåðñèÿ åãî
  148.         jnc     .enable_box             ;åñëè CF=1 òî îòîáðàçèì âêëþ÷åííûé áîêñ è âûéäåì
  149.         push    dword .check_box_mouse_end      ;ôîêóñ -ïîêóñ, âåðíåìñÿ ïîñëå âûçîâà check_box_clear_ch íà ìåòêó check_box_mouse_end
  150.         jmp     check_box_clear_ch2     ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà.    
  151.  
  152. .enable_box:
  153.         call    check_box_draw_ch2      ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ
  154. .check_box_mouse_end:
  155. popad                                   ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
  156.         ret  4                          ;âûéòè è âîññòàíîâèì ñòåê
  157. }