Subversion Repositories Kolibri OS

Rev

Rev 1657 | 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.         mov     ecx,eax
  62.         add     ebx,dword ch_text_margin        ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
  63.         shr     eax,16                          ;ñäâèíåì íà 16 ðàçðÿäîâ â ïðàâî (ðàçäåëèì íà 65536) â ax âåðõíàÿ òî÷êà
  64.         shl     ebx,16                          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
  65.  
  66.         sub     ecx,8                           ;êîððåòèðîâêà ó÷èòûâàåì âûñîòó øðèôòà
  67.  
  68.         test    dword ch_flags,ch_flag_bottom   ;ïðîâåðèì, íóæíî ëè âûâîäèòü ââåðõó íàäïèñü
  69.         jnz     .bottom
  70.  
  71.         test    dword ch_flags,ch_flag_middle   ;ïðîâåðèì, íóæíî ëè âûâîäèòü â öåíòð íàäïèñü
  72.         jz      .top                            ;îñòàëñÿ òîëüêî top
  73.        
  74.         shr     cx,1                            ;ðàçäåëèì íà 2
  75. .bottom:
  76.         add     ax,cx
  77. .top:
  78.         add     ebx,dword ch_left_s             ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ
  79.         mov     bx,ax
  80.                                                 ;ebx õ shl 16 +y êîîðäèíàòû âûâîäà ñòðî÷êè
  81.  
  82.         mov     ecx,dword ch_text_color         ;çàãðóçèì öâåò íàäïèñè + flags
  83.         mov     edx,dword ch_text_ptr           ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
  84.         mcall   4                               ;Âûâîä
  85.         popad                                   ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
  86.         ret 4                                   ;âûéäåì èç ïðîöåäóðû è óäàëèì èç ñòåêà óêàçàòåëü íà ñòðóêòóðó (4 áàéòà)
  87.  
  88. check_box_clear_ch:                             ;î÷èñòêà ÷åê áîêñà
  89.         mov     edx,dword ch_color              ;öâåò âíóòðè ÷åê áîêñà
  90.         jmp     @f                              ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@
  91. check_box_draw_ch:                              ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
  92.         mov     edx,dword ch_border_color       ;çàãðóçèòü öâåò
  93. @@:
  94. ;Îòîáðàçèòü âêëþ÷åíûé checkbox
  95.         mov     ebx,dword ch_left_s             ;çàãðóæàåì õ shl 16 + äëèííà ïî Õ
  96.         mov     ecx,dword ch_top_s              ;çàãðóæàåì Y shl 16 + äëèííà ïî Y
  97.         add     ebx,2 shl 16 - 4                ;ïîñëå ýòèõ èçìåíåíèé (X+2) shl 16 +äëèííà ïî (Õ-2)
  98.         add     ecx,2 shl 16 - 4                ;ïîñëå ýòèõ èçìåíåíèé (Y+2) shl 16 +äëèííà ïî (Y-2)
  99.         mcall   13                              ;îòîáðàçèòü êâàäðàò âíóòðè checkbox
  100.         ret
  101. }
  102.  
  103.  
  104. macro use_checkbox_mouse
  105. {
  106.  
  107. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  108. ;Îáðàáîò÷èê mouse
  109. ;Ïðè ïîïàäàíèè ìûøêè + íàæàòà êëàâèøà â îáëàñòü checkbox ñîñòîÿíèå áîêñà äîëæíî ìåíÿòñÿ àêòèâíûé - íå àêòèâíûé.
  110. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  111. check_box_mouse:      ;îáðàáîòêà ìûøè
  112. pushad
  113.         mov     ebp,dword [esp+36]      ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
  114.         mcall   37,2                    ;ïðîâåðÿåì ñîñòîÿíèå êëàâèø ìûøêè. Áûëî ëè ñîáûòèå íàæàòàÿ êëàâèøà íà ìûøêå.
  115.         test    eax,eax                 ;ïðîâåðêà åñëè ó íàñ â eax=0, âûéäåì
  116.         jz      .check_box_mouse_end    ;îáðàáîòêà çàêîí÷èëàñü
  117. ; Äà ñîáûòèå: íàæàòèå êëàâèøè ìûøêè ïðîèçîøëî.        
  118. @@:
  119.         mcall   37,1                    ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà
  120.                                         ;íà âûõîäå â eax x shl 16 + y
  121. ;ñðàâíåíèå âåðõíåé òî÷êè ïî Y
  122.         mov     ecx,dword ch_top_s      ;y shl 16 +äëèííà ïî y
  123.         mov     ebx,ecx
  124.         shr     ebx,16                  ;bx = êîîðäèíàòà ïî y
  125.         cmp     ax,bx
  126.         jb      .check_box_mouse_end    ;óêàçàòåëü ìûøêè ìåíüøå íà÷àëüíîé êîîðäèíàòû ïî y ÷åì êîîðäèíàòà ïî Y ó áîêñà
  127. ;ñðàâíåíèå íèæíåé òî÷êè ïî Y
  128.         add     cx,bx                   ;ñëîæèì äëèííó ïî y è êîîðäèíàòó âåðõíåé òî÷êè ïî y ïîëè÷èì êîîðäèíàòó íèæíåé òî÷êè ïî Y
  129.         cmp     ax,cx
  130.         ja      .check_box_mouse_end    ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî y ÷åì êîîðäèíàòà ïî Y ó áîêñà
  131. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  132.         shr     eax,16                  ;ñìåñòèì êîîðäèíàòó ïî Õ â íèæíóþ ÷àñòü ðåãèñòðà ò.å. â ax
  133. ;ñðàâíåíèå ïî íà÷àëüíîé òî÷êå Õ
  134.         mov     ecx,dword ch_left_s     ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà)  äëÿ ÷åê áîêñà
  135.         mov     ebx,ecx
  136.         shr     ebx,16                  ;bx = êîîðäèíàòà ïî X
  137.         cmp     ax,bx
  138.         jb      .check_box_mouse_end    ;óêàçàòåëü ìûøêè ìåíüøå íà÷àëüíîé êîîðäèíàòû ïî X ÷åì êîîðäèíàòà ïî X ó áîêñà
  139. ;ñðàâíåíèå êîíå÷íîé òî÷êè ïî X
  140.         add     bx,cx                   ;ñëîæèì äëèííó ïî x è êîîðäèíàòó òî÷êè ïî õ ïîëó÷èì êîîðäèíàòó êîíå÷íîé òî÷êè ïî Õ
  141.         add     bx,word ch_sz_str       ;äîáàâèì äëèííó ñòðîêè òåêñòà ñ îòñòóïîì ïðåäâàðòèåëüíî çàïèñàâ èõ â ìîìåíò èíèöèàëèçàöèè
  142.         cmp     ax,bx
  143.         ja      .check_box_mouse_end    ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî õ ÷åì êîîðäèíàòà ïî Õ ó áîêñà
  144. ;åñëè âñå ïðîâåðêè áûëè óñïåøíî ïðîéäåíû ìû îáÿçàíû ïîìåíÿòü ñîñòîÿíèå áîêñà
  145.         btc     dword   ch_flags,2      ;ïåðåíîñ 2-ãî áèòà â cf è èíâåðñèÿ åãî
  146.         jc      .enable_box             ;åñëè CF=1 òî îòîáðàçèì âêëþ÷åííûé áîêñ è âûéäåì
  147.         push    dword .check_box_mouse_end      ;ôîêóñ -ïîêóñ, âåðíåìñÿ ïîñëå âûçîâà check_box_clear_ch íà ìåòêó check_box_mouse_end
  148.         jmp     check_box_clear_ch      ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà.    
  149.  
  150. .enable_box:
  151.         call    check_box_draw_ch       ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ
  152. .check_box_mouse_end:
  153. popad                                   ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
  154.         ret  4                          ;âûéòè è âîññòàíîâèì ñòåê
  155. }