Subversion Repositories Kolibri OS

Rev

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

  1. ;;****************************************************************************
  2. ;****************************************************************************
  3. ; Draw output part of the image and SCROLLBAR's
  4. ;****************************************************************************
  5. ;****************************************************************************
  6.   drawimage:
  7.  
  8.  
  9.     call get_window_param
  10.     ;mov  edx,5*65536+50
  11.         mov  edx,0*65536+28
  12.     mov  esi,[img_resolution]    ;24
  13.     cmp  esi,32
  14.     ja   .exit_error ;.exit
  15.     mov  edi,[img_palette]
  16. ;****************************************************************************
  17. ; Calculation of sizes of an output part of the image
  18. ;****************************************************************************
  19.     xor  eax,eax
  20.     mov  [draw_SB],al
  21.     mov  [draw_SB1],al
  22.     mov  eax,[window_width]
  23. ;    sub  eax,9
  24.     mov  [wa_width],ax
  25.     mov  [wa_width_1],ax
  26.     mov  [wa_width_2],ax
  27.     mov  ebx,[img_width]
  28.     test ebx,ebx
  29.     jz   .exit_error ;.exit
  30.     cmp  ax,bx
  31.     jae   @f
  32.         sub   ax,[scroll_bar_data_vertical.size_x]
  33.     mov  [draw_SB],1
  34.     jmp  .size_y
  35. @@:
  36.     mov  ax,bx
  37.  
  38.    
  39. .size_y:
  40.     mov  ebx,[img_high]
  41.     test ebx,ebx
  42.     jz   .exit_error ;.exit
  43.     shl  eax,16
  44.     add  eax,[window_high]
  45. ;    cmp  ax,28
  46. ;    jbe  @f
  47.     sub  ax,28
  48. ;@@:
  49.     mov [wa_high],ax
  50.     mov [wa_high_1],ax
  51.     mov [wa_high_2],ax
  52.     cmp  ax,bx
  53.     jae   @f
  54.         sub   ax,[scroll_bar_data_horizontal.size_y]
  55.     mov  [draw_SB1],1
  56.     jmp  .continue
  57. @@:
  58.     mov  ax,bx
  59. .continue:
  60.     mov  ecx,eax
  61. ;****************************************************************************
  62. ;
  63. ;****************************************************************************
  64.     cmp  [draw_SB1],1
  65.     je   @f
  66.     cmp  [draw_SB],0
  67.     je   @f
  68.         ror  ecx,16
  69.         add  cx,[scroll_bar_data_vertical.size_x]
  70.         rol  ecx,16
  71. @@:    
  72.     cmp  [draw_SB],1
  73.     je  @f
  74.     cmp  [draw_SB1],0
  75.     je  @f
  76.         add  cx,[scroll_bar_data_horizontal.size_y]
  77. @@:
  78. ;    call  check_8bit_less
  79. ;.continue_1:
  80. ;****************************************************************************
  81. ; Prepare of data for SCROLLBAR's
  82. ;****************************************************************************
  83.     call correct_cur_area
  84.    
  85.     mov  eax,[img_width]
  86.         push edx
  87.         imul eax,[scaling_mode]
  88.         mov  ebx,100
  89.         xor  edx,edx
  90.         div  ebx
  91.     mov  [scroll_bar_data_horizontal.max_area],eax
  92.         pop  edx
  93.  
  94.        
  95.     mov  ebx,[img_high]
  96.         push eax edx
  97.         mov  eax,ebx
  98.         imul eax,[scaling_mode]
  99.         mov  ebx,100
  100.         xor  edx,edx
  101.         div  ebx
  102.         mov  ebx,eax
  103.         pop  edx eax
  104.     mov  [scroll_bar_data_vertical.max_area],ebx
  105.        
  106. ;       cmp [scaling_mode],100
  107. ;       jne  .continue_1
  108.  
  109.     call correct_width
  110.     call correct_cur_area
  111.    
  112.     cmp [correct_w],0
  113.     je  @f
  114.        
  115.     call correct_high
  116.     call correct_cur_area
  117.     jmp  .continue_1
  118.    
  119. @@:
  120.     call correct_high
  121.     call correct_cur_area
  122.    
  123.     cmp [correct_h],0
  124.     je  @f
  125.    
  126.     call correct_width
  127.     call correct_cur_area
  128. @@:
  129.  
  130. ;    call  check_8bit_less
  131.  
  132. .continue_1:
  133. ;       mov  eax,[window_high]
  134. ;       sub  eax,55
  135. ;       ror  eax,16
  136. ;       mov  ax,dx
  137. ;       rol  eax,16
  138.     mov  eax,edx
  139.     shl  eax,16
  140.     mov  ax,cx
  141.     mov  [scroll_bar_data_vertical.y],eax
  142.  
  143. ;       mov  eax,[window_width]
  144. ;       sub  eax,10
  145. ;       ror  eax,16
  146. ;       ror  edx,16
  147. ;       mov  ax,dx
  148. ;       rol  edx,16
  149. ;       rol  eax,16
  150.     mov  eax,edx
  151.     mov  ebx,ecx
  152.     shr  ebx,16
  153.     mov  ax,bx
  154.     mov  [scroll_bar_data_horizontal.x],eax
  155.    
  156.    
  157. ;    mov  eax,edx
  158. ;    mov  ebx,ecx
  159. ;    shr  ebx,16
  160. ;    shr  eax,16
  161. ;    add  ax,bx
  162.         mov  eax,[window_width]
  163.         sub  ax,[scroll_bar_data_vertical.size_x]
  164. ;       sub  ax,4
  165.         mov  [scroll_bar_data_vertical.start_x],ax
  166.  
  167. ;    mov  eax,edx
  168. ;    add  ax,cx
  169.         mov  eax,[window_high]
  170.         sub  ax,[scroll_bar_data_horizontal.size_y]
  171. ;       sub  ax,4
  172.     mov  [scroll_bar_data_horizontal.start_y],ax
  173.        
  174. ;****************************************************************************
  175. ; Check necessity prepare of data
  176. ;****************************************************************************
  177.     mov   eax,[scroll_bar_data_horizontal.max_area]
  178.     mov   ebx,[scroll_bar_data_vertical.max_area]
  179.     cmp   ebx,[scroll_bar_data_vertical.cur_area]
  180.     ja    @f
  181.     cmp   eax,[scroll_bar_data_horizontal.cur_area]
  182.     ja    @f
  183.    
  184.     mov  ebp,0
  185.     mov  ebx,[soi]
  186.     jmp  .end
  187. @@:
  188. ;****************************************************************************
  189. ; Calculate offset of next row data relative to previous row data
  190. ;****************************************************************************
  191.     mov  ebp,eax
  192.     mov  ebx,ecx
  193.     shr  ebx,16
  194.     sub  ebp,ebx
  195.     imul ebp,esi
  196.     mov  eax,ebp
  197.     shr  ebp,3
  198. ;****************************************************************************
  199. ; Vertical SCROLLBAR
  200. ; At a case of resizing of the window
  201. ; Check the position of a runner has crossed a limit
  202. ;****************************************************************************
  203.     mov  eax,[scroll_bar_data_vertical.max_area]
  204.     sub  eax,[scroll_bar_data_vertical.cur_area]
  205.     cmp  eax,[scroll_bar_data_vertical.position]
  206.     jae  @f
  207.     mov  [scroll_bar_data_vertical.position],eax
  208. @@:
  209. ;****************************************************************************
  210. ; Horizontal SCROLLBAR
  211. ; At a case of resizing of the window
  212. ; Check the position of a runner has crossed a limit
  213. ;****************************************************************************
  214.     mov  eax,[scroll_bar_data_horizontal.max_area]
  215.     sub  eax,[scroll_bar_data_horizontal.cur_area]
  216.     cmp  eax,[scroll_bar_data_horizontal.position]
  217.     jae  @f
  218.     mov  [scroll_bar_data_horizontal.position],eax
  219. @@:
  220. ;****************************************************************************
  221. ; Calculate offset from a beginning of a image
  222. ;****************************************************************************
  223.     mov  ebx,[scroll_bar_data_horizontal.max_area]
  224.     imul ebx,esi
  225.     mov  eax,ebx    
  226.     shr  ebx,3
  227.     imul ebx,[scroll_bar_data_vertical.position]
  228.     mov  eax,[scroll_bar_data_horizontal.position]
  229.     imul eax,esi
  230.     shr  eax,3
  231.     add  ebx,eax
  232.     add  ebx,[soi]
  233. .end:
  234.     cmp  [soi],0
  235.     je   .exit_error ;.exit
  236. ;****************************************************************************
  237. ; Draw image
  238. ;****************************************************************************
  239.     cmp   [img_resolution_2],15
  240.     jne  @f
  241.         mov  esi,15
  242. @@:
  243.         mov  [image_start_coordinates],edx
  244.         mov  [image_draw_size],ecx
  245.         cmp [scaling_mode],dword 100
  246.         je  .100
  247.         cmp [scaling_mode],dword 0
  248.         jne  @f
  249.         call scaling.1
  250.         ret
  251. @@:
  252.         mov  [correct_scrollbar_100_flag],0
  253.         call zoom_all
  254.         ret    
  255. .100:
  256.         mov  al,[correct_scrollbar_100_flag]
  257.         test al,al
  258.         jnz  @r
  259. ;******************************
  260.         mov  eax,wa_width_1
  261.         mov  eax,[eax]
  262.         push eax
  263.         mov  eax,wa_high_1
  264.         mov  eax,[eax]
  265.         push eax       
  266. ;******************************
  267.         rol  ecx,16
  268.     mov  eax,[scroll_bar_data_vertical.max_area]
  269.     cmp  eax,[scroll_bar_data_vertical.cur_area]
  270.         mov  ax,[wa_width_1]
  271.     jbe  @f
  272.         sub  ax,[scroll_bar_data_vertical.size_x]
  273.         mov  [wa_width_1],ax
  274. @@:
  275.         sub  ax,cx
  276.         mov  [wa_width_2],cx
  277.         ror  ecx,16
  278.         shr  ax,1
  279.         shl  eax,16
  280.         add  edx,eax
  281.         shr  eax,16
  282.         test eax,eax
  283.         jz   @f
  284.         call scaling.fill_for_L_R
  285. @@:
  286.     mov  eax,[scroll_bar_data_horizontal.max_area]
  287.     cmp  eax,[scroll_bar_data_horizontal.cur_area]
  288.         mov  ax,[wa_high_1]
  289.     jbe  @f
  290.         sub  ax,[scroll_bar_data_horizontal.size_y]
  291.         mov  [wa_high_1],ax
  292. @@:
  293.         sub  ax,cx
  294.         mov  [wa_high_2],cx
  295.         shr  ax,1
  296.         add  edx,eax
  297.         test eax,eax
  298.         jz   @f
  299.         call scaling.fill_for_U_D
  300. @@:
  301. ;******************************
  302.     mcall 65,  ;[soi]
  303. ;******************************
  304.         pop  eax
  305.         mov  ebx,wa_high_1
  306.         mov  [ebx],eax
  307.        
  308.         pop  eax
  309.         mov  ebx,wa_width_1
  310.         mov  [ebx],eax
  311. ;******************************
  312. .exit:
  313.         call draw_file_name_to_work_area
  314.         ret
  315.  
  316. .exit_error:
  317.         xor  eax,eax
  318.         mov  [scroll_bar_data_vertical.cur_area],eax
  319.         mov  [scroll_bar_data_horizontal.cur_area],eax
  320.         ret
  321. ;****************************************************************************  
  322. draw_file_name_to_work_area:
  323.         mov  eax,[check1.flags]
  324.         test  eax,10b
  325.         jz  @f
  326.         mov  ebx,[file_name_length]
  327.         mov  eax,ebx
  328.         lea  ebx,[ebx*5]
  329.         add  ebx,eax
  330.         add  ebx,13 shl 16
  331.         mcall 13,,<59,11>,0xe5e5e5
  332.         mcall 4,<16,60>,0x80000000,file_name,,0xe5e5e5
  333. @@:
  334.         ret
  335. ;****************************************************************************
  336. ;check_8bit_less:
  337. ;    cmp  esi,8
  338. ;    jae  .no_8bit_less
  339. ;    mov  eax,ecx
  340. ;    ror  eax,16
  341. ;;    mov  ebx,eax
  342. ;    xor  ecx,ecx
  343. ;    
  344. ;    inc  ecx
  345. ;    shr  ax,1
  346. ;    
  347. ;    cmp  esi,4
  348. ;    je   @f
  349. ;    
  350. ;    inc  ecx
  351. ;    shr  ax,1
  352. ;    
  353. ;    cmp  esi,2
  354. ;    je   @f
  355. ;    
  356. ;    inc  ecx
  357. ;    shr  ax,1
  358. ;@@:
  359. ;;    test ebx,ecx
  360. ;;    jz  @f
  361. ;;    inc  eax
  362. ;;@@:
  363. ;    shl  ax,cl
  364. ;    rol  eax,16
  365. ;    mov  ecx,eax
  366. ;.no_8bit_less:
  367. ;    ret
  368. ;****************************************************************************
  369. correct_width:
  370.     mov   [correct_w],0
  371.     mov   ebx,[scroll_bar_data_vertical.max_area]
  372.     cmp   ebx,[scroll_bar_data_vertical.cur_area]
  373.     jbe   @f
  374.     mov   eax,ecx
  375.     shr   eax,16
  376.         push  eax
  377.         mov   ax,[scroll_bar_data_vertical.size_x]
  378.         sub   [wa_width],ax
  379.         pop   eax
  380.     cmp   [wa_width],ax
  381.     jae   @f
  382.     ror   ecx,16
  383.     mov   cx,[wa_width]
  384.     rol   ecx,16
  385.     mov   [correct_w],1
  386. @@:
  387.     ret
  388. ;****************************************************************************
  389. correct_high:
  390.     mov   [correct_h],0
  391.     mov   eax,[scroll_bar_data_horizontal.max_area]
  392.     cmp   eax,[scroll_bar_data_horizontal.cur_area]
  393.     jbe   @f
  394.         push  eax
  395.         mov   ax,[scroll_bar_data_horizontal.size_y]
  396.         sub   [wa_high],ax
  397.         pop   eax
  398.     cmp   [wa_high],cx
  399.     jae   @f
  400.     mov   cx,[wa_high]
  401.     mov   [correct_h],1
  402. @@:
  403.     ret
  404. ;****************************************************************************
  405. correct_cur_area:
  406.     mov  eax,ecx
  407.     xor  ebx,ebx
  408.     mov  bx,ax
  409.     mov  [scroll_bar_data_vertical.cur_area],ebx
  410.     shr  eax,16
  411.     mov  [scroll_bar_data_horizontal.cur_area],eax
  412.     ret
  413. ;****************************************************************************
  414. ; Check draw vertical scrollbar
  415. ;****************************************************************************
  416. draw_scrollbars:
  417.         xor   eax,eax
  418.         mov   [draw_scrollbar_counter],eax
  419.     mov   eax,[scroll_bar_data_vertical.max_area]
  420.     cmp   eax,[scroll_bar_data_vertical.cur_area]
  421.     jbe   @f
  422.         cmp   [scroll_bar_data_vertical.cur_area],0
  423.         je   @f
  424.         push    dword scroll_bar_data_vertical
  425.         call    [scrollbar_ver_draw]
  426. ;    draw_scroll_bar_vertical scroll_bar_data_vertical
  427.         inc  [draw_scrollbar_counter]
  428. @@:
  429. ;****************************************************************************
  430. ; Check draw horizontal scrollbar
  431. ;****************************************************************************
  432.     mov   eax,[scroll_bar_data_horizontal.max_area]
  433.     cmp   eax,[scroll_bar_data_horizontal.cur_area]
  434.     jbe   @f
  435.         cmp   [scroll_bar_data_horizontal.cur_area],0
  436.         je   @f
  437.         push    dword scroll_bar_data_horizontal
  438.         call    [scrollbar_hor_draw]
  439. ;    draw_scroll_bar_horizontal scroll_bar_data_horizontal
  440.         inc  [draw_scrollbar_counter]
  441. @@:
  442. ;  nodrawimage:
  443.         cmp  [draw_scrollbar_counter],2
  444.         jne  @f
  445.         mov  ebx,[scroll_bar_data_vertical.x]
  446.         mov  ecx,[scroll_bar_data_horizontal.y]
  447.         mcall 13, , ,0xffffff
  448. @@:
  449.     ret
  450. ;****************************************************************************
  451. ;debug_1:    
  452. ;     pushad
  453. ;     mov   eax,ecx
  454. ;     shr   eax,16
  455. ;     mov   ebx,ecx
  456. ;     shl   ebx,16
  457. ;     shr   ebx,16
  458. ;     mov   eax,[image_file]
  459. ;     mov   ebx,edi
  460. ;     mov   [temp_eax],eax
  461. ;     mov   [temp_ebx],ebx
  462. ;     mcall 13,<90,500>,<2,20>,0
  463. ;     mcall 47,0xa0000,[temp_eax],<100, 5>,0xffffff
  464. ;     mcall 47,0xa0000,[temp_ebx],<300, 5>,0xffffff
  465. ;     popad
  466. ;     ret
  467. ;temp_eax dd 0
  468. ;temp_ebx dd 0
  469. ;****************************************************************************