Subversion Repositories Kolibri OS

Rev

Rev 682 | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. pb_control_data_size              = 34
  3. pb_redraw_all                     = 10000000b
  4. pb_redraw_all_off                 = 01111111b
  5. ;pb_special_progress_on            = 00000001b
  6. ;pb_special_progress_off           = 11111110b
  7.  
  8. ;****************************************************
  9. ;****************craete ProgressBar********************
  10. ;****************************************************
  11. ;IN
  12. ;pointer to parend
  13. ;pointer to ProgressBar's structure
  14. ;OUT
  15. ;pointer to initialized control
  16. align 4
  17.  
  18. craete_progress_bar:
  19.  
  20.       push ebx
  21.       push ecx
  22.       push edx
  23.       push esi
  24.       push edi
  25.       push ebp
  26.  
  27.       mov ebx,[esp+24+4]
  28.       mov eax,[esp+24+8]
  29.  
  30.       mov [PointerToStructureForProgressBar],eax
  31.  
  32.       mov eax,control_header_size+pb_control_data_size
  33.       call craete_control
  34.  
  35.       ;set all EditBox's parameters in control
  36.       mov [eax],dword progress_bar
  37.  
  38.       mov ecx,pb_control_data_size
  39.       mov esi,[PointerToStructureForProgressBar]
  40.       mov edi,eax
  41.       add edi,control_header_size
  42.       rep movsb
  43.  
  44.       call get_skin_height
  45.  
  46.       mov ebx,[PointerToStructureForProgressBar]
  47.       mov ecx,[ebx+10]  ;x
  48.       mov edx,[ebx+14]  ;y
  49.       mov esi,[ebx+18]  ;size x
  50.       mov edi,[ebx+22]  ;size y
  51.       add ecx,border_width
  52.       add edx,[skin_height]
  53.       ;copy information to control
  54.       mov [eax+24],ecx
  55.       mov [eax+28],edx
  56.       mov [eax+32],esi
  57.       mov [eax+36],edi
  58.  
  59.       pop ebp
  60.       pop edi
  61.       pop esi
  62.       pop edx
  63.       pop ecx
  64.       pop ebx
  65.  
  66.       ret 8
  67.  
  68. ;****************************************************
  69. ;*****************Draw ProgressBar********************
  70. ;****************************************************
  71. ;IN
  72. ;pointer to control of ProgressBar
  73. ;message
  74. ;OUT
  75. ;not returned value
  76. align 4
  77.  
  78. progress_bar:
  79.  
  80.       ;get message
  81.       mov eax,[esp+8]
  82.  
  83.       ;get pointer to control of button
  84.       mov esi,[esp+4]
  85.       mov [PointerForProgressBar],esi
  86.  
  87.       ;copy control to local control
  88.       add esi,control_header_size
  89.       mov edi,dword ProgressBar
  90.       mov ecx,pb_control_data_size
  91.       rep movsb
  92.  
  93.  
  94.       push eax
  95.       ;load coordinats and size from control
  96.       mov eax,[PointerForProgressBar]
  97.       mov ebx,[eax+24]           ;x
  98.       mov ecx,[eax+28]           ;y
  99.       mov edx,[eax+32]           ;size x
  100.       mov esi,[eax+36]           ;size y
  101.       ;set current coordinats and sizes in EeditBox
  102.       mov [ProgressBar.x],ebx
  103.       mov [ProgressBar.y],ecx
  104.       mov [ProgressBar.sizex],edx
  105.       mov [ProgressBar.sizey],esi
  106.  
  107.       pop eax
  108.  
  109.  
  110.       cmp [eax],dword -1
  111.       jne no_destroy_progress_bar
  112.  
  113.       jmp exit_progress_bar
  114.       no_destroy_progress_bar:
  115.  
  116.       cmp [eax],dword 1
  117.       jne no_redraw_all_progress_bar
  118.  
  119.          or [ProgressBar.type],pb_redraw_all
  120.  
  121.       no_redraw_all_progress_bar:
  122.  
  123.       cmp [eax],dword 3
  124.       jne no_special_message_progress_bar
  125.  
  126.          xor eax,eax
  127.          mov al,[ProgressBar.type]
  128.          and al,activate_trap
  129.          test al,al
  130.          jz no_draw_progress_bar
  131.  
  132.            and [ProgressBar.type],deactivate_trap
  133.  
  134.            cmp [ProgressBar.progress],dword 0.02
  135.            jae nofull_redraw
  136.                 call draw_all_progress_bar
  137.            nofull_redraw:
  138.  
  139.            call draw_progress
  140.  
  141.          no_draw_progress_bar:
  142.          jmp exit_progress_bar
  143.  
  144.       no_special_message_progress_bar:
  145.  
  146.       xor eax,eax
  147.       mov al,[ProgressBar.type]
  148.       and al,pb_redraw_all
  149.       test al,al
  150.       jz no_draw_all_progress_bar
  151.  
  152.          and [ProgressBar.type],pb_redraw_all_off
  153.  
  154.           call draw_all_progress_bar
  155.  
  156.          jmp exit_progress_bar
  157.  
  158.       no_draw_all_progress_bar:
  159.  
  160.  
  161.       exit_progress_bar:
  162.  
  163.       mov edi,[PointerForProgressBar]
  164.       add edi,control_header_size
  165.       mov esi,dword ProgressBar
  166.       mov ecx,pb_control_data_size
  167.       rep movsb
  168.  
  169.       ret 8
  170.  
  171. draw_all_progress_bar:
  172.  
  173.          mov eax,[ProgressBar.color3]
  174.          mov ebx,dword 0xffffff
  175.          mov ecx,20
  176.          mov edx,dword colors_table1
  177.          call gradient
  178.  
  179.          mov eax,13
  180.          mov ebx,[ProgressBar.x]
  181.          mov ecx,[ProgressBar.y]
  182.          mov edx,[ProgressBar.color1]
  183.          shl ebx,16
  184.          shl ecx,16
  185.          add ebx,[ProgressBar.sizex]
  186.          add ecx,[ProgressBar.sizey]
  187.          mcall
  188.  
  189.          mov eax,[ProgressBar.x]
  190.          mov ebx,[ProgressBar.y]
  191.          add eax,[ProgressBar.sizex]
  192.          add ebx,[ProgressBar.sizey]
  193.          mov [v],eax    ;v=x+sizex
  194.          mov [v2],ebx   ;v2=y+sizey
  195.  
  196.          ;dark lines
  197.          mov eax,[ProgressBar.color3]
  198.          and eax,0xffffff
  199.          mov [Line.color],eax
  200.          mov [Pixel.color],eax
  201.  
  202.          ;(x+1,y)-(x+sizex-1,y)
  203.          mov eax,[ProgressBar.x]
  204.          mov ebx,[ProgressBar.y]
  205.          mov ecx,[v]
  206.          add eax,1
  207.          sub ecx,1
  208.          mov [Line.x1],eax
  209.          mov [Line.x2],ecx
  210.          mov [Line.y1],ebx
  211.          mov [Line.y2],ebx
  212.          call DrawLine
  213.  
  214.          ;(x+sizex,y+1)-(x+sizex,y+sizey-1)
  215.          mov eax,[v]
  216.          mov ebx,[v2]
  217.          mov ecx,[ProgressBar.y]
  218.          add ecx,1
  219.          sub ebx,1
  220.          mov [Line.x1],eax
  221.          mov [Line.x2],eax
  222.          mov [Line.y1],ecx
  223.          mov [Line.y2],ebx
  224.          call DrawLine
  225.  
  226.          ;(x+1,y+sizey)-(x+sizex-1,y+sizey)
  227.          mov eax,[ProgressBar.x]
  228.          mov ebx,[v]
  229.          mov ecx,[v2]
  230.          add eax,1
  231.          sub ebx,1
  232.          mov [Line.x1],eax
  233.          mov [Line.x2],ebx
  234.          mov [Line.y1],ecx
  235.          mov [Line.y2],ecx
  236.          call DrawLine
  237.  
  238.          ;(x,y+1)-(x,y_sizey-1)
  239.          mov eax,[ProgressBar.x]
  240.          mov ebx,[ProgressBar.y]
  241.          mov ecx,[v2]
  242.          add ebx,1
  243.          sub ecx,1
  244.          mov [Line.x1],eax
  245.          mov [Line.x2],eax
  246.          mov [Line.y1],ebx
  247.          mov [Line.y2],ecx
  248.          call DrawLine
  249.  
  250.          ;(x+1,y+1)-(x+1,y+2)
  251.          mov eax,[ProgressBar.x]
  252.          mov ebx,[ProgressBar.y]
  253.          mov ecx,ebx
  254.          add eax,1
  255.          add ebx,1
  256.          add ecx,2
  257.          mov [Line.x1],eax
  258.          mov [Line.x2],eax
  259.          mov [Line.y1],ebx
  260.          mov [Line.y2],ecx
  261.          call DrawLine
  262.  
  263.          ;(x+2,y+1)
  264.          mov eax,[ProgressBar.x]
  265.          mov ebx,[ProgressBar.y]
  266.          add eax,2
  267.          add ebx,1
  268.          mov [Pixel.x],eax
  269.          mov [Pixel.y],ebx
  270.          call DrawPixel
  271.  
  272.          ;(x+1,y+sizey-1)-(x+1,y+sizey-2)
  273.          mov eax,[ProgressBar.x]
  274.          mov ebx,[v2]
  275.          mov ecx,ebx
  276.          add eax,1
  277.          sub ebx,1
  278.          sub ecx,2
  279.          mov [Line.x1],eax
  280.          mov [Line.x2],eax
  281.          mov [Line.y1],ebx
  282.          mov [Line.y2],ecx
  283.          call DrawLine
  284.  
  285.          ;(x+2,y+sizey-1)
  286.          mov eax,[ProgressBar.x]
  287.          mov ebx,[v2]
  288.          add eax,2
  289.          sub ebx,1
  290.          mov [Pixel.x],eax
  291.          mov [Pixel.y],ebx
  292.          call DrawPixel
  293.  
  294.          ;(x+sizex-1,y+1)-(x+sizex-1,y+2)
  295.          mov eax,[v]
  296.          mov ebx,[ProgressBar.y]
  297.          mov ecx,ebx
  298.          sub eax,1
  299.          add ebx,1
  300.          add ecx,2
  301.          mov [Line.x1],eax
  302.          mov [Line.x2],eax
  303.          mov [Line.y1],ebx
  304.          mov [Line.y2],ecx
  305.          call DrawLine
  306.  
  307.          ;(x+sizex-2,y+1)
  308.          mov eax,[v]
  309.          mov ebx,[ProgressBar.y]
  310.          sub eax,2
  311.          add ebx,1
  312.          mov [Pixel.x],eax
  313.          mov [Pixel.y],ebx
  314.          call DrawPixel
  315.  
  316.          ;(x+sizex-1,y+sizey-2)-(x+sizex-1,y+sizey-1)
  317.          mov eax,[v]
  318.          mov ebx,[v2]
  319.          mov ecx,ebx
  320.          sub eax,1
  321.          sub ebx,2
  322.          sub ecx,1
  323.          mov [Line.x1],eax
  324.          mov [Line.x2],eax
  325.          mov [Line.y1],ebx
  326.          mov [Line.y2],ecx
  327.          call DrawLine
  328.  
  329.          ;(x+sizex-2,y+sizey-1)
  330.          mov eax,[v]
  331.          mov ebx,[v2]
  332.          sub eax,2
  333.          sub ebx,1
  334.          mov [Pixel.x],eax
  335.          mov [Pixel.y],ebx
  336.          call DrawPixel
  337.  
  338.          mov eax,[colors_table1+10*3]
  339.          and eax,0xffffff
  340.          mov [Line.color],eax
  341.          mov [Pixel.color],eax
  342.  
  343.          ;(x+3,y+1)-(x+sizex-3,y+1)
  344.          mov eax,[ProgressBar.x]
  345.          mov ebx,[v]
  346.          mov ecx,[ProgressBar.y]
  347.          add ecx,1
  348.          add eax,3
  349.          sub ebx,3
  350.          mov [Line.x1],eax
  351.          mov [Line.x2],ebx
  352.          mov [Line.y1],ecx
  353.          mov [Line.y2],ecx
  354.          call DrawLine
  355.  
  356.          ;(x+2,y+2)
  357.          mov eax,[ProgressBar.x]
  358.          mov ebx,[ProgressBar.y]
  359.          add eax,2
  360.          add ebx,2
  361.          mov [Pixel.x],eax
  362.          mov [Pixel.y],ebx
  363.          call DrawPixel
  364.  
  365.          ;(x+sizex-1,y+3)-(x+sizex-1,y+sizey-3)
  366.          mov eax,[v]
  367.          mov ebx,[v2]
  368.          mov ecx,[ProgressBar.y]
  369.          sub eax,1
  370.          sub ebx,3
  371.          add ecx,3
  372.          mov [Line.x1],eax
  373.          mov [Line.x2],eax
  374.          mov [Line.y1],ecx
  375.          mov [Line.y2],ebx
  376.          call DrawLine
  377.  
  378.          ;(x+sizex-2,y+2)
  379.          mov eax,[v]
  380.          mov ebx,[ProgressBar.y]
  381.          sub eax,2
  382.          add ebx,2
  383.          mov [Pixel.x],eax
  384.          mov [Pixel.y],ebx
  385.          call DrawPixel
  386.  
  387.          ;(x+3,y+sizey-1)-(x+sizex-3,y+sizey-1)
  388.          mov eax,[ProgressBar.x]
  389.          mov ebx,[v]
  390.          mov ecx,[v2]
  391.          sub ebx,3
  392.          sub ecx,1
  393.          add eax,3
  394.          mov [Line.x1],eax
  395.          mov [Line.x2],ebx
  396.          mov [Line.y1],ecx
  397.          mov [Line.y2],ecx
  398.          call DrawLine
  399.  
  400.          ;(x+sizex-2,y+sizey-2)
  401.          mov eax,[v]
  402.          mov ebx,[v2]
  403.          sub eax,2
  404.          sub ebx,2
  405.          mov [Pixel.x],eax
  406.          mov [Pixel.y],ebx
  407.          call DrawPixel
  408.  
  409.          ;(x+1,y+3)-(x+1,y+sizey-3)
  410.          mov eax,[ProgressBar.x]
  411.          mov ebx,[ProgressBar.y]
  412.          mov ecx,[v2]
  413.          add eax,1
  414.          add ebx,3
  415.          sub ecx,3
  416.          mov [Line.x1],eax
  417.          mov [Line.x2],eax
  418.          mov [Line.y1],ebx
  419.          mov [Line.y2],ecx
  420.          call DrawLine
  421.  
  422.          ;(x+2,y+sizey-2)
  423.          mov eax,[ProgressBar.x]
  424.          mov ebx,[v2]
  425.          add eax,2
  426.          sub ebx,2
  427.          mov [Pixel.x],eax
  428.          mov [Pixel.y],ebx
  429.          call DrawPixel
  430.  
  431.          ret
  432.  
  433. draw_progress:
  434.  
  435.          cmp [ProgressBar.progress],dword 0.02
  436.          jae min_size_ok
  437.  
  438.          mov [ProgressBar.progress],dword 0.02
  439.          min_size_ok:
  440.  
  441.          cmp [ProgressBar.progress],dword 1.0
  442.          jle max_size_ok
  443.  
  444.          mov [ProgressBar.progress],dword 1.0
  445.          max_size_ok:
  446.  
  447.          mov eax,[ProgressBar.sizex]
  448.          sub eax,6
  449.          mov [v2],eax
  450.  
  451.          fld [ProgressBar.progress]
  452.          fild [v2]
  453.          fmul st0,st1
  454.          fistp [v3]
  455.          fstp st0
  456.  
  457.          mov eax,[ProgressBar.color2]
  458.          mov ebx,0xffffff
  459.          mov ecx,[ProgressBar.x]
  460.          mov edx,[ProgressBar.y]
  461.          mov esi,[v3]
  462.          mov edi,[ProgressBar.sizey]
  463.          sub edi,4
  464.          shr edi,1
  465.          add ecx,3
  466.          add edx,1
  467.  
  468.          call rectangle_gradient_up
  469.  
  470.          mov eax,[ProgressBar.color2]
  471.          mov ebx,0xffffff
  472.          mov ecx,[ProgressBar.x]
  473.          mov edx,[ProgressBar.y]
  474.          mov esi,[v3]
  475.          mov edi,[ProgressBar.sizey]
  476.          sub edi,4
  477.          shr edi,1
  478.          add ecx,3
  479.          add edx,2
  480.          add edx,edi
  481.  
  482.          call rectangle_gradient_down
  483.  
  484.          ret