Subversion Repositories Kolibri OS

Rev

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

Rev 5736 Rev 5740
Line 9... Line 9...
9
#include "../lib/io.h"
9
#include "../lib/io.h"
10
#endif
10
#endif
Line 11... Line 11...
11
 
11
 
12
:struct FONT
12
:struct FONT
13
{
13
{
-
 
14
	byte width,height,offsetLine,r,g,b;
14
	byte width,height,offsetLine;
15
	word width_buffer;
-
 
16
	dword file_size;
15
	dword file_size;
17
	dword buffer;
16
	word block;
18
	word block;
17
	dword data;
19
	dword data;
18
	dword begin;
20
	dword begin;
19
	dword size_file;
21
	dword size_file;
20
	byte load(...);
22
	byte load(...);
21
	byte symbol(word x,y;byte s;dword c);
23
	byte symbol(word x;byte s;dword c);
22
	dword text(word x,y;dword text,c;byte size);
24
	dword text(word x,y;dword text,c;byte size);
23
	dword textarea(word x,y;dword text,c;byte size);
25
	dword textarea(word x,y;dword text,c;byte size);
-
 
26
	byte changeSIZE(byte size);
-
 
27
	void PixelRGB(word x,y);
24
	byte changeSIZE(byte size);
28
	dword tmp_y,tmp_height,tmp_x;
25
};
29
};
-
 
30
FONT font = 0;
-
 
31
 
-
 
32
:void FONT::PixelRGB(dword x,y)
-
 
33
{
-
 
34
	dword tmp;
-
 
35
	tmp = y*width_buffer*3;
-
 
36
	tmp += x*3;
-
 
37
	tmp += buffer;
-
 
38
 
-
 
39
	DSBYTE[tmp] = r;
-
 
40
	tmp++;
-
 
41
	DSBYTE[tmp] = g;
-
 
42
	tmp++;
-
 
43
	DSBYTE[tmp] = b;
26
FONT font = 0;
44
}
27
:byte FONT::changeSIZE(byte size)
45
:byte FONT::changeSIZE(byte size)
28
{
46
{
29
	dword TMP_DATA;
47
	dword TMP_DATA;
30
	dword ofs;
48
	dword ofs;
Line 47... Line 65...
47
		TMP_DATA--;
65
		TMP_DATA--;
48
		width =  DSBYTE[TMP_DATA];
66
		width =  DSBYTE[TMP_DATA];
49
		block = math.ceil(height*width/32);
67
		block = math.ceil(height*width/32);
50
		return true;
68
		return true;
51
}
69
}
-
 
70
:proc_info Form_SELF_FONTS;
52
:dword FONT::text(word x,y;dword text1,c;byte size)
71
:dword FONT::text(word x,y;dword text1,c;byte size)
53
{
72
{
54
	dword len=0;
73
	dword len=0;
55
	if(size)if(!changeSIZE(size))return 0;
74
	if(size)if(!changeSIZE(size))return 0;
-
 
75
	GetProcessInfo(#Form_SELF_FONTS, SelfInfo); 
-
 
76
	//tmp_height = height;
-
 
77
	//tmp_y = 0;
-
 
78
	AX = c;
-
 
79
	r = AL;
-
 
80
	g = AH;
-
 
81
	c>>=16;
-
 
82
	AX = c;
-
 
83
	b = AL;
-
 
84
	width_buffer = width;
-
 
85
	width_buffer *= strlen(text1);
-
 
86
	buffer = malloc(width_buffer*height);
-
 
87
	width_buffer /= 3;
-
 
88
	CopyScreen(buffer,x+Form_SELF_FONTS.left+5,y+Form_SELF_FONTS.top+GetSkinHeight(),width_buffer,height);
Line 56... Line 89...
56
	
89
	
57
	WHILE(DSBYTE[text1])
90
	WHILE(DSBYTE[text1])
58
	{
91
	{
59
		len += symbol(x+len,y,DSBYTE[text1],c);
92
		len += symbol(len,DSBYTE[text1],c);
60
		text1++;
93
		text1++;
-
 
94
	}
-
 
95
	_PutImage(x,y,width_buffer,height,buffer);
61
	}
96
	free(buffer);
62
	return len;
97
	return len;
63
}
98
}
64
:dword FONT::textarea(word x,y;dword text1,c;byte size)
99
:dword FONT::textarea(word x,y;dword text1,c;byte size)
65
{
-
 
66
	dword len=0;
-
 
67
	if(size)if(!changeSIZE(size))return 0;
-
 
68
	WHILE(DSBYTE[text1])
100
{
69
	{
-
 
70
		IF(DSBYTE[text1]=='\r'){ y+=height; len=0;}
-
 
71
		ELSE	len += symbol(x+len,y,DSBYTE[text1],c);
-
 
72
		text1++;
-
 
73
	}
-
 
74
	return len;
101
	
75
}
102
}
76
:byte FONT::symbol(signed x,y;byte s;dword c)
103
:byte FONT::symbol(signed x;byte s;dword c)
77
{
104
{
78
        dword xi,yi;
105
        dword xi,yi;
79
        dword tmp,_;
106
        dword tmp,_;
-
 
107
        dword iii;
80
        dword iii;
108
		dword ___;
81
        byte rw=0;
-
 
82
        IF(offsetLine)y+=offsetLine;
109
        byte rw=0;
83
        IF(s==32)return width/4;
110
        IF(s==32)return width/4;
84
		IF(s==9)return width;
111
		IF(s==9)return width;
85
        yi = 0;
112
        yi = 0;
86
        iii = 0;
113
        iii = 0;
87
        tmp = 4*block*s;
114
        tmp = 4*block*s;
88
        tmp +=data;
115
        tmp +=data;
89
        while(yi
116
        WHILE(yi
90
        {
117
        {
91
                xi = 0;
118
                xi = 0;
92
                WHILE(xi
119
                WHILE(xi
-
 
120
                {
-
 
121
						/*IF(x+width>Form_SELF_FONTS.cwidth)
-
 
122
						{
-
 
123
							tmp_y+=height;
-
 
124
							tmp_height += height;
-
 
125
							tmp_x = x;
93
                {
126
						}*/
-
 
127
                        IF(iii%32) _ >>= 1;
94
                        IF(!(iii%32))
128
						ELSE
95
                        {
129
						{
96
                                tmp += 4;
130
                                tmp += 4;
97
                                _ = DSDWORD[tmp];
131
                                _ = DSDWORD[tmp];
98
                        }
-
 
99
                        ELSE _ >>= 1;
132
                        }
100
                        IF(_&1)
133
                        IF(_&1)
101
                        {
134
                        {
102
                                IF(xi>rw)rw=xi;
135
                                IF(xi>rw)rw=xi;
-
 
136
								//PixelRGB(x+xi-tmp_x,tmp_y+yi);
103
                                PutPixel(x+xi,y+yi,c);
137
								PixelRGB(x+xi,yi);
104
                        }
138
                        }
105
                        xi++;
139
                        xi++;
106
                        iii++;
140
                        iii++;
107
                }
141
                }