Subversion Repositories Kolibri OS

Rev

Rev 8346 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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