Subversion Repositories Kolibri OS

Rev

Rev 7911 | Rev 8389 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7911 Rev 7984
1
#define MEMSIZE 1024 * 50
1
#define MEMSIZE 1024 * 50
2
#include "../lib/kolibri.h" 
2
#include "../lib/kolibri.h" 
3
#include "../lib/strings.h" 
3
#include "../lib/strings.h" 
4
#include "../lib/mem.h" 
4
#include "../lib/mem.h" 
5
#include "../lib/gui.h" 
5
#include "../lib/gui.h" 
6
 
6
 
7
#include "../lib/obj/libimg.h"
7
#include "../lib/obj/libimg.h"
8
#include "../lib/obj/box_lib.h"
8
#include "../lib/obj/box_lib.h"
9
#include "../lib/obj/proc_lib.h"
9
#include "../lib/obj/proc_lib.h"
10
 
10
 
11
#ifndef AUTOBUILD
11
#ifndef AUTOBUILD
12
	#include "lang.h--"
12
	#include "lang.h--"
13
#endif
13
#endif
14
 
14
 
15
/* === TRANSLATIONS === */
15
/* === TRANSLATIONS === */
16
 
16
 
17
#ifdef LANG_RUS
17
#ifdef LANG_RUS
18
	?define T_TAKE_SCREENSHOT "‘¤¥« âì áªà¨­è®â"
18
	?define T_TAKE_SCREENSHOT "‘¤¥« âì áªà¨­è®â"
19
	?define T_SETTINGS " áâனª¨"
19
	?define T_SETTINGS " áâனª¨"
20
	?define T_EDITBOX_FRAME "ãâì á®åà ­¥­¨ï áªà¨­è®â "
20
	?define T_EDITBOX_FRAME "ãâì á®åà ­¥­¨ï áªà¨­è®â "
21
	?define T_DELAY "‡ ¤¥à¦ª  ¢ ᥪ㭤 å"
21
	?define T_DELAY "‡ ¤¥à¦ª  ¢ ᥪ㭤 å"
22
	?define T_NO_DIR "' ¯ª  ­¥ áãé¥áâ¢ã¥â!' -E"
22
	?define T_NO_DIR "' ¯ª  ­¥ áãé¥áâ¢ã¥â!' -E"
23
#else
23
#else
24
	?define T_TAKE_SCREENSHOT "Take a screenshot"
24
	?define T_TAKE_SCREENSHOT "Take a screenshot"
25
	?define T_SETTINGS "Settings"
25
	?define T_SETTINGS "Settings"
26
	?define T_EDITBOX_FRAME "Save path"
26
	?define T_EDITBOX_FRAME "Save path"
27
	?define T_DELAY "Delay in seconds"
27
	?define T_DELAY "Delay in seconds"
28
	?define T_NO_DIR "'Directory does not exists!' -E"
28
	?define T_NO_DIR "'Directory does not exists!' -E"
29
#endif
29
#endif
30
 
30
 
31
/* === DATA === */	
31
/* === DATA === */	
32
 
32
 
33
proc_info Form;
33
proc_info Form;
34
 
34
 
35
enum {
35
enum {
36
	BTN_MAKE_SCREENSHOT=10,
36
	BTN_MAKE_SCREENSHOT=10,
37
	BTN_SETTINGS,
37
	BTN_SETTINGS,
38
	BTN_CHOOSE_SAVING_PATH
38
	BTN_CHOOSE_SAVING_PATH
39
};
39
};
40
 
40
 
41
#define PD 18 //padding
41
#define PD 18 //padding
42
#define SETTINGS_Y PD+PD+30+10
42
#define SETTINGS_Y PD+PD+30+10
43
 
43
 
44
char save_path[4096];
44
char save_path[4096];
45
char open_dir[4096];
45
char open_dir[4096];
46
 
46
 
