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.