Subversion Repositories Kolibri OS

Rev

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