47
more_less_box delay = { 1, 0, SETTINGS_Y, T_DELAY };
47
more_less_box delay = { 1, 0, SETTINGS_Y, T_DELAY };
48
edit_box edit_save = {260,PD,SETTINGS_Y+50,0xffffff,0x94AECE,0xFFFfff,0xffffff,
48
edit_box edit_save = {260,PD,SETTINGS_Y+50,0xffffff,0x94AECE,0xFFFfff,0xffffff,
49
	0x10000000,sizeof(save_path)-2,#save_path,0, 0b};
49
	0x10000000,sizeof(save_path)-2,#save_path,0, 0b};
50
 
50
 
51
bool show_settings = false;
51
bool show_settings = false;
52
 
52
 
53
opendialog open_folder_dialog = 
53
opendialog open_folder_dialog = 
54
{
54
{
55
  2, //0-file, 2-save, 3-select folder
55
  2, //0-file, 2-save, 3-select folder
56
  #Form,
56
  #Form,
57
  #communication_area_name,
57
  #communication_area_name,
58
  0,
58
  0,
59
  0, //dword opendir_path,
59
  0, //dword opendir_path,
60
  #open_dir, //dword dir_default_path,
60
  #open_dir, //dword dir_default_path,
61
  #open_dialog_path,
61
  #open_dialog_path,
62
  #DrawWindow,
62
  #DrawWindow,
63
  0,
63
  0,
64
  #open_dir, //dword openfile_path,
64
  #open_dir, //dword openfile_path,
65
  0, //dword filename_area,
65
  0, //dword filename_area,
66
  0, //dword filter_area,
66
  0, //dword filter_area,
67
  420,
67
  420,
68
  NULL,
68
  NULL,
69
  320,
69
  320,
70
  NULL
70
  NULL
71
};
71
};
72
 
72
 
73
/* === CODE === */
73
/* === CODE === */
74
 
74
 
75
void init_libraries()
75
void init_libraries()
76
{
76
{
77
	load_dll(libio,  #libio_init,  1);
77
	load_dll(libio,  #libio_init,  1);
78
	load_dll(libimg, #libimg_init, 1);
78
	load_dll(libimg, #libimg_init, 1);
79
	load_dll(boxlib, #box_lib_init,0);
79
	load_dll(boxlib, #box_lib_init,0);
80
	load_dll(Proc_lib,  #OpenDialog_init,0);
80
	load_dll(Proc_lib,  #OpenDialog_init,0);
81
	OpenDialog_init stdcall (#open_folder_dialog);	
81
	OpenDialog_init stdcall (#open_folder_dialog);	
82
}
82
}
83
 
83
 
84
void main()
84
void main()
85
{	
85
{	
86
	int id;
86
	int id;
87
 
87
 
88
	init_libraries();
88
	init_libraries();
89
 
89
 
90
	strcpy(#save_path, "/tmp0/1");
90
	strcpy(#save_path, "/tmp0/1");
91
	EditBox_UpdateText(#edit_save, 0);
91
	EditBox_UpdateText(#edit_save, 0);
92
 
92
 
93
	SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
93
	@SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
94
	loop() switch(WaitEvent())
94
	loop() switch(@WaitEvent())
95
	{
95
	{
96
	case evMouse:
96
	case evMouse:
97
		edit_box_mouse stdcall (#edit_save);
97
		edit_box_mouse stdcall (#edit_save);
98
		break;
98
		break;
99
 
99
 
100
	case evButton:
100
	case evButton:
101
		id = GetButtonID();
101
		id = @GetButtonID();
102
		switch(id){
102
		switch(id){
103
			case CLOSE_BTN: ExitProcess();
103
			case CLOSE_BTN: ExitProcess();
104
			case BTN_MAKE_SCREENSHOT: EventTakeScreenshot(); break;
104
			case BTN_MAKE_SCREENSHOT: EventTakeScreenshot(); break;
105
			case BTN_SETTINGS: EventClickSettings(); break;
105
			case BTN_SETTINGS: EventClickSettings(); break;
106
			case BTN_CHOOSE_SAVING_PATH: EventChooseSavePath(); break;
106
			case BTN_CHOOSE_SAVING_PATH: EventChooseSavePath(); break;
107
			default: delay.click(id);
107
			default: delay.click(id);
108
		}
108
		}
109
		break;
109
		break;
110
 
110
 
111
	case evKey:
111
	case evKey:
112
		GetKeys();
112
		GetKey();
113
		if (SCAN_CODE_ENTER == key_scancode) EventTakeScreenshot();
-
 
114
		if (SCAN_CODE_ESC == key_scancode) ExitProcess();
-
 
115
		EAX = key_editbox;
-
 
116
		edit_box_key stdcall (#edit_save);	
113
		edit_box_key stdcall (#edit_save);
-
 
114
		EAX >>= 16;
-
 
115
		if (SCAN_CODE_ENTER == AL) EventTakeScreenshot();
-
 
116
		if (SCAN_CODE_ESC == AL) ExitProcess();
117
		break;
117
		break;
118
     
118
     
119
	case evReDraw:
119
	case evReDraw:
120
		DrawWindow();
120
		DrawWindow();
121
	}
121
	}
122
}
122
}
123
 
123
 
124
 
124
 
125
void DrawWindow()
125
void DrawWindow()
126
{
126
{
127
	int i;
127
	int i;
128
 
128
 
129
	sc.get();
129
	sc.get();
130
	DefineAndDrawWindow(screen.width-400, screen.height/3, 270, 
130
	DefineAndDrawWindow(screen.width-400, screen.height/3, 270, 
131
		skin_height + 30+PD+PD, 0x34, sc.work, "EasyShot",0);
131
		skin_height + 30+PD+PD, 0x34, sc.work, "EasyShot",0);
132
	GetProcessInfo(#Form, SelfInfo);
132
	GetProcessInfo(#Form, SelfInfo);
133
 
133
 
134
	DrawCaptButton(PD, PD, 170, 28, BTN_MAKE_SCREENSHOT, 0x0090B8, 0xFFFfff, T_TAKE_SCREENSHOT);
134
	DrawCaptButton(PD, PD, 170, 28, BTN_MAKE_SCREENSHOT, 0x0090B8, 0xFFFfff, T_TAKE_SCREENSHOT);
135
	DefineButton(PD+170+20, PD, 35, 28, BTN_SETTINGS, sc.button);
135
	DefineButton(PD+170+20, PD, 35, 28, BTN_SETTINGS, sc.button);
136
	for (i=0; i<=2; i++) DrawBar(PD+170+30, i*5+PD+9, 15, 2, sc.button_text);
136
	for (i=0; i<=2; i++) DrawBar(PD+170+30, i*5+PD+9, 15, 2, sc.button_text);
137
	delay.draw(PD, SETTINGS_Y);
137
	delay.draw(PD, SETTINGS_Y);
138
	DrawFileBox(#edit_save, T_EDITBOX_FRAME, BTN_CHOOSE_SAVING_PATH);	
138
	DrawFileBox(#edit_save, T_EDITBOX_FRAME, BTN_CHOOSE_SAVING_PATH);	
139
}
139
}
140
 
140
 
141
 
141
 
142
void EventChooseSavePath()
142
void EventChooseSavePath()
143
{
143
{
144
	OpenDialog_start stdcall (#open_folder_dialog);
144
	OpenDialog_start stdcall (#open_folder_dialog);
145
	if (open_folder_dialog.status) {
145
	if (open_folder_dialog.status) {
146
		strcpy(#save_path, open_folder_dialog.opendir_path);
146
		strcpy(#save_path, open_folder_dialog.opendir_path);
147
		EditBox_UpdateText(#edit_save, 0);		
147
		EditBox_UpdateText(#edit_save, 0);		
148
	}
148
	}
149
}
149
}
150
 
150
 
151
 
151
 
152
void EventClickSettings()
152
void EventClickSettings()
153
{
153
{
154
	show_settings ^= 1;
154
	show_settings ^= 1;
155
	MoveSize(OLD, OLD, show_settings*75 + 270, 
155
	MoveSize(OLD, OLD, show_settings*75 + 270, 
156
		show_settings*110 + skin_height + PD+PD+30);
156
		show_settings*110 + skin_height + PD+PD+30);
157
}
157
}
158
 
158
 
159
 
159
 
160
void EventTakeScreenshot() 
160
void EventTakeScreenshot() 
161
{
161
{
162
	int i=0;
162
	int i=0;
163
	char save_file_name[4096];
163
	char save_file_name[4096];
164
	static dword screenshot;
164
	static dword screenshot;
165
 
165
 
166
	if (!screenshot) screenshot = malloc(screen.width * screen.height * 3);
166
	if (!screenshot) screenshot = malloc(screen.width * screen.height * 3);
167
 
167
 
168
	do {
168
	do {
169
		i++;
169
		i++;
170
		//sprintf(, "%s/screen_%i.png", #save_path, i);
170
		//sprintf(, "%s/screen_%i.png", #save_path, i);
171
		strcpy(#save_file_name, #save_path);
171
		strcpy(#save_file_name, #save_path);
172
		if (save_file_name[strlen(#save_file_name)-1]!='/') chrcat(#save_file_name, '/');
172
		if (save_file_name[strlen(#save_file_name)-1]!='/') chrcat(#save_file_name, '/');
173
		strcat(#save_file_name, "screen_");
173
		strcat(#save_file_name, "screen_");
174
		strcat(#save_file_name, itoa(i));
174
		strcat(#save_file_name, itoa(i));
175
		strcat(#save_file_name, ".png");
175
		strcat(#save_file_name, ".png");
176
	} while (file_exists(#save_file_name));
176
	} while (file_exists(#save_file_name));
177
 
177
 
178
	if (!dir_exists(#save_path)) {
178
	if (!dir_exists(#save_path)) {
179
		notify(T_NO_DIR);
179
		notify(T_NO_DIR);
180
		return;
180
		return;
181
	}
181
	}
182
 
182
 
183
	MinimizeWindow(); 
183
	MinimizeWindow(); 
184
	pause(delay.value*100);
184
	pause(delay.value*100);
185
	CopyScreen(screenshot, 0, 0, screen.width, screen.height);
185
	CopyScreen(screenshot, 0, 0, screen.width, screen.height);
186
	save_image(screenshot, screen.width, screen.height, #save_file_name);
186
	save_image(screenshot, screen.width, screen.height, #save_file_name);
187
	ActivateWindow(GetProcessSlot(Form.ID));
187
	ActivateWindow(GetProcessSlot(Form.ID));
188
}
188
}