Subversion Repositories Kolibri OS

Rev

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