Subversion Repositories Kolibri OS

Rev

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