Subversion Repositories Kolibri OS

Rev

Rev 6791 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4008 leency 1
//notify 0.8
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"
5499 leency 8
#include "..\lib\gui.h"
3067 leency 9
 
4008 leency 10
dword shadow_buf_24, shadow_buf_32, lighter_pixel1, lighter_pixel2;
4004 leency 11
 
4008 leency 12
?define PADDING 15;
13
 
3067 leency 14
int SCREEN_SIZE_X,
15
    SCREEN_SIZE_Y;
16
 
4004 leency 17
int WIN_X,
18
	WIN_Y,
19
    WIN_SIZE_X=256,
3067 leency 20
    WIN_SIZE_Y=28;
21
 
4008 leency 22
int TEXT_X=PADDING,
23
	TEXT_Y;
24
 
4004 leency 25
int delay = 400;
26
 
27
#ifdef LANG_RUS
28
	?define DEFAULT_TEXT "Эта программа показывает уведомления.";
29
#else
30
	?define DEFAULT_TEXT "This program shows notices. Open it with params.";
31
#endif
32
 
33
void PutText(dword x, y) {
4008 leency 34
	WriteBufText(x,y, 0x88, 0, #param, shadow_buf_32);
4004 leency 35
}
36
 
4008 leency 37
void Text()
38
{
39
	PutText(TEXT_X-1,TEXT_Y+1);
40
	PutText(TEXT_X-1,TEXT_Y-1);
41
	PutText(TEXT_X-1,TEXT_Y  );
42
	PutText(TEXT_X+1,TEXT_Y-1);
43
	PutText(TEXT_X+1,TEXT_Y  );
44
	PutText(TEXT_X+1,TEXT_Y+1);
45
	PutText(TEXT_X,  TEXT_Y+1);
46
	PutText(TEXT_X,  TEXT_Y-1);
47
	WriteBufText(TEXT_X, TEXT_Y, 0x88, 0xFFFfff, #param, shadow_buf_32);
48
}
49
 
4474 leency 50
void from24to32(ESI, EDI, EAX, EBX) //src,dst,w,h
4008 leency 51
{
52
conv24to32:
4474 leency 53
	$mul ebx
4008 leency 54
	$mov ecx, eax
55
	$xor al, al
56
_next:
57
	$movsw
58
	$movsb
59
	$stosb
60
	$loop _next
61
}
62
 
4064 leency 63
void DrawBackground()
64
{
65
	PutPaletteImage(shadow_buf_32+8,WIN_SIZE_X,WIN_SIZE_Y,0,0,32,0);
66
	PutPixel(0,0,ESDWORD[lighter_pixel1]);
67
	PutPixel(0,WIN_SIZE_Y-1,ESDWORD[lighter_pixel2]);
68
}
4008 leency 69
 
4004 leency 70
void GetBackground()
71
{
4008 leency 72
	int i;
4064 leency 73
	static int was_once;
4008 leency 74
 
4064 leency 75
	if (was_once)
76
	{
77
		DrawBackground();
78
		return;
79
	}
4008 leency 80
	for (i=1; i<=6; i++)
81
	{
4064 leency 82
		was_once = 1;
4008 leency 83
		ShadowImage(shadow_buf_24, WIN_SIZE_X, WIN_SIZE_Y, 1);
84
		if (i%2 == 0) ShadowImage(lighter_pixel1, 1, 1, 1);
85
		if (i%2 == 0) ShadowImage(lighter_pixel2, 1, 1, 1);
86
		from24to32(shadow_buf_24, shadow_buf_32+8, WIN_SIZE_X, WIN_SIZE_Y);
87
		Text();
4064 leency 88
		DrawBackground();
4008 leency 89
		pause(5);
90
	}
4004 leency 91
}
92
 
4008 leency 93
void Exit()
94
{
95
	ExitProcess();
96
}
4004 leency 97
 
4008 leency 98
 
3067 leency 99
void main()
4008 leency 100
{
4004 leency 101
	if (!param)	strcpy(#param, DEFAULT_TEXT);
3376 leency 102
	if (strlen(#param)*6>WIN_SIZE_X)
103
	{
4004 leency 104
		WIN_SIZE_X=strlen(#param)*6+PADDING;
3376 leency 105
		delay = strlen(#param)*10;
106
	}
4004 leency 107
 
108
	SCREEN_SIZE_X=GetScreenWidth()+1;
109
	WIN_X = SCREEN_SIZE_X-WIN_SIZE_X-1;
110
	WIN_Y = GetClientTop();
4008 leency 111
	TEXT_X = -6*strlen(#param)+WIN_SIZE_X/2+1;
112
	TEXT_Y = WIN_SIZE_Y/2-4;
3067 leency 113
 
4004 leency 114
	//emulate multithread :)
6791 leency 115
	while (GetPixelColorFromScreen(SCREEN_SIZE_X-1, WIN_Y)==0x333333) WIN_Y+=WIN_SIZE_Y+17;
3067 leency 116
 
4008 leency 117
	shadow_buf_24 = malloc(WIN_SIZE_X*WIN_SIZE_Y*3);
118
	shadow_buf_32 = malloc(WIN_SIZE_X*WIN_SIZE_Y*4+8);
4004 leency 119
	lighter_pixel1 = malloc(3);
120
	lighter_pixel2 = malloc(3);
4008 leency 121
	CopyScreen(shadow_buf_24, WIN_X, WIN_Y, WIN_SIZE_X, WIN_SIZE_Y);
122
	CopyScreen(lighter_pixel1, WIN_X, WIN_Y, 1, 1);
123
	CopyScreen(lighter_pixel2, WIN_X, WIN_Y+WIN_SIZE_Y, 1, 1);
124
	ESDWORD[shadow_buf_32] = WIN_SIZE_X;
125
	ESDWORD[shadow_buf_32+4] = WIN_SIZE_Y;
3363 leency 126
 
3067 leency 127
	loop()
3369 leency 128
	{
3376 leency 129
		WaitEventTimeout(delay);
3067 leency 130
		switch(EAX & 0xFF)
131
		{
132
		case evButton:
4008 leency 133
			Exit();
3067 leency 134
			break;
135
 
136
		case evReDraw:
4004 leency 137
			DefineAndDrawWindow(WIN_X+1,WIN_Y,WIN_SIZE_X, WIN_SIZE_Y-1, 0x01, 0, 0, 0x01fffFFF);
4008 leency 138
			DrawBar(WIN_SIZE_X,0, 1, WIN_SIZE_Y, 0x333333);
3067 leency 139
			DefineButton(0,0, WIN_SIZE_X, WIN_SIZE_Y, 1+BT_HIDE+BT_NOFRAME, 0);
4008 leency 140
			GetBackground();
141
			break;
4004 leency 142
 
3067 leency 143
		default:
4008 leency 144
			Exit();
3067 leency 145
      }
146
   }
147
}
148
 
149
 
150
stop: