Subversion Repositories Kolibri OS

Rev

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

  1. ;Їрщы ёючфрэ 13.02.2009 <Lrz> ═р ъюф яЁшьхэхэр GPL2 ышЎхэчш 
  2. ;╠ръЁюё фы  ёшёЄхьэющ сшсышюЄхъш box_lib.obj
  3. ;Checkbox
  4.  
  5. ch_struc_size=36
  6. ch_flag_en=10b ;¤ыхьхэЄ т√сЁрэ
  7.  
  8. ch_left  equ [edi]         ;ъююЁфшэрЄр эрўрыр Ёшёютрэш  яю ї
  9. ch_top   equ [edi+2]       ;ъююЁфшэрЄр эрўрыр Ёшёютрэш  яю є
  10. ch_text_margin equ [edi+4] ;=4 ЁрёёЄю эшх юЄ яЁ ьюєуюы№эшър ўхъ сюъёр фю эрфяшёш
  11. ch_size  equ [edi+8]       ;12 ЁрчьхЁ ътрфЁрЄр ўхъ сюъёр
  12. ch_color equ [edi+12]      ;ЎтхЄ тэєЄЁш checkbox
  13. ch_border_color equ [edi+16] ; or [edi+4] ;ЎтхЄ Ёрьъш checkbox хх ьюцэю чрфрЄ№ ёрьюёЄю Єхы№эю
  14. ch_text_color   equ [edi+20] ;[edi+4]  ;ЎтхЄ ЄхъёЄр
  15. ch_text_ptr     equ [edi+24] ;єърчрЄхы№ эр эрўрыю ЄхъёЄютющ ёЄЁюъш
  16. ch_text_length  equ [edi+28]
  17. ch_flags equ [edi+32]      ;Їыруш
  18.  
  19. macro use_checkbox_draw
  20. {
  21. check_box_draw:
  22.        pusha   ;ёюїЁрэшь тёх ЁхушёЄЁ√
  23.        mov     edi,dword [esp+36]
  24.        mov eax,13
  25.        movzx ebx,word ch_left
  26.        shl ebx,16
  27.        add ebx,ch_size
  28.        mov ecx,ch_top
  29.        shl ecx,16
  30.        add ecx,dword ch_size
  31.        mov edx,dword ch_border_color
  32.        mcall ;Ёшёєхь Ёрьъє
  33.  
  34.        mov edx,dword ch_color
  35.        add ebx,1 shl 16 - 2
  36.        add ecx,1 shl 16 - 2
  37.        mcall ;чръЁр°штрхь тэєЄЁхээюёЄш ўхъсюъёр
  38.  
  39.        test dword ch_flags,2  ;фюёЄрЄ№ чэрўхэшх сшЄр шч яхЁхьхээющ ш яюьхёЄшЄ№ т  Їыру CF
  40.        jz   @f                ;т хёыш CF=1, Єю т√яюыэшь ёыхфє■∙є■ яЁюЎхфєЁє шэрўх яхЁхщЄш эр эшцэ■■ @@
  41.        call check_box_draw_ch  ;эрЁшёютрЄ№ тъы■ўхээ√щ ўхъ сюъё
  42. @@:
  43. ;----------------------------
  44. ;ЁрёўхЄ ъєфр сєфхЄ яЁюшчтхфхэ т√тюф ЄхъёЄр
  45. ;----------------------------
  46.         movzx ebx,word ch_left        ;чруЁєчшЄ№ чэрўхэшх ї фы  ўхъ сюъёр
  47.         add   ebx,dword ch_size
  48.         add   ebx,dword ch_text_margin;фюсртшЄ№ ЁрчьхЁ ёЄюЁюэ√ ш ЁрёёЄю эшх эр ъюЄюЁюь эрўэхЄё  т√тюф ЄхъёЄр
  49.         shl   ebx,16                ;ёфтшэхь эр 16 ЁрчЁ фют т ыхтю (єьэюцшь эр 65536)
  50.         mov   bx,word ch_top        ;чруЁєчшь чэрўхэшх яю y
  51.         add   ebx,ch_size
  52.         mov   ecx,dword ch_text_color        ;чруЁєчшь ЎтхЄ эрфяшёш + flags
  53.         sub   ebx,7        ;фюсртшь чэрўхэшх фышэ√ ёЄюЁюэ√ -9+2
  54.        
  55.         mov   edx,dword ch_text_ptr                ;єърцхь рфЁхё юЄ ъєфр эєцэю т√тюфшЄ№ ёЄЁюъє
  56.         mov   esi,dword ch_text_length
  57.         ;тэхёхь т eax чэрўхэшх т√тюфр эрфяшёш эр ърэтє
  58.         mov   eax,4
  59.         mcall                  ;┬√тюф
  60. popa                              ;тюёёЄрэютшЄ№ чэрўхэш  ЁхушёЄЁют шч ёЄхър
  61. ret 4                             ;т√щфхь шч яЁюЎхфєЁ√
  62.  
  63. check_box_clear_ch:                        ;юўшёЄър ўхъ сюъёр
  64.         mov   edx,dword ch_color   ;ЎтхЄ тэєЄЁш ўхъ сюъёр
  65.         jmp   @f             ;схчєёыютэ√щ яЁ√цюъ эр эшцэ■■ ьхЄъє @@
  66. check_box_draw_ch:            ;эрЁшёютрЄ№ тъы■ўхээ√щ ўхъ сюъё
  67.         mov   edx,dword ch_border_color        ;чруЁєчшЄ№ ЎтхЄ
  68. @@:
  69.         movzx ebx,word ch_left  ;чруЁєчшЄ№ ъююЁфшэрЄє яю ї
  70.         mov   eax,dword ch_size
  71.         mov   bp,ax
  72.         shr   eax,2
  73.         push  ax
  74.  
  75.         push  ax
  76.         add   ebx,eax          
  77.         shl   ebx,16            ;ёфтшэхь эр 16 ЁрчЁ фют т ыхтю (єьэюцшь эр 65536)
  78.         pop   ax
  79.         lea   eax,[eax*2]
  80.         sub   bp,ax             ;ёюїЁрэшь ЁхушёЄЁ bx т ЁхушёЄЁх єърчрЄхы  срч√
  81.         mov   bx,bp
  82.  
  83.         movzx ecx,word ch_top ;чруЁєчшЄ№ ъююЁфшэрЄє яю є
  84.         pop   ax
  85.         add   cx,ax        
  86.         shl   ecx,16          ;ёфтшэхь эр 16 ЁрчЁ фют т ыхтю (єьэюцшь эр 65536)
  87.         mov   cx,bp           ;чруЁєчшь чэрўхэш  ЁхушёЄЁр єърчрЄхы  срч√ т cx
  88.         mov   eax,13          ;т eax - чэрўхэш  ЇєэъЎшш фы  т√тюфр яюыюё√ Є.х. яю ёєЄш яЁ ьюєуюы№эшър, ъюЄюЁ√щ юЄюсЁрцрхЄ тъы■ўхээ√щ ъюьяюэхэЄ ўхъ сюъё
  89.         mcall            ;т√тюф
  90. ret                                ;т√щЄш шч яЁюЎхфєЁ√
  91. }
  92.  
  93.  
  94. macro use_checkbox_mouse
  95. {
  96.  
  97. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  98. ;╬сЁрсюЄўшъ mouse
  99. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  100. check_box_mouse:      ;юсЁрсюЄър ь√°ш
  101. pusha
  102.         mov     edi,dword [esp+36]
  103.         mov     eax,37           ;сєфхь ўЄю Єю фхырЄ№ хёыш є эрё ўЄю - эшЄ№ эрцрЄю
  104.         mov     ebx,2            ;тэхёЄш т ЁхушёЄЁ чэрўхэшх 2
  105.         mcall             ;яЁютхЁър эх эрцры ыш яюы№чютрЄхы№ ъэюяъє ь√°ъш
  106.         test    eax,eax   ;яЁютхЁър хёыш є эрё т eax=0, Єю єёЄрэютшь Їыру ш т√щфхь
  107.         jnz     @f         ;яхЁхщЄш эр эшцэ■■ ьхЄъє @@
  108.         btr     dword ch_flags,2  ;шчтыхўхэшх чэрўхэш  чрфрээюую сшЄр т Їыру cf ш шчьхэхэшх хую чэрўхэш  эр эєыхтюх.
  109.         jmp     check_box_mouse_end
  110.        
  111. @@:
  112.         bts  dword ch_flags,2   ;яЁютхЁър Їырур Є.х. яхЁхэюё т cf чэрўхэшх сшЄр ш єёЄрэютър сшЄр т ёюёЄю эшх тъы■ўхэю
  113.         jc   check_box_mouse_end         ;хёыш CF=1 Єю яхЁхщЄш  т ъюэхЎ Є.х. ¤Єю т√їюф
  114.         mov  esi,dword ch_text_length ;чруЁєчшЄ№ ъюы-тю ёшьтюыют т ЄхъёЄютющ ёЄЁюъх
  115.         ;╙ьэюцхэшх эр 6 ┴√ёЄЁюх єьэюцхэшх ьюцэю тюёяюы№чютрЄ№ё  ы■с√ь ьч ьхЄюфют, эю эр ёЄрЁ√ї ╧ЁюЎхёёюЁрї (386,486,P1)с√ёЄЁхх сєфхЄ ё шэёЄЁєъЎшхщ Lea
  116.         lea esi,[eax*3]  
  117.         shl esi,1
  118. ;        imul esi,6             ; шыш ьюцэю ш Єръ єьэюцшЄ№ эр 6
  119.         add  esi,dword ch_text_margin ;фюсртшЄ№ 3 - ЁрёёЄю эшх юЄ ўхъ сюъёр фю эрфяшёш
  120.  
  121.         mov  eax,37             ;яюыєўшь ъююЁфшэрЄ√ ь√°ъш
  122.         mov  ebx,1              ;фюсртшЄ№ 1
  123.         mcall               ;яюыєўшЄ№ ъююЁфшэрЄ√ ъєЁёюЁр юЄэюёшЄхы№эю юъэр
  124.        
  125.         movzx ebx,word ch_top  ;чруЁєчшЄ№ т bx чэрўхэшх ъююЁфшэрЄ√ є
  126.         cmp   ax,bx              ;ёЁртэшЄ№ ё ё ъююЁфшэрЄющ ъєЁёюЁр
  127.         jl   check_box_mouse_end          ;SF <> OF хёыш ьхэ№°х
  128.         add   ebx,dword ch_size        ;фюсртшЄ№ ЁрчьхЁ
  129.         cmp   ax,bx              ;ёЁртэшЄ№
  130.         jg   check_box_mouse_end          ;ZF = 0 ш SF = OF хёыш сюы№°х
  131.              
  132.         shr   eax,16              ;Ёрчфхышь эр 65536 шыш яЁюёЄю ёфтшэхь сшЄ√ эр 16 чэрўхэшщ
  133.         movzx ebx,word ch_left  ;яЁюшчтхфхь рэрыюушўэюх ёЁртэхэшх
  134.         cmp   ax,bx            ;ёЁртэшЄ№ ЁхушёЄЁ√
  135.         jl   check_box_mouse_end        ;хёыш ьхэ№°х
  136.         add   ebx,dword ch_size      ;фюсртшЄ№ фышэє ёЄюЁюэ√ яЁ ьюєуюы№эшър
  137.         add   ebx,esi          ;╙ўхёЄ№ т чэрўхэшш яю ї х∙х ш фышэє эрфяшёш ъ ўхъсюъёє
  138.         cmp   ax,bx            ;ёЄЁртэшЄ№ ЁхушёЄЁ√
  139.         jg   check_box_mouse_end        ;хёыш сюы№°х
  140.  
  141.         bts  dword ch_flags,1  ;шчтыхўхэшх чэрўхэш  чрфрээюую сшЄр т Їыру cf ш шчьхэхэшх хую чэрўхэш  эр 1.
  142.         jc   @f                ;CF=1 Єю яхЁхщЄш эр эшцэ■■ @@
  143.        
  144.         call check_box_draw_ch        ;юЄюсЁрчшЄ№ тъы■ўхээ√щ ўхъ сюъё
  145. ;        mov   dword [esp+24],1 ;фры№эхщ°р  яЁютхЁър ўхъ сюъёют схёь√ёыхэр, яю ¤Єюьє т ёЄхъ, уфх ЁрёяюырурхЄё  ecx яюьхёЄшЄь 0
  146.         jmp  check_box_mouse_end       ;т√щЄш
  147. @@:
  148.         btr   word ch_flags,1  ;шчтыхўхэшх чэрўхэш  чрфрээюую сшЄр т Їыру cf ш шчьхэхэшх хую чэрўхэш  эр эєыхтюх.
  149.         call check_box_clear_ch         ;т√ъы■ўшЄ№ ўхъ сюъё Є.х. эр ьхёЄх чръЁр°хээюую яЁ ьюєуюы№эшър юЄюсЁрчшЄ№ ЎтхЄ Їюэр.
  150. check_box_mouse_end:
  151. popa                                ;тюёёЄрэютшЄ№ ЁхушёЄЁ√ шч ёЄхър
  152. ret  4                              ;т√щЄш
  153. }