Subversion Repositories Kolibri OS

Rev

Rev 5778 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5778 Rev 5782
Line 7... Line 7...
7
 
7
 
8
#ifndef INCLUDE_IO_H
8
#ifndef INCLUDE_IO_H
9
#include "../lib/io.h"
9
#include "../lib/io.h"
Line 10... Line -...
10
#endif
-
 
11
 
-
 
12
 
-
 
13
#define CP866 0
-
 
14
#define ANSI   1
10
#endif
15
 
11
 
16
:struct __SIZE
12
:struct __SIZE
17
{
13
{
18
	word width,height;
14
	word width,height;
Line 36... Line 32...
36
	dword size_file;
32
	dword size_file;
37
	byte load(...);
33
	byte load(...);
38
	byte symbol(word x;byte s;dword c);
34
	byte symbol(word x;byte s;dword c);
39
	byte symbol_size(byte s);
35
	byte symbol_size(byte s);
40
	dword prepare(word x,y;dword text1);
36
	dword prepare(word x,y;dword text1);
-
 
37
	void prepare_buf(word x,y,w,h;dword text1);
41
	void show(word x,y);
38
	void show(word x,y);
42
	byte textcenter(word x,y,w,h;dword txt);
39
	byte textcenter(word x,y,w,h;dword txt);
43
	dword getsize(dword text1);
40
	dword getsize(dword text1);
44
	dword textarea(word x,y;dword text,c);
41
	dword textarea(word x,y;dword text,c);
45
	byte changeSIZE();
42
	byte changeSIZE();
46
	void PixelRGB(word x,y);
43
	void PixelRGB(word x,y);
47
	dword GetPixel(word x,y);
44
	//dword GetPixel(word x,y);
48
	dword tmp_y,tmp_height,tmp_x;
-
 
49
	byte no_bg_copy;
45
	byte no_bg_copy;
50
	dword bg_color;
46
	dword bg_color;
51
};
47
};
52
FONT font = 0;
48
FONT font = 0;
53
 
49
/*
54
:dword FONT::GetPixel(word x,y)
50
:dword FONT::GetPixel(word x,y)
55
{
51
{
56
	dword tmp;
-
 
57
	tmp = y*size.width*3;
52
	dword tmp = y*size.width*3;
58
	tmp += x*3;
-
 
59
	tmp += buffer;
53
	tmp += x*3 + buffer;
60
	r = DSBYTE[tmp];
54
	r = DSBYTE[tmp];
61
	tmp++;
-
 
62
	g = DSBYTE[tmp];
55
	g = DSBYTE[tmp+1];
63
	tmp++;
-
 
64
	b = DSBYTE[tmp];
56
	b = DSBYTE[tmp+2];
65
}
57
}*/
66
:void FONT::PixelRGB(dword x,y)
58
:void FONT::PixelRGB(dword x,y)
67
{
59
{
68
	dword tmp;
-
 
69
	tmp = y*size.width*3;
60
	dword tmp = y*size.width*3;
70
	tmp += x*3;
-
 
71
	tmp += buffer;
61
	tmp += x*3 + buffer;
72
 
-
 
73
	DSBYTE[tmp] = r;
62
	DSBYTE[tmp] = r;
74
	tmp++;
-
 
75
	DSBYTE[tmp] = g;
63
	DSBYTE[tmp+1] = g;
76
	tmp++;
-
 
77
	DSBYTE[tmp] = b;
64
	DSBYTE[tmp+2] = b;
78
}
65
}
79
:byte FONT::changeSIZE()
66
:byte FONT::changeSIZE()
80
{
67
{
81
	dword TMP_DATA;
68
	dword TMP_DATA;
82
	dword ofs;
69
	dword ofs;
Line 161... Line 148...
161
			ELSE IF(s==241)s=184; //yo
148
			ELSE IF(s==241)s=184; //yo
162
			ELSE IF(s==240)s=168; //YO
149
			ELSE IF(s==240)s=168; //YO
163
		}
150
		}
164
        yi = 0;
151
        yi = 0;
165
        iii = 0;
152
        iii = 0;
166
        tmp = 4*block*s;
153
        tmp = 4*block*s + data;
167
        tmp +=data;
-
 
168
        while(yi
154
        while(yi
169
        {
155
        {
170
                xi = 0;
156
                xi = 0;
171
                WHILE(xi
157
                WHILE(xi
172
                {
158
                {
Line 197... Line 183...
197
}
183
}
198
:dword FONT::prepare(word x,y;dword text1)
184
:dword FONT::prepare(word x,y;dword text1)
199
{
185
{
200
	signed len=0;
186
	signed len=0;
201
	dword c;
187
	dword c;
202
	word _tmp_h;
-
 
203
	c = color;
188
	c = color;
204
	IF(!text1)return false;
189
	IF(!text1)return false;
205
	IF(size.text)IF(!changeSIZE())return false;
190
	IF(size.text)IF(!changeSIZE())return false;
206
	GetProcessInfo(#Form_SELF_FONTS, SelfInfo); 
191
	GetProcessInfo(#Form_SELF_FONTS, SelfInfo); 
207
	IF(y>Form_SELF_FONTS.cheight) return false;
192
	IF(y>Form_SELF_FONTS.cheight) return false;
Line 212... Line 197...
212
	c>>=16;
197
	c>>=16;
213
	AX = c;
198
	AX = c;
214
	b = AL;
199
	b = AL;
215
	getsize(text1);
200
	getsize(text1);
216
	y -= size.offset_y;
201
	y -= size.offset_y;
217
	tmp_y = y;
-
 
Line 218... Line 202...
218
	
202
	
219
	EDX = size.width*size.height*3;
203
	EDX = size.width*size.height*3;
220
	IF(!buffer_size)
204
	IF(!buffer_size)
221
	{
205
	{
Line 318... Line 302...
318
					if(_&1)
302
				if(_&1)
319
					{
303
				{
320
							IF(xi>rw)rw=xi;
304
						IF(xi>rw)rw=xi;
321
							___x = x+xi;
305
						___x = x+xi;
322
							IF(italic)___x+=math.ceil(ital);
306
						IF(italic)___x+=math.ceil(ital);
323
							if(___x
-
 
324
							{
-
 
325
								PixelRGB(___x,TMP);
307
						PixelRGB(___x,TMP);
326
								_TMP_WEIGHT = size.TMP_WEIGHT;
308
						_TMP_WEIGHT = size.TMP_WEIGHT;
327
								WHILE(_TMP_WEIGHT)
309
						WHILE(_TMP_WEIGHT)
328
								{
310
						{
329
									IF(weight) PixelRGB(___x+_TMP_WEIGHT,TMP);
311
							IF(weight) PixelRGB(___x+_TMP_WEIGHT,TMP);
330
									_TMP_WEIGHT--;
312
							_TMP_WEIGHT--;
331
								}
313
						}
332
							}
314
				}
333
					}
-
 
334
					xi++;
315
				xi++;
335
					iii++;
316
				iii++;
336
                }
317
            }
337
                yi++;
318
            yi++;
338
				IF(italic) ital-=size.offset_i;
319
			IF(italic) ital-=size.offset_i;
339
        }
320
        }
340
        return rw;
321
        return rw;
341
}
322
}
342
:byte FONT::load(dword path)
323
:byte FONT::load(dword path)
343
{
324
{
344
	dword tmp;
-
 
345
	buffer_size = 0;
325
	buffer_size = 0;
346
	IF(data)free(data);
326
	IF(data)free(data);
347
	if (!io.readKPACK(path))
-
 
348
	{
-
 
349
		debug("Error while loading font: ");
327
	if (!io.readKPACK(path)) { debug("Error while loading font: "); debugln(path); return false; }
350
		debugln(path);
-
 
351
		return false;
-
 
352
	}
-
 
353
	begin = tmp = data = io.buffer_data;
328
	begin = data = io.buffer_data;
354
	size_file = io.FILES_SIZE;
329
	size_file = io.FILES_SIZE;
355
	tmp +=size_file;
330
	EBX = begin + size_file;
356
	tmp--;
-
 
357
	height = DSBYTE[tmp];
331
	height = DSBYTE[EBX - 1];
358
	tmp--;
-
 
359
	width = DSBYTE[tmp];
332
	width = DSBYTE[EBX - 2];
360
	block = math.ceil(height*width/32);
333
	block = math.ceil(height*width/32);
361
	return true;
334
	return true;
362
}
335
}
Line -... Line 336...
-
 
336
 
-
 
337
:void FONT::prepare_buf(word x,y,w,h; dword text1)
-
 
338
{
-
 
339
	signed len=0;
-
 
340
	dword c;
-
 
341
	c = color;
-
 
342
	IF(!text1)return;
-
 
343
	IF(size.text)IF(!changeSIZE())return;
-
 
344
	GetProcessInfo(#Form_SELF_FONTS, SelfInfo); 
-
 
345
	AX = c; r = AL; g = AH; c>>=16; AX = c; b = AL;
-
 
346
	getsize(text1);
-
 
347
	y -= size.offset_y;
-
 
348
	
-
 
349
	size.width = w;
-
 
350
	size.height = y;
-
 
351
	EDX = size.width*size.height*3;
-
 
352
	IF(!buffer_size)
-
 
353
	{
-
 
354
		buffer_size = EDX;
-
 
355
		buffer = malloc(buffer_size);
-
 
356
		EBX = bg_color;
-
 
357
		EDI = buffer;
-
 
358
		EAX = buffer_size+EDI;
-
 
359
		WHILE (EDI
-
 
360
		{
-
 
361
			ESDWORD[EDI] = EBX;
-
 
362
			$add edi,3
-
 
363
		}
-
 
364
	}
-
 
365
	WHILE(DSBYTE[text1])
-
 
366
	{
-
 
367
		x+=symbol(x,DSBYTE[text1]);
-
 
368
		IF(weight)x+=math.ceil(size.text/17);
-
 
369
		text1++;
-
 
370
	}
-
 
371
	return;
-
 
372
}
-
 
373
 
363
 
374
 
364
#endif
375
#endif