Subversion Repositories Kolibri OS

Rev

Rev 3376 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4004 leency 1
//notify 0.7
3370 leency 2
//SoUrcerer 2010, Leency 2012-2013, GNU GPLv2
3067 leency 3
 
4004 leency 4
#define MEMSIZE 0x2F00
3067 leency 5
#include "..\lib\kolibri.h"
6
#include "..\lib\strings.h"
3363 leency 7
#include "..\lib\mem.h"
8
#include "..\lib\figures.h"
3067 leency 9
 
4004 leency 10
?define PADDING 12;
11
 
3067 leency 12
int SCREEN_SIZE_X,
13
    SCREEN_SIZE_Y;
14
 
4004 leency 15
int WIN_X,
16
	WIN_Y,
17
    WIN_SIZE_X=256,
3067 leency 18
    WIN_SIZE_Y=28;
19
 
4004 leency 20
int delay = 400;
21
 
22
#include "lang.h--"
23
#ifdef LANG_RUS
24
	?define DEFAULT_TEXT "Эта программа показывает уведомления.";
25
#else
26
	?define DEFAULT_TEXT "This program shows notices. Open it with params.";
27
#endif
28
 
29
void PutText(dword x, y) {
30
	WriteText(x,y, 0x80, 0, #param);
31
}
32
 
33
inline fastcall int GetClientTop()
34
{
35
	$mov eax, 48
36
	$mov ebx, 5
37
	$int 0x40
38
    $mov eax, ebx
39
    $shr eax, 16
40
}
41
 
42
dword shadow_buf, lighter_pixel1, lighter_pixel2;
43
void GetBackground()
44
{
45
	CopyScreen(shadow_buf, WIN_X, WIN_Y, WIN_SIZE_X, WIN_SIZE_Y);
46
	CopyScreen(lighter_pixel1, WIN_X, WIN_Y, 1, 1);
47
	CopyScreen(lighter_pixel2, WIN_X, WIN_Y+WIN_SIZE_Y, 1, 1);
48
	ShadowImage(shadow_buf, WIN_SIZE_X, WIN_SIZE_Y, 6);
49
	ShadowImage(lighter_pixel1, 1, 1, 2);
50
	ShadowImage(lighter_pixel2, 1, 1, 2);
51
}
52
 
53
 
3067 leency 54
void main()
55
{
56
	int TEXT_X=4,
57
	    TEXT_Y=12;
4004 leency 58
	char drawn;
3067 leency 59
 
4004 leency 60
	if (!param)	strcpy(#param, DEFAULT_TEXT);
3376 leency 61
	if (strlen(#param)*6>WIN_SIZE_X)
62
	{
4004 leency 63
		WIN_SIZE_X=strlen(#param)*6+PADDING;
3376 leency 64
		delay = strlen(#param)*10;
65
	}
4004 leency 66
 
67
	SCREEN_SIZE_X=GetScreenWidth()+1;
68
	WIN_X = SCREEN_SIZE_X-WIN_SIZE_X-1;
69
	WIN_Y = GetClientTop();
70
	TEXT_X = -6*strlen(#param)+WIN_SIZE_X/2;
71
	TEXT_Y = WIN_SIZE_Y/2-3;
3067 leency 72
 
4004 leency 73
	//emulate multithread :)
3363 leency 74
	while (GetPixelColor(SCREEN_SIZE_X-1, SCREEN_SIZE_X, WIN_Y)==0x333333) WIN_Y+=WIN_SIZE_Y+17;
3067 leency 75
 
4004 leency 76
	mem_Init();
77
	shadow_buf = malloc(WIN_SIZE_X*WIN_SIZE_Y*3);
78
	lighter_pixel1 = malloc(3);
79
	lighter_pixel2 = malloc(3);
80
	GetBackground();
3363 leency 81
 
3067 leency 82
	loop()
3369 leency 83
	{
3376 leency 84
		WaitEventTimeout(delay);
3067 leency 85
		switch(EAX & 0xFF)
86
		{
87
		case evButton:
4004 leency 88
			ExitProcess();
3067 leency 89
			break;
90
 
91
		case evReDraw:
4004 leency 92
			DefineAndDrawWindow(WIN_X+1,WIN_Y,WIN_SIZE_X, WIN_SIZE_Y-1, 0x01, 0, 0, 0x01fffFFF);
93
			if (drawn==1)
94
			{
95
				drawn=2;
96
				MoveSize(0,0,-1,-1);
97
				pause(3);
98
				GetBackground();
99
				MoveSize(WIN_X,WIN_Y,-1,-1);
100
				drawn=1;
101
			}
3067 leency 102
			DefineButton(0,0, WIN_SIZE_X, WIN_SIZE_Y, 1+BT_HIDE+BT_NOFRAME, 0);
4004 leency 103
 
104
			_PutImage(0,0,WIN_SIZE_X,WIN_SIZE_Y,shadow_buf);
105
			PutPixel(0,0,ESDWORD[lighter_pixel1]);
106
			PutPixel(0,WIN_SIZE_Y-1,ESDWORD[lighter_pixel2]);
3363 leency 107
			DrawBar(WIN_SIZE_X,0, 1, WIN_SIZE_Y, 0x333333);
4004 leency 108
 
109
			PutText(TEXT_X-1,TEXT_Y+1);
110
			PutText(TEXT_X-1,TEXT_Y-1);
111
			PutText(TEXT_X-1,TEXT_Y  );
112
			PutText(TEXT_X+1,TEXT_Y-1);
113
			PutText(TEXT_X+1,TEXT_Y  );
114
			PutText(TEXT_X+1,TEXT_Y+1);
115
			PutText(TEXT_X,  TEXT_Y+1);
116
			PutText(TEXT_X,  TEXT_Y-1);
117
			WriteText(TEXT_X,  TEXT_Y,   0x80, 0xFFFfff, #param);
118
			if (drawn==0) drawn=1;
3067 leency 119
			break;
120
		default:
121
			ExitProcess();
122
      }
123
   }
124
}
125
 
126
 
127
stop: