Subversion Repositories Kolibri OS

Rev

Rev 6362 | 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.         cmp     [instrument_used],1
  261.         jne     end_menu
  262.         cmp     [Activate_instrument],0
  263.         jne     end_menu
  264.  
  265.         mov     eax,[OldX]
  266.         mov     ebx,[OldY]
  267.  
  268.         cmp     eax,[rectangular_shade_x]
  269.         jl      no_remove_x_copy
  270.  
  271.         mov     ecx,[rectangular_shade_x]
  272.         mov     [OldX],ecx                       ; OldX <-----> rectangulare_shade_x
  273.         mov     [rectangular_shade_x],eax
  274.  
  275. no_remove_x_copy:
  276.         cmp     ebx,[rectangular_shade_y]
  277.         jl      no_remove_y_copy
  278.  
  279.         mov     ecx,[rectangular_shade_y]
  280.         mov     [OldY],ecx                       ; OldY <-----> rectangulare_shade_y
  281.         mov     [rectangular_shade_y],ebx
  282.  
  283. no_remove_y_copy:
  284.         mov     eax,[OldX]
  285.         mov     ebx,[OldY]
  286.         mov     ecx,[rectangular_shade_x]
  287.         mov     edx,[rectangular_shade_y]
  288.         inc     eax
  289.         inc     ebx
  290.         dec     ecx
  291.         dec     edx
  292.  
  293.         mov     [x],eax
  294.         mov     [y],ebx
  295.         mov     esi,eax
  296.         mov     edi,ebx
  297.         mov     [Dx_],1
  298.         mov     [Dy_],1
  299.  
  300.         sub     ecx,eax
  301.         jnz     no_signum_fill_r_x_copy
  302.  
  303.         mov     [Dx_],-1
  304.  
  305. no_signum_fill_r_x_copy:
  306.         sub     edx,ebx
  307.         jnz     no_signum_fill_r_y_copy
  308.  
  309.         mov     [Dy_],-1
  310.  
  311. no_signum_fill_r_y_copy:
  312.         mov     ebx,[rectangular_shade_y]
  313.         sub     ebx,edi
  314.  
  315.         mov     edx,[PointerToEditBufer]
  316.         mov     [y],edi
  317.  
  318. loop_fill_rectangle_y_copy:
  319.         mov     [x],esi
  320.  
  321. loop_fill_rectangle_x_copy:
  322.         push    esi edi
  323.         mov     eax,[PointerToPicture]
  324.         mov     ebx,[Picture_SizeX]
  325.         mov     esi,[x]
  326.         mov     edi,[y]
  327.         call    GetColorOfPixel
  328.         mov     [edx],ax
  329.         shr     eax,16
  330.         mov     [edx+2],al
  331.         pop     edi esi
  332.  
  333.         add     edx,3
  334.         mov     eax,[x]
  335.         add     eax,[Dx_]
  336.         mov     [x],eax
  337.  
  338.         cmp     eax,[rectangular_shade_x]
  339.         jl      loop_fill_rectangle_x_copy
  340.  
  341.         mov     eax,[y]
  342.         add     eax,[Dy_]
  343.         mov     [y],eax
  344.  
  345.         cmp     eax,[rectangular_shade_y]
  346.         jl      loop_fill_rectangle_y_copy
  347.  
  348.         call    MovePictureToWorkScreen
  349.         mov     [DrawSprite_flag],1
  350.         jmp     end_menu
  351. ;---------------------------------------------------------------------
  352. no_copy:
  353. ; <<< Paste >>>
  354.         cmp     [number_menu],4
  355.         jne     no_paste
  356.  
  357.         cmp     [instrument_used],1
  358.         jne     no_paste
  359.  
  360.         cmp     [Activate_instrument],0
  361.         jne     no_paste
  362.  
  363.         mov     eax,[OldX]
  364.         mov     ebx,[OldY]
  365.  
  366.         cmp     eax,[rectangular_shade_x]
  367.         jl      no_remove_x_paste
  368.  
  369.         mov     ecx,[rectangular_shade_x]
  370.         mov     [OldX],ecx                ; OldX <-----> 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     [OldY],ecx                ; OldY <-----> rectangulare_shade_y
  379.         mov     [rectangular_shade_y],ebx
  380.  
  381. no_remove_y_paste:
  382.         mov     eax,[OldX]
  383.         mov     ebx,[OldY]
  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.         mov     [y],edi
  412.  
  413. loop_fill_rectangle_y_paste:
  414.         mov     [x],esi
  415.  
  416. loop_fill_rectangle_x_paste:
  417.         push    esi edi
  418.         mov     ecx,[edx]
  419.         and     ecx,0xffffff ;color
  420.         mov     eax,[PointerToPicture]
  421.         mov     ebx,[Picture_SizeX]
  422.         mov     esi,[x]
  423.         mov     edi,[y]
  424.         call    PutPixel
  425.         pop     edi esi
  426.  
  427.         add     edx,3
  428.  
  429.         mov     eax,[x]
  430.         add     eax,[Dx_]
  431.         mov     [x],eax
  432.         cmp     eax,[rectangular_shade_x]
  433.         jl      loop_fill_rectangle_x_paste
  434.  
  435.         mov     eax,[y]
  436.         add     eax,[Dy_]
  437.         mov     [y],eax
  438.         cmp     eax,[rectangular_shade_y]
  439.         jl      loop_fill_rectangle_y_paste
  440.  
  441.         call    MovePictureToWorkScreen
  442.         mov     [Paste_flag],1
  443.         jmp     end_menu
  444. ;---------------------------------------------------------------------
  445. no_paste:
  446. ; <<< Cut >>>
  447.         cmp     [number_menu],5
  448.         jne     no_cut
  449.  
  450.         cmp     [instrument_used],1
  451.         jne     no_cut
  452.  
  453.         cmp     [Activate_instrument],0
  454.         jne     no_cut
  455.  
  456.         mov     eax,[OldX]
  457.         mov     ebx,[OldY]
  458.  
  459.         cmp     eax,[rectangular_shade_x]
  460.         jl      no_remove_x_cut
  461.  
  462.         mov     ecx,[rectangular_shade_x]
  463.         mov     [OldX],ecx                ; OldX <-----> rectangulare_shade_x
  464.         mov     [rectangular_shade_x],eax
  465.  
  466. no_remove_x_cut:
  467.         cmp     ebx,[rectangular_shade_y]
  468.         jl      no_remove_y_cut
  469.  
  470.         mov     ecx,[rectangular_shade_y]
  471.         mov     [OldY],ecx                ; OldY <-----> rectangulare_shade_y
  472.         mov     [rectangular_shade_y],ebx
  473.  
  474. no_remove_y_cut:
  475.         mov     eax,[OldX]
  476.         mov     ebx,[OldY]
  477.         mov     ecx,[rectangular_shade_x]
  478.         mov     edx,[rectangular_shade_y]
  479.         inc     eax
  480.         inc     ebx
  481.         dec     ecx
  482.         dec     edx
  483.  
  484.         mov     [x],eax
  485.         mov     [y],ebx
  486.         mov     esi,eax
  487.         mov     edi,ebx
  488.         mov     [Dx_],1
  489.         mov     [Dy_],1
  490.  
  491.         sub     ecx,eax
  492.         jnz     no_signum_fill_r_x
  493.  
  494.         mov     [Dx_],-1
  495.  
  496. no_signum_fill_r_x:
  497.         sub     edx,ebx
  498.         jnz     no_signum_fill_r_y
  499.  
  500.         mov     [Dy_],-1
  501.  
  502. no_signum_fill_r_y:
  503.         mov     [y],edi
  504.  
  505. loop_fill_rectangle_y:
  506.         mov     [x],esi
  507.  
  508. loop_fill_rectangle_x:
  509.         push    esi edi
  510.         mov     eax,[PointerToPicture]
  511.         mov     ebx,[Picture_SizeX]
  512.         mov     ecx,dword 0xffffff
  513.         mov     esi,[x]
  514.         mov     edi,[y]
  515.         call    PutPixel
  516.         pop     edi esi
  517.  
  518.         mov     eax,[x]
  519.         add     eax,[Dx_]
  520.         mov     [x],eax
  521.  
  522.         cmp     eax,[rectangular_shade_x]
  523.         jl      loop_fill_rectangle_x
  524.  
  525.         mov     eax,[y]
  526.         add     eax,[Dy_]
  527.         mov     [y],eax
  528.  
  529.         cmp     eax,[rectangular_shade_y]
  530.         jl      loop_fill_rectangle_y
  531.  
  532.         call    MovePictureToWorkScreen
  533.         jmp     end_menu
  534. ;---------------------------------------------------------------------
  535. no_cut:
  536. ; <<< Cleare all >>>
  537.         cmp     [number_menu],6
  538.         jne     no_cleare_all
  539.  
  540.         call    cleare_work_arrea
  541.         call    MovePictureToWorkScreen
  542.         jmp     end_menu
  543. ;---------------------------------------------------------------------
  544. no_cleare_all:
  545. ; <<< To allocate all >>>
  546.         cmp     [number_menu],7
  547.         jne     end_menu ;no_to_allocate_all
  548.  
  549.         mov     [OldX],1
  550.         mov     [OldY],1
  551.         mov     eax,[Picture_SizeX]
  552.         mov     ebx,[Picture_SizeY]
  553.         dec     eax
  554.         dec     ebx
  555.         mov     [rectangular_shade_x],eax
  556.         mov     [rectangular_shade_y],ebx
  557.         mov     [instrument_used],1
  558.         mov     [Activate_instrument],1
  559.         mov     [Current_instrument],30
  560.         mov     [crossing],0
  561. ;       call    TakeButtonInstruments
  562. ;       call    MovePictureToWorkScreen
  563.         jmp     end_menu
  564. ;---------------------------------------------------------------------
  565. ;no_to_allocate_all:
  566. no_edit:
  567. ;|||||||||||||||||||||||||INSTRUMENTS||||||||||||||||||||||
  568.         cmp     [number_panel],5
  569.         jne     no_instruments
  570.  
  571.         instrument_set  1,10 ; pensil
  572.         instrument_set  2,11 ; draw brush
  573.         instrument_set  3,12 ; spray
  574.         instrument_set  4,13 ; lastik
  575.         instrument_set  5,14 ; flood fill
  576.         instrument_set  6,15 ; pipetka
  577.         instrument_set  7,16 ; draw line
  578.         instrument_set  8,17 ; draw rectangle
  579.         instrument_set  9,18 ; draw circle
  580.         instrument_set 10,19 ; draw ellips
  581.         instrument_set 11,20 ; draw hard contour
  582.  
  583. no_instruments:
  584.  
  585. end_menu:
  586.         and     [number_panel],0
  587.         and     [number_menu],0
  588.         jmp     still
  589. ;---------------------------------------------------------------------