Subversion Repositories Kolibri OS

Rev

Rev 1652 | Go to most recent revision | 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_checkbox
  8. {
  9. init_checkbox:
  10. ;ïîäñ÷èòàåì êîë-âî ñèìâîëîâ â äëèííå âûâîäèìîé ñòðîêè.
  11.         pushad
  12.         mov     ebp,dword [esp+36]      ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
  13.         mov     ebx,dword ch_text_margin        ;eax=0
  14.         mov     esi,dword ch_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 ch_sz_str,ebx     ;çàïèøèì äëèííó ñòðîêè ñ ó÷åòîì îòñòóïà îò êâàäðàòèêà
  26.         popad
  27.         ret 4
  28. }
  29.  
  30. macro use_checkbox_draw
  31. {
  32. check_box_draw:
  33.         pushad   ;ñîõðàíèì âñå ðåãèñòðû
  34.         mov     ebp,dword [esp+36]      ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
  35.         mcall   13,ch_left_s,ch_top_s,ch_border_color           ;ðèñóåì ðàìêó ÷åê áîêñà, ôàêòè÷åñêè ðèñóåì ïðÿìîóãîëüíèê è çàêðàøèâàåì ôîí âíóòðè öâåòîì ðàìêè áîêñà
  36.  
  37.         mov     edx,dword ch_color      ;çàãðóæàåì öâåò ôîíà
  38.         add     ebx,1 shl 16 - 2
  39.         add     ecx,1 shl 16 - 2
  40.         mcall   ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà ôîíîì
  41.  
  42.         test dword ch_flags,2  ;äîñòàòü çíà÷åíèå áèòà èç ïåðåìåííîé è ïîìåñòèòü â  ôëàã CF
  43.         jz   @f                ;â åñëè CF=1, òî âûïîëíèì ñëåäóþùóþ ïðîöåäóðó èíà÷å ïåðåéòè íà íèæíþþ @@
  44.         call check_box_draw_ch ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
  45. @@:
  46. ;----------------------------
  47. ;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà
  48. ;----------------------------
  49. ;        mov    ebx,dword ch_left_s             ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà)  äëÿ ÷åê áîêñà
  50. ;        add    ebx,dword ch_text_margin        ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
  51. ;        shl    ebx,16                          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  52. ;        add    ebx,dword ch_left_s             ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ
  53.  
  54. ;        mov    eax,word ch_top_s               ;çàãðóçèì çíà÷åíèå ïî (y shl 16 + äëèííà) äëÿ ÷åê áîêñà
  55. ;        shr    eax,16                          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  56. ;        add    eax,dword ch_top_s              ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Y
  57.        
  58. ; Îïòèìèçàöèÿ äëÿ ÖÏ
  59.         mov     ebx,dword ch_left_s             ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà)  äëÿ ÷åê áîêñà
  60.         mov     eax,dword ch_top_s              ;çàãðóçèì çíà÷åíèå ïî (y shl 16 + äëèííà) äëÿ ÷åê áîêñà
  61.         add     ebx,dword ch_text_margin        ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
  62.         shr     eax,16                          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  63.         shl     ebx,16                          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  64.         add     eax,dword ch_top_s              ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Y
  65.         add     ebx,dword ch_left_s             ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ
  66.         sub     ax,7                            ;âíåñåì ñìåùåíèå äëÿ y
  67.         mov     bx,ax
  68.                                                 ;ebx õ shl 16 +y êîîðäèíàòû âûâîäà ñòðî÷êè
  69.  
  70.         mov     ecx,dword ch_text_color         ;çàãðóçèì öâåò íàäïèñè + flags
  71.         mov     edx,dword ch_text_ptr           ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
  72.         mcall   4                               ;Âûâîä
  73.         popad                                   ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
  74.         ret 4                                   ;âûéäåì èç ïðîöåäóðû è óäàëèì èç ñòåêà óêàçàòåëü íà ñòðóêòóðó (4 áàéòà)
  75.  
  76. check_box_clear_ch:                             ;î÷èñòêà ÷åê áîêñà
  77.         mov     edx,dword ch_color              ;öâåò âíóòðè ÷åê áîêñà
  78.         jmp     @f                              ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@
  79. check_box_draw_ch:                              ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
  80.         mov     edx,dword ch_border_color       ;çàãðóçèòü öâåò
  81. @@:
  82. ;Îòîáðàçèòü âêëþ÷åíûé checkbox
  83.         mov     ebx,dword ch_left_s             ;çàãðóæàåì õ shl 16 + äëèííà ïî Õ
  84.         mov     ecx,dword ch_top_s              ;çàãðóæàåì Y shl 16 + äëèííà ïî Y
  85.         add     ebx,2 shl 16 - 4                ;ïîñëå ýòèõ èçìåíåíèé (X+2) shl 16 +äëèííà ïî (Õ-2)
  86.         add     ecx,2 shl 16 - 4                ;ïîñëå ýòèõ èçìåíåíèé (Y+2) shl 16 +äëèííà ïî (Y-2)
  87.         mcall   13                              ;îòîáðàçèòü êâàäðàò âíóòðè checkbox
  88.         ret
  89. }
  90.  
  91.  
  92. macro use_checkbox_mouse
  93. {
  94.  
  95. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  96. ;Îáðàáîò÷èê mouse
  97. ;Ïðè ïîïàäàíèè ìûøêè + íàæàòà êëàâèøà â îáëàñòü checkbox ñîñòîÿíèå áîêñà äîëæíî ìåíÿòñÿ àêòèâíûé - íå àêòèâíûé.
  98. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  99. check_box_mouse:      ;îáðàáîòêà ìûøè
  100. pushad
  101.         mov     ebp,dword [esp+36]      ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
  102.         mcall   37,2                    ;ïðîâåðÿåì ñîñòîÿíèå êëàâèø ìûøêè. Áûëî ëè ñîáûòèå íàæàòàÿ êëàâèøà íà ìûøêå.
  103.         test    eax,eax                 ;ïðîâåðêà åñëè ó íàñ â eax=0, âûéäåì
  104.         jz      .check_box_mouse_end    ;îáðàáîòêà çàêîí÷èëàñü
  105. ; Äà ñîáûòèå: íàæàòèå êëàâèøè ìûøêè ïðîèçîøëî.        
  106. @@:
  107.         mcall   37,1                    ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà
  108.                                         ;íà âûõîäå â eax x shl 16 + y
  109. ;ñðàâíåíèå âåðõíåé òî÷êè ïî Y
  110.         mov     ecx,dword ch_top_s      ;y shl 16 +äëèííà ïî y
  111.         mov     ebx,ecx
  112.         shr     ebx,16                  ;bx = êîîðäèíàòà ïî y
  113.         cmp     ax,bx
  114.         jb      .check_box_mouse_end    ;óêàçàòåëü ìûøêè ìåíüøå íà÷àëüíîé êîîðäèíàòû ïî y ÷åì êîîðäèíàòà ïî Y ó áîêñà
  115. ;ñðàâíåíèå íèæíåé òî÷êè ïî Y
  116.         add     cx,bx                   ;ñëîæèì äëèííó ïî y è êîîðäèíàòó âåðõíåé òî÷êè ïî y ïîëè÷èì êîîðäèíàòó íèæíåé òî÷êè ïî Y
  117.         cmp     ax,cx
  118.         ja      .check_box_mouse_end    ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî y ÷åì êîîðäèíàòà ïî Y ó áîêñà
  119. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  120.         shr     eax,16                  ;ñìåñòèì êîîðäèíàòó ïî Õ â íèæíóþ ÷àñòü ðåãèñòðà ò.å. â ax
  121. ;ñðàâíåíèå ïî íà÷àëüíîé òî÷êå Õ
  122.         mov     ecx,dword ch_left_s     ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà)  äëÿ ÷åê áîêñà
  123.         mov     ebx,ecx
  124.         shr     ebx,16                  ;bx = êîîðäèíàòà ïî X
  125.         cmp     ax,bx
  126.         jb      .check_box_mouse_end    ;óêàçàòåëü ìûøêè ìåíüøå íà÷àëüíîé êîîðäèíàòû ïî X ÷åì êîîðäèíàòà ïî X ó áîêñà
  127. ;ñðàâíåíèå êîíå÷íîé òî÷êè ïî X
  128.         add     bx,cx                   ;ñëîæèì äëèííó ïî x è êîîðäèíàòó òî÷êè ïî õ ïîëó÷èì êîîðäèíàòó êîíå÷íîé òî÷êè ïî Õ
  129.         add     bx,word ch_sz_str       ;äîáàâèì äëèííó ñòðîêè òåêñòà ñ îòñòóïîì ïðåäâàðòèåëüíî çàïèñàâ èõ â ìîìåíò èíèöèàëèçàöèè
  130.         cmp     ax,bx
  131.         ja      .check_box_mouse_end    ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî õ ÷åì êîîðäèíàòà ïî Õ ó áîêñà
  132. ;åñëè âñå ïðîâåðêè áûëè óñïåøíî ïðîéäåíû ìû îáÿçàíû ïîìåíÿòü ñîñòîÿíèå áîêñà
  133.         btc     dword   ch_flags,2      ;ïåðåíîñ 2-ãî áèòà â cf è èíâåðñèÿ åãî
  134.         jc      .enable_box             ;åñëè CF=1 òî îòîáðàçèì âêëþ÷åííûé áîêñ è âûéäåì
  135.         push    dword .check_box_mouse_end      ;ôîêóñ -ïîêóñ, âåðíåìñÿ ïîñëå âûçîâà check_box_clear_ch íà ìåòêó check_box_mouse_end
  136.         jmp     check_box_clear_ch      ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà.    
  137.  
  138. .enable_box:
  139.         call    check_box_draw_ch       ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ
  140. .check_box_mouse_end:
  141. popad                                   ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
  142.         ret  4                          ;âûéòè è âîññòàíîâèì ñòåê
  143. }