Subversion Repositories Kolibri OS

Rev

Rev 675 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. cb_control_data_dize = 44
  3.  
  4. ;****************************************************
  5. ;****************craete CheckBox**********************
  6. ;****************************************************
  7. ;IN
  8. ;pointer to parend
  9. ;pointer to CheckBox's structure
  10. ;OUT
  11. ;pointer to initialized control
  12. align 4
  13.  
  14. craete_check_box:
  15.  
  16.       push ebx
  17.       push ecx
  18.       push edx
  19.       push esi
  20.       push edi
  21.       push ebp
  22.  
  23.       mov ebx,[esp+24+4]
  24.       mov eax,[esp+24+8]
  25.  
  26.       mov [PointerToStructureForCheckBox],eax
  27.  
  28.       mov eax,control_header_size+cb_control_data_dize
  29.       call craete_control
  30.  
  31.       ;set all CheckBox's parameters in control
  32.       mov [eax],dword check_box
  33.  
  34.       mov ecx,cb_control_data_dize
  35.       mov esi,[PointerToStructureForCheckBox]
  36.       mov edi,eax
  37.       add edi,control_header_size
  38.       rep movsb
  39.  
  40.       call get_skin_height
  41.  
  42.       mov ebx,[PointerToStructureForCheckBox]
  43.       xor ecx,ecx
  44.       xor edx,edx
  45.       mov cx,[ebx+2]   ;CheckBox x
  46.       mov dx,[ebx+4]   ;CheckBox y
  47.       mov esi,[ebx+10] ;CheckBox size
  48.       add ecx,border_width
  49.       add edx,[skin_height]
  50.       ;copy information to control
  51.       mov [eax+24],ecx
  52.       mov [eax+28],edx
  53.       mov [eax+32],esi
  54.       mov [eax+36],esi
  55.  
  56.       pop ebp
  57.       pop edi
  58.       pop esi
  59.       pop edx
  60.       pop ecx
  61.       pop ebx
  62.  
  63.       ret 8
  64.  
  65. ;****************************************************
  66. ;*****************Draw CheckBox**********************
  67. ;****************************************************
  68. ;IN
  69. ;pointer to control of CheckBox
  70. ;message
  71. ;OUT
  72. ;not returned value
  73. align 4
  74.  
  75. check_box:
  76.  
  77.       ;get message
  78.       mov eax,[esp+8]
  79.  
  80.       ;get pointer to control of CheckBox
  81.       mov esi,[esp+4]
  82.       mov [PointerForCheckBox],esi
  83.  
  84.       ;copy information from control to structure
  85.       add esi,control_header_size
  86.       mov edi,dword CheckBox
  87.       mov ecx,control_header_size+cb_control_data_dize
  88.       rep movsb
  89.  
  90.       push eax
  91.       ;load coordinats and size from control
  92.       mov eax,[PointerForCheckBox]
  93.       mov ebx,[eax+24]           ;x
  94.       mov ecx,[eax+28]           ;y
  95.       mov edx,[eax+32]           ;size
  96.       ;set current coordinats and sizes in CheckBox
  97.       mov [CheckBox.ch_left],bx
  98.       mov [CheckBox.ch_top],cx
  99.       mov [CheckBox.ch_size],edx
  100.       pop eax
  101.  
  102.       cmp [eax],dword 1
  103.       jne no_redraw_all_check_box
  104.  
  105.        mov eax,13
  106.        mov bx,[CheckBox.ch_left]
  107.        mov cx,[CheckBox.ch_top]
  108.        shl ebx,16
  109.        shl ecx,16
  110.        add ebx,[CheckBox.ch_size]
  111.        add ecx,[CheckBox.ch_size]
  112.        mov edx,[CheckBox.ch_border_color]
  113.         mcall
  114.  
  115.        mov edx,[CheckBox.ch_color]
  116.        add ebx,1 shl 16 - 2
  117.        add ecx,1 shl 16 - 2
  118.         mcall
  119.  
  120.        mov eax,[CheckBox.ch_size]
  121.        mov ebx,eax
  122.        mov ecx,3
  123.        shr ebx,1
  124.        cdq
  125.        idiv ecx
  126.        mov [CheckBox.ch_size_2],bx
  127.        mov [CheckBox.ch_size_3],ax
  128.  
  129.        test word [CheckBox.ch_flags],2
  130.        jz   @f
  131.        call draw_ch
  132.     @@:
  133.  
  134.         movzx ebx,word[CheckBox.ch_left]
  135.         add ebx,[CheckBox.ch_size]
  136.         add ebx,[CheckBox.ch_text_margin]
  137.         shl   ebx,16
  138.         mov   bx,[CheckBox.ch_top]
  139.         add   ebx,[CheckBox.ch_size]
  140.         add   ebx,(-9+1)
  141.         mov   ecx,[CheckBox.ch_text_color]
  142.  
  143.         mov   edx,[CheckBox.ch_text_ptr]
  144.         movzx esi,word [CheckBox.ch_text_length]
  145.  
  146.         mov   eax,4
  147.         mcall
  148.  
  149.       jmp exit_check_box
  150.       no_redraw_all_check_box:
  151.  
  152.  
  153.       cmp [eax],dword 3
  154.       je exit_check_box
  155.  
  156.       cmp [eax],dword 6
  157.       jne no_mouse_check_box
  158.  
  159.       mov esi,[eax+4]
  160.       mov edi,[eax+8]
  161.       mov ebx,[eax+12]   ;buttons of mouse state
  162.       mov [CheckBox.mouseX],esi
  163.       mov [CheckBox.mouseY],edi
  164.       mov eax,ebx
  165.  
  166.       test eax,eax
  167.       jnz  @f
  168.       btr  word [CheckBox.ch_flags],2
  169.       jmp exit_check_box
  170. @@:
  171.       bts  word [CheckBox.ch_flags],2
  172.       jc   .mouse_end
  173.       movzx  esi,word [CheckBox.ch_text_length]
  174.  
  175.       imul esi,6
  176.       add  esi,[CheckBox.ch_text_margin]
  177.  
  178.       mov eax,[CheckBox.mouseX]
  179.       shl eax,16
  180.       add eax,[CheckBox.mouseY]
  181.  
  182.       xor ebx,ebx
  183.  
  184.       movzx ebx,word[CheckBox.ch_top]
  185.       cmp   ax,bx
  186.       jl   .mouse_end
  187.       add   ebx,[CheckBox.ch_size]
  188.       cmp   ax,bx
  189.       jg   .mouse_end
  190.  
  191.       shr   eax,16
  192.       movzx ebx,word[CheckBox.ch_left]
  193.       cmp   ax,bx
  194.       jl   .mouse_end
  195.       add   ebx,[CheckBox.ch_size]
  196.       add   ebx,esi
  197.       cmp   ax,bx
  198.       jg   .mouse_end
  199.  
  200.       bts  word[CheckBox.ch_flags],1
  201.       jc   @f
  202.  
  203.       call draw_ch
  204.  
  205.       jmp  .mouse_end
  206. @@:
  207.       btr   word[CheckBox.ch_flags],1
  208.       call clear_ch
  209.  
  210.       .mouse_end:
  211.  
  212.       no_mouse_check_box:
  213.  
  214.       exit_check_box:
  215.  
  216.       ;save resultat of work in control
  217.       mov ecx,cb_control_data_dize           ;save in control only flags
  218.       mov esi,dword CheckBox
  219.       mov edi,[PointerForCheckBox]
  220.       add edi,control_header_size
  221.       cld
  222.       rep movsb
  223.  
  224.       ret 8
  225.  
  226. ;ch_text_margin=4
  227. ;ch_size=11
  228.  
  229. clear_ch:
  230.         mov   edx,[CheckBox.ch_color]
  231.         jmp   @f
  232.  
  233. draw_ch:
  234.         mov   edx,[CheckBox.ch_border_color]
  235. @@:
  236.  
  237.         movzx ebx,word[CheckBox.ch_left]
  238.         add   bx,[CheckBox.ch_size_3]
  239.         shl   ebx,16
  240.         mov   bx,[CheckBox.ch_size_2]
  241.         ;mov   bp,bx
  242.         ;push        bx
  243.         movzx ecx,word [CheckBox.ch_top]
  244.         mov   eax,13
  245.         add   cx,[CheckBox.ch_size_3]
  246.         shl   ecx,16
  247.         ;mov   cx,bp
  248.         mov cx,[CheckBox.ch_size_2]
  249.         mcall
  250.  
  251.         ret
  252.