Subversion Repositories Kolibri OS

Rev

Rev 6371 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. macro instrument_set m_num, code
  2. {
  3. local no_instrument
  4. cmp [number_menu],m_num
  5. jne no_instrument
  6.         mov     [Current_instrument],code
  7.         call TakeButtonInstruments
  8.         jmp end_menu
  9. no_instrument:
  10. }
  11.  
  12. ;-----------------------------------------------------------
  13. ;-----------instruments of menu-----------------------------
  14. ;-----------------------------------------------------------
  15. align 4
  16. TakeInstruments:
  17. ;|||||||||||||||||||FILE||||||||||||||||||||||
  18.         cmp     [number_panel],7
  19.         jne     no_file
  20.  
  21. ; <<< New >>>
  22.         cmp     [number_menu],1
  23.         jne     no_new
  24.  
  25.         call dialog2_draw
  26.  
  27.         mov     edx,1000000000000000000000000000000b+1000
  28.         mcall SF_DEFINE_BUTTON,<177,40>,<115,14>,
  29.  
  30.         mov     edx,1000000000000000000000000000000b+1001
  31.         mcall ,,<139,14>,
  32.  
  33.         mov     edx,1000000000000000000000000000000b+1002
  34.         mcall ,,<170,15>
  35.  
  36. no_activate_space:
  37.         mcall SF_SLEEP, 5 ;fix cpu use 100%
  38.         mcall SF_WAIT_EVENT
  39.  
  40.         cmp eax,1 ;redraw window
  41.         jne @f
  42.                 call dialog2_draw
  43.                 jmp no_activate_space
  44.         @@:
  45.  
  46.         cmp eax,3 ;press button
  47.         jne no_activate_space
  48.  
  49.         mcall SF_GET_BUTTON
  50.         shr     eax,8
  51.  
  52.         cmp     eax,1000
  53.         jl      no_activate_space
  54.  
  55.         cmp     eax,1000
  56.         jne     no_picture_size_x
  57.  
  58.         mov     eax,180
  59.         mov     ebx,119
  60.         mov     ecx,5
  61.         call    dialog_line
  62.  
  63.         mov     eax,string_
  64.         mov     ebx,13
  65.         call    find_symvol
  66.  
  67.         dec     eax
  68.         mov     [length_number],eax
  69.         mov     eax,string_
  70.         call str_to_int
  71.  
  72.         mov     [Picture_SizeX],eax
  73.         jmp     no_activate_space
  74. ;---------------------------------------------------------------------
  75. no_picture_size_x:
  76.         cmp     eax,1001
  77.         jne     no_picture_size_y
  78.  
  79.         mov     eax,180
  80.         mov     ebx,119+24
  81.         mov     ecx,5
  82.         call    dialog_line
  83.  
  84.         mov     eax,string_
  85.         mov     ebx,13
  86.         call    find_symvol
  87.  
  88.         dec     eax
  89.         mov     [length_number],eax
  90.         mov     eax,string_
  91.         call str_to_int
  92.  
  93.         mov     [Picture_SizeY],eax
  94.         jmp     no_activate_space
  95. ;---------------------------------------------------------------------
  96. no_picture_size_y:
  97.         cmp     eax,1002
  98.         jne     no_activate_space
  99.  
  100. exit_new:
  101.         mov     edx,11100000000000000000000000000000b+1002
  102.         mcall SF_DEFINE_BUTTON,<177,40>,<170,15>
  103.  
  104.         mov     edx,11100000000000000000000000000000b+1001
  105.         mcall   ,,<139,14>
  106.  
  107.         mov     edx,11100000000000000000000000000000b+1000
  108.         mcall   ,,<115,14>
  109.  
  110. ;get memory for new picture
  111.         call GetMemory
  112.  
  113.         and     [save_flag],0
  114.  
  115.         call cleare_work_arrea
  116.         call drawwin
  117.         jmp     end_menu
  118. ;---------------------------------------------------------------------
  119. no_new:
  120. ; <<< Open >>>
  121.         cmp     [number_menu],2
  122.         jne     no_open
  123.  
  124. ;---------------------------------------------------------------------
  125.         mov     [OpenDialog_data.type],0 ; open
  126.        
  127.         push    dword OpenDialog_data
  128.         call    [OpenDialog_Start]
  129.        
  130.         cmp     [OpenDialog_data.status],1
  131.         jne     end_menu
  132. ;---------------------------------------------------------------------
  133.         mcall SF_SET_EVENTS_MASK,0x80000027 ;100111b
  134.  
  135.         call load_picture
  136.         call drawwin
  137.         jmp     end_menu
  138. ;---------------------------------------------------------------------
  139. no_open:
  140. ; <<< Save >>>
  141.         cmp     [number_menu],3
  142.         jne     no_save_
  143.  
  144.         mov     al,[save_flag]
  145.         test al,al
  146.         jz end_menu
  147.         jmp     save_enter
  148. ;---------------------------------------------------------------------
  149. no_save_:
  150. ; <<< Save as >>>
  151.         cmp     [number_menu],4
  152.         jne     no_save
  153.  
  154. ; savedialog drawwin,save1,save2,file_path
  155. ;---------------------------------------------------------------------
  156. ; replace extension to '.bmp'
  157.         push    eax esi
  158.         mov     esi,[OpenDialog_data.filename_area]
  159.         xor     eax,eax
  160.         cld
  161. @@:
  162.         lodsb
  163.         test    eax,eax
  164.         jnz     @r
  165.         sub     esi,5
  166.         cmp     [esi],byte '.'
  167.         jne     @f
  168.         mov     [esi],dword '.bmp'
  169. @@:
  170.         pop     esi eax
  171. ;---------------------------------------------------------------------
  172.         mov     [OpenDialog_data.type],1 ; save
  173.         stdcall [OpenDialog_Start],OpenDialog_data
  174.  
  175.         cmp     [OpenDialog_data.status],1
  176.         jne     end_menu
  177. ;---------------------------------------------------------------------
  178. save1:
  179. save_enter:
  180.         mcall SF_SET_EVENTS_MASK,0x80000027 ;100111b
  181.  
  182.         call analizing_picture_to_palette
  183.  
  184.         ;eax => number of colors in picture
  185.         mov     ebx,[PointerToPicture]
  186.         mov     ecx,[PointerToEditBufer]
  187.         mov     edx,[PointerToPalette]
  188.         mov     esi,[Picture_SizeX]
  189.         mov     edi,[Picture_SizeY]
  190.  
  191.         call    coding_bmp
  192.  
  193.         mov     eax,file_path
  194.         mov     ecx,ebx
  195.         mov     ebx,[PointerToEditBufer]
  196.  
  197.         call    save_file
  198.  
  199.         mov     [save_flag],1
  200.         call drawwin
  201.         jmp     end_menu
  202. ;---------------------------------------------------------------------
  203. no_save:
  204. ; <<< Exit >>>
  205.         cmp     [number_menu],5
  206.         jne     no_exit_program
  207.  
  208.         mcall SF_TERMINATE_PROCESS
  209. ;---------------------------------------------------------------------
  210. no_exit_program:
  211. no_file:
  212. ;|||||||||||||||||||||||||||||EDIT|||||||||||||||||||||||||
  213.         cmp     [number_panel],6
  214.         jne     no_edit
  215.  
  216. ; <<< Undo >>>
  217.         cmp     [number_menu],1
  218.         jne     no_undo
  219.  
  220.         cmp     [number_undo],2 ;2 - maximum undo count
  221.         jge     end_menu
  222.  
  223. ;rotate bufers -1
  224.         inc     [number_undo]
  225.         mov eax,[PointerToPicture]
  226.         mov ebx,[PointerToCopyPicture]
  227.         mov ecx,[PointerToCopyPicture2]
  228.         mov [PointerToPicture],ebx
  229.         mov [PointerToCopyPicture],ecx
  230.         mov [PointerToCopyPicture2],eax
  231.  
  232.         call MovePictureToWorkScreen
  233.         jmp end_menu
  234. ;---------------------------------------------------------------------
  235. no_undo:
  236. ; <<< Redo >>>
  237.         cmp [number_menu],2
  238.         jne no_redo
  239.  
  240.         cmp [number_undo],0
  241.         je end_menu
  242.  
  243. ;rotate bufers +1
  244.         dec [number_undo]
  245.         mov eax,[PointerToPicture]
  246.         mov ebx,[PointerToCopyPicture]
  247.         mov ecx,[PointerToCopyPicture2]
  248.         mov [PointerToPicture],ecx
  249.         mov [PointerToCopyPicture],eax
  250.         mov [PointerToCopyPicture2],ebx
  251.  
  252.         call MovePictureToWorkScreen
  253.         jmp end_menu
  254. ;---------------------------------------------------------------------
  255. no_redo:
  256. ; <<< Copy >>>
  257.         cmp     [number_menu],3
  258.         jne     no_copy
  259.  
  260.         mov     eax,[crossing_old_x]
  261.         mov     ebx,[crossing_old_y]
  262.  
  263.         cmp     eax,[rectangular_shade_x]
  264.         jl      no_remove_x_copy
  265.  
  266.         mov     ecx,[rectangular_shade_x]
  267.         mov     [crossing_old_x],ecx ; crossing_old_x <-----> rectangulare_shade_x
  268.         mov     [rectangular_shade_x],eax
  269.  
  270. no_remove_x_copy:
  271.         cmp     ebx,[rectangular_shade_y]
  272.         jl      no_remove_y_copy
  273.  
  274.         mov     ecx,[rectangular_shade_y]
  275.         mov     [crossing_old_y],ecx                     ; crossing_old_y <-----> rectangulare_shade_y
  276.         mov     [rectangular_shade_y],ebx
  277.  
  278. no_remove_y_copy:
  279.         mov     eax,[crossing_old_x]
  280.         mov     ebx,[crossing_old_y]
  281.         mov     ecx,[rectangular_shade_x]
  282.         mov     edx,[rectangular_shade_y]
  283.         inc     eax
  284.         inc     ebx
  285.         dec     ecx
  286.         dec     edx
  287.  
  288.         mov     [x],eax
  289.         mov     [y],ebx
  290.         mov     esi,eax
  291.         mov     edi,ebx
  292.         mov     [Dx_],1
  293.         mov     [Dy_],1
  294.  
  295.         sub     ecx,eax
  296.         jnz     no_signum_fill_r_x_copy
  297.  
  298.         mov     [Dx_],-1
  299.  
  300. no_signum_fill_r_x_copy:
  301.         sub     edx,ebx
  302.         jnz     no_signum_fill_r_y_copy
  303.  
  304.         mov     [Dy_],-1
  305.  
  306. no_signum_fill_r_y_copy:
  307.         mov     ebx,[rectangular_shade_y]
  308.         sub     ebx,edi
  309.  
  310.         mov     edx,[PointerToEditBufer]
  311.         mov     eax,[rectangular_shade_x]
  312.         sub eax,[crossing_old_x]
  313.         mov [edx],eax ;image.w
  314.         mov     eax,[rectangular_shade_y]
  315.         sub eax,[crossing_old_y]
  316.         mov [edx+4],eax ;image.h
  317.         mov dword[edx+8],24 ;bit in pixel
  318.         add edx,12 ;copy image parametrs
  319.         mov     [y],edi
  320.  
  321. loop_fill_rectangle_y_copy:
  322.         mov     [x],esi
  323.  
  324. loop_fill_rectangle_x_copy:
  325.         push    esi edi
  326.         mov     eax,[PointerToPicture]
  327.         mov     ebx,[Picture_SizeX]
  328.         mov     esi,[x]
  329.         mov     edi,[y]
  330.         call    GetColorOfPixel
  331.         mov     [edx],ax
  332.         shr     eax,16
  333.         mov     [edx+2],al
  334.         pop     edi esi
  335.  
  336.         add     edx,3
  337.         mov     eax,[x]
  338.         add     eax,[Dx_]
  339.         mov     [x],eax
  340.  
  341.         cmp     eax,[rectangular_shade_x]
  342.         jl      loop_fill_rectangle_x_copy
  343.  
  344.         mov     eax,[y]
  345.         add     eax,[Dy_]
  346.         mov     [y],eax
  347.  
  348.         cmp     eax,[rectangular_shade_y]
  349.         jl      loop_fill_rectangle_y_copy
  350.  
  351.         ;...todo use system buffer...
  352.         ;mcall SF_CLIPBOARD,SSF_WRITE_CB,,[PointerToEditBufer]
  353.  
  354.         call    MovePictureToWorkScreen
  355.         mov     [DrawSprite_flag],1
  356.         jmp     end_menu
  357. ;---------------------------------------------------------------------
  358. no_copy:
  359. ; <<< Paste >>>
  360.         cmp     [number_menu],4
  361.         jne     no_paste
  362.  
  363.         mov     eax,[crossing_old_x]
  364.         mov     ebx,[crossing_old_y]
  365.  
  366.         cmp     eax,[rectangular_shade_x]
  367.         jl      no_remove_x_paste
  368.  
  369.         mov     ecx,[rectangular_shade_x]
  370.         mov     [crossing_old_x],ecx ; crossing_old_x <-----> rectangulare_shade_x
  371.         mov     [rectangular_shade_x],eax
  372.  
  373. no_remove_x_paste:
  374.         cmp     ebx,[rectangular_shade_y]
  375.         jl      no_remove_y_paste
  376.  
  377.         mov     ecx,[rectangular_shade_y]
  378.         mov     [crossing_old_y],ecx ; crossing_old_y <-----> rectangulare_shade_y
  379.         mov     [rectangular_shade_y],ebx
  380.  
  381. no_remove_y_paste:
  382.         mov     eax,[crossing_old_x]
  383.         mov     ebx,[crossing_old_y]
  384.         mov     ecx,[rectangular_shade_x]
  385.         mov     edx,[rectangular_shade_y]
  386.         inc     eax
  387.         inc     ebx
  388.         dec     ecx
  389.         dec     edx
  390.  
  391.         mov     [x],eax
  392.         mov     [y],ebx
  393.         mov     esi,eax
  394.         mov     edi,ebx
  395.         mov     [Dx_],1
  396.         mov     [Dy_],1
  397.  
  398.         sub     ecx,eax
  399.         jnz     no_signum_fill_r_x_paste
  400.  
  401.         mov     [Dx_],-1
  402.  
  403. no_signum_fill_r_x_paste:
  404.         sub     edx,ebx
  405.         jnz     no_signum_fill_r_y_paste
  406.  
  407.         mov     [Dy_],-1
  408.  
  409. no_signum_fill_r_y_paste:
  410.         mov     edx,[PointerToEditBufer]
  411.         cmp dword[edx+8],24
  412.         jne     end_menu
  413.         mov eax,[edx]
  414.         add eax,[crossing_old_x]
  415.         mov [paste_img_w],eax
  416.         mov eax,[edx+4]
  417.         add eax,[crossing_old_y]
  418.         mov [paste_img_h],eax
  419.         add edx,12 ;copy image parametrs
  420.         mov     [y],edi
  421.  
  422. loop_fill_rectangle_y_paste:
  423.         mov     [x],esi
  424.  
  425. loop_fill_rectangle_x_paste:
  426.         push    esi edi
  427.         mov     ecx,[edx]
  428.         and     ecx,0xffffff ;color
  429.         mov     eax,[PointerToPicture]
  430.         mov     ebx,[Picture_SizeX]
  431.         mov     esi,[x]
  432.         mov     edi,[y]
  433.         call    PutPixel
  434.         pop     edi esi
  435.  
  436.         add     edx,3
  437.  
  438.         mov     eax,[x]
  439.         add     eax,[Dx_]
  440.         cmp eax,[paste_img_w]
  441.         je no_paste_data_x
  442.         mov     [x],eax
  443.         cmp     eax,[rectangular_shade_x]
  444.         jl      loop_fill_rectangle_x_paste
  445. no_paste_data_x:
  446.  
  447.         mov     eax,[y]
  448.         add     eax,[Dy_]
  449.         cmp eax,[paste_img_h]
  450.         je no_paste_data_y
  451.         mov     [y],eax
  452.         cmp     eax,[rectangular_shade_y]
  453.         jl      loop_fill_rectangle_y_paste
  454. no_paste_data_y:
  455.  
  456.         call    MovePictureToWorkScreen
  457.         mov     [Paste_flag],1
  458.         jmp     end_menu
  459. ;---------------------------------------------------------------------
  460. no_paste:
  461. ; <<< Cut >>>
  462.         cmp     [number_menu],5
  463.         jne     no_cut
  464.  
  465.         mov     eax,[crossing_old_x]
  466.         mov     ebx,[crossing_old_y]
  467.  
  468.         cmp     eax,[rectangular_shade_x]
  469.         jl      no_remove_x_cut
  470.  
  471.         mov     ecx,[rectangular_shade_x]
  472.         mov     [crossing_old_x],ecx ; crossing_old_x <-----> rectangulare_shade_x
  473.         mov     [rectangular_shade_x],eax
  474.  
  475. no_remove_x_cut:
  476.         cmp     ebx,[rectangular_shade_y]
  477.         jl      no_remove_y_cut
  478.  
  479.         mov     ecx,[rectangular_shade_y]
  480.         mov     [crossing_old_y],ecx ; crossing_old_y <-----> rectangulare_shade_y
  481.         mov     [rectangular_shade_y],ebx
  482.  
  483. no_remove_y_cut:
  484.         mov     eax,[crossing_old_x]
  485.         mov     ebx,[crossing_old_y]
  486.         mov     ecx,[rectangular_shade_x]
  487.         mov     edx,[rectangular_shade_y]
  488.         inc     eax
  489.         inc     ebx
  490.         dec     ecx
  491.         dec     edx
  492.  
  493.         mov     [x],eax
  494.         mov     [y],ebx
  495.         mov     esi,eax
  496.         mov     edi,ebx
  497.         mov     [Dx_],1
  498.         mov     [Dy_],1
  499.  
  500.         sub     ecx,eax
  501.         jnz     no_signum_fill_r_x
  502.  
  503.         mov     [Dx_],-1
  504.  
  505. no_signum_fill_r_x:
  506.         sub     edx,ebx
  507.         jnz     no_signum_fill_r_y
  508.  
  509.         mov     [Dy_],-1
  510.  
  511. no_signum_fill_r_y:
  512.         mov     [y],edi
  513.  
  514. loop_fill_rectangle_y:
  515.         mov     [x],esi
  516.  
  517. loop_fill_rectangle_x:
  518.         push    esi edi
  519.         mov     eax,[PointerToPicture]
  520.         mov     ebx,[Picture_SizeX]
  521.         mov     ecx,dword 0xffffff
  522.         mov     esi,[x]
  523.         mov     edi,[y]
  524.         call    PutPixel
  525.         pop     edi esi
  526.  
  527.         mov     eax,[x]
  528.         add     eax,[Dx_]
  529.         mov     [x],eax
  530.  
  531.         cmp     eax,[rectangular_shade_x]
  532.         jl      loop_fill_rectangle_x
  533.  
  534.         mov     eax,[y]
  535.         add     eax,[Dy_]
  536.         mov     [y],eax
  537.  
  538.         cmp     eax,[rectangular_shade_y]
  539.         jl      loop_fill_rectangle_y
  540.  
  541.         call    MovePictureToWorkScreen
  542.         jmp     end_menu
  543. ;---------------------------------------------------------------------
  544. no_cut:
  545. ; <<< Cleare all >>>
  546.         cmp     [number_menu],6
  547.         jne     no_cleare_all
  548.  
  549.         call    cleare_work_arrea
  550.         call    MovePictureToWorkScreen
  551.         jmp     end_menu
  552. ;---------------------------------------------------------------------
  553. no_cleare_all:
  554. ; <<< To allocate all >>>
  555.         cmp     [number_menu],7
  556.         jne     end_menu
  557.  
  558.         mov     [crossing_old_x],0
  559.         mov     [crossing_old_y],0
  560.         mov     eax,[Picture_SizeX]
  561.         mov     ebx,[Picture_SizeY]
  562.         dec eax
  563.         dec ebx
  564.         mov     [rectangular_shade_x],eax
  565.         mov     [rectangular_shade_y],ebx
  566.         mov     [Current_instrument],30
  567.         mov     [crossing],2
  568.         ;call MovePictureToWorkScreen
  569.         jmp     end_menu
  570. ;---------------------------------------------------------------------
  571. no_edit:
  572. ;|||||||||||||||||||||||||INSTRUMENTS||||||||||||||||||||||
  573.         cmp     [number_panel],5
  574.         jne     no_instruments
  575.  
  576.         instrument_set  1,10 ; pensil
  577.         instrument_set  2,11 ; draw brush
  578.         instrument_set  3,12 ; spray
  579.         instrument_set  4,13 ; lastik
  580.         instrument_set  5,14 ; flood fill
  581.         instrument_set  6,15 ; pipetka
  582.         instrument_set  7,16 ; draw line
  583.         instrument_set  8,17 ; draw rectangle
  584.         instrument_set  9,18 ; draw circle
  585.         instrument_set 10,19 ; draw ellips
  586.         instrument_set 11,20 ; draw hard contour
  587.  
  588. no_instruments:
  589. ;|||||||||||||||||||||||||FILTERS||||||||||||||||||||||||||
  590.         cmp     [number_panel],4
  591.         jne     no_filters
  592.  
  593.         instrument_set  1,23 ; reflection from left to right
  594.         instrument_set  2,24 ; reflection from up to down
  595.  
  596. no_filters:
  597.  
  598. end_menu:
  599.         and     [number_panel],0
  600.         and     [number_menu],0
  601.         jmp     still
  602. ;---------------------------------------------------------------------