Subversion Repositories Kolibri OS

Rev

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

  1. #define MEMSIZE 1024 * 50
  2. #include "../lib/kolibri.h"
  3. #include "../lib/strings.h"
  4. #include "../lib/mem.h"
  5. #include "../lib/gui.h"
  6.  
  7. #include "../lib/obj/libimg.h"
  8. #include "../lib/obj/box_lib.h"
  9. #include "../lib/obj/proc_lib.h"
  10.  
  11. #ifndef AUTOBUILD
  12.         #include "lang.h--"
  13. #endif
  14.  
  15. /* === TRANSLATIONS === */
  16.  
  17. #define T_WTITLE "EasyShot v1.0"
  18.  
  19. #ifdef LANG_RUS
  20.         ?define T_TAKE_SCREENSHOT "  ‘¤¥« âì áªà¨­è®â"
  21.         ?define T_SETTINGS " áâனª¨"
  22.         ?define T_EDITBOX_FRAME " ãâì á®åà ­¥­¨ï áªà¨­è®â  "
  23.         ?define T_DELAY "‡ ¤¥à¦ª  ¢ ᥪ㭤 å"
  24.         ?define T_MINIMIZE "‘¢¥à­ãâì ®ª­® ¯à¨ á­¨¬ª¥"
  25.         ?define T_NO_DIR "' ¯ª  ­¥ áãé¥áâ¢ã¥â!' -E"
  26.         ?define T_SET_PATH "‡ ¤ âì"
  27. #else
  28.         ?define T_TAKE_SCREENSHOT "  Take a screenshot"
  29.         ?define T_SETTINGS "Settings"
  30.         ?define T_EDITBOX_FRAME " Save path "
  31.         ?define T_DELAY "Delay in seconds"
  32.         ?define T_MINIMIZE "Minimize window"
  33.         ?define T_NO_DIR "'Directory does not exists!' -E"
  34.         ?define T_SET_PATH "Set"
  35. #endif
  36.  
  37. /* === DATA === */     
  38.  
  39. proc_info Form;
  40. proc_info Settings;
  41.  
  42. dword screenshot;
  43. int screenshot_length;
  44.  
  45. enum {
  46.         BTN_MAKE_SCREENSHOT=10,
  47.         BTN_SETTINGS
  48. };
  49.  
  50. #define PD 18 //padding
  51.  
  52. char save_path[4096];
  53. char save_path_stable[4096];
  54. char open_dir[4096];
  55.  
  56. edit_box edit_save = {250,25,100,0xffffff,0x94AECE,0xFFFfff,0xffffff,
  57.         0x10000000,sizeof(save_path),#save_path,0, 0b};
  58.  
  59. more_less_box delay = { 1, 0, 64, T_DELAY };
  60. checkbox minimize = { T_MINIMIZE, true };
  61.  
  62.  
  63. opendialog open_folder_dialog =
  64. {
  65.   2, //0-file, 2-save, 3-select folder
  66.   #Settings,
  67.   #communication_area_name,
  68.   0,
  69.   0, //dword opendir_path,
  70.   #open_dir, //dword dir_default_path,
  71.   #open_dialog_path,
  72.   #DrawSettingsWindow,
  73.   0,
  74.   #open_dir, //dword openfile_path,
  75.   0, //dword filename_area,
  76.   0, //dword filter_area,
  77.   420,
  78.   NULL,
  79.   320,
  80.   NULL
  81. };
  82.  
  83. /* === CODE === */
  84.  
  85. void main()
  86. {      
  87.         int id;
  88.  
  89.         load_dll(libio,  #libio_init,  1);
  90.         load_dll(libimg, #libimg_init, 1);
  91.         load_dll(boxlib, #box_lib_init,0);
  92.         load_dll(Proc_lib,  #OpenDialog_init,0);
  93.         OpenDialog_init stdcall (#open_folder_dialog);
  94.  
  95.         system.color.get();
  96.         Libimg_LoadImage(#skin, "/sys/icons16.png");
  97.         Libimg_ReplaceColor(skin.image, skin.w, skin.h, 0xffFFFfff, system.color.work_button);
  98.         Libimg_ReplaceColor(skin.image, skin.w, skin.h, 0xffCACBD6, MixColors(system.color.work_button, 0, 200));
  99.         screenshot_length = screen.width * screen.height * 3;
  100.         screenshot = malloc(screenshot_length);
  101.  
  102.         strcpy(#save_path_stable, "/tmp0/1");
  103.         strcpy(#save_path, #save_path_stable);
  104.         edit_save.size = strlen(#save_path);
  105.  
  106.         loop() switch(WaitEvent())
  107.         {
  108.         case evButton:
  109.                 id = GetButtonID();
  110.                 if (id == CLOSE_BTN) ExitProcess();
  111.                 if (id == BTN_MAKE_SCREENSHOT) EventTakeScreenshot();
  112.                 if (id == BTN_SETTINGS) CreateThread(#SettingsWindow,#settings_stak+4092);
  113.                 break;
  114.  
  115.         case evKey:
  116.                 GetKeys();
  117.                 if (SCAN_CODE_ENTER == key_scancode) EventTakeScreenshot();
  118.                 break;
  119.      
  120.         case evReDraw:
  121.                 DefineAndDrawWindow(screen.width/4, screen.height-100/3, 270,
  122.                         skin_height + 27+PD+PD, 0x34, system.color.work, T_WTITLE,0);
  123.                 GetProcessInfo(#Form, SelfInfo);
  124.                 DrawMainContent();
  125.         }
  126. }
  127.  
  128. void DrawMainContent()
  129. {
  130.         int take_scr_btn_width;
  131.         take_scr_btn_width = DrawIconButton(PD, PD, BTN_MAKE_SCREENSHOT, T_TAKE_SCREENSHOT, 44);
  132.         DrawIconButton(PD+take_scr_btn_width, PD, BTN_SETTINGS, " ", 10);      
  133. }
  134.  
  135. void EventTakeScreenshot() {
  136.         if (minimize.checked) MinimizeWindow();
  137.         pause(delay.value*100);
  138.         CopyScreen(screenshot, 0, 0, screen.width, screen.height);
  139.         ActivateWindow(GetProcessSlot(Form.ID));
  140.         if (!minimize.checked) DrawMainContent();
  141.         EventSaveImageFile();
  142. }
  143.  
  144. void EventSaveImageFile()
  145. {
  146.         int i=0;
  147.         char save_file_name[4096];
  148.         do {
  149.                 i++;
  150.                 sprintf(#save_file_name, "%s/screen_%i.png", #save_path_stable, i);
  151.         } while (file_exists(#save_file_name));
  152.         save_image(screenshot, screen.width, screen.height, #save_file_name);
  153. }
  154.  
  155.  
  156. void SettingsWindow()
  157. {
  158.         #define BTN_OD 10
  159.         #define BTN_SET 11
  160.         int id, butw;
  161.         SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
  162.         loop() switch(WaitEvent())
  163.         {
  164.         case evMouse:
  165.                 edit_box_mouse stdcall (#edit_save);
  166.                 break;
  167.  
  168.         case evKey:
  169.                 GetKeys();
  170.                 if (SCAN_CODE_ESC == key_scancode) ExitProcess();
  171.                 EAX= key_ascii << 8;
  172.                 edit_box_key stdcall (#edit_save);     
  173.                 break;
  174.  
  175.         case evButton:
  176.                 id = GetButtonID();
  177.                 if (CLOSE_BTN == id) ExitProcess();
  178.                 if (BTN_OD == id) {
  179.                         OpenDialog_start stdcall (#open_folder_dialog);
  180.                         if (open_folder_dialog.status) {
  181.                                 strcpy(#save_path, open_folder_dialog.opendir_path);
  182.                                 edit_save.size = edit_save.pos = edit_save.shift
  183.                                         = edit_save.shift_old = strlen(#save_path);
  184.                         }
  185.                 }
  186.                 if (BTN_SET == id) {
  187.                         if (save_path[0]) && (dir_exists(#save_path)) {
  188.                                 strcpy(#save_path_stable, #save_path);
  189.                                 strrtrim(#save_path_stable);
  190.                                 if (save_path_stable[strlen(#save_path_stable)-1]=='/')
  191.                                     save_path_stable[strlen(#save_path_stable)-1]=NULL; //no "/" at the end
  192.                         }
  193.                         else notify(T_NO_DIR);
  194.  
  195.                 }
  196.                 delay.click(id);
  197.                 minimize.click(id);
  198.                 break;
  199.  
  200.         case evReDraw:
  201.                 DrawSettingsWindow();
  202.         }
  203. }
  204.  
  205. void DrawSettingsWindow()
  206. {
  207.         DefineAndDrawWindow(Form.left+100, Form.top-40, 400, 230, 0x34, system.color.work, T_SETTINGS, 0);
  208.         GetProcessInfo(#Settings, SelfInfo);
  209.         minimize.draw(15, 15);
  210.         delay.draw(15, 45);
  211.         DrawFrame(15, 85, 360, 95, T_EDITBOX_FRAME);
  212.                 DrawEditBoxPos(32, 110, #edit_save);
  213.                 DrawStandartCaptButton(edit_save.left + edit_save.width + 15, edit_save.top-3, BTN_OD, "...");
  214.                 DrawStandartCaptButton(edit_save.left, edit_save.top+32, BTN_SET, T_SET_PATH); 
  215. }
  216.  
  217. int DrawIconButton(dword x, y, id, text, icon)
  218. {
  219.         int btwidth;
  220.         btwidth = DrawStandartCaptButton(x, y, id, text);
  221.         img_draw stdcall(skin.image, x+12, y+5, 16, 16, 0, icon*16);
  222.         return btwidth;
  223. }
  224.  
  225. stop:
  226.  
  227. char settings_stak[4096];