Subversion Repositories Kolibri OS

Rev

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

Rev 5753 Rev 5754
Line 12... Line 12...
12
:struct __SIZE
12
:struct __SIZE
13
{
13
{
14
	word width,height;
14
	word width,height;
15
	signed offset_x,offset_y;
15
	signed offset_x,offset_y;
16
	byte text;
16
	byte text;
-
 
17
	byte TMP_WEIGHT;
17
};
18
};
18
:struct FONT
19
:struct FONT
19
{
20
{
20
	__SIZE size;
21
	__SIZE size;
21
	byte width,height,offsetLine,r,g,b,weight;
22
	byte width,height,offsetLine,r,g,b,weight;
Line 28... Line 29...
28
	dword begin;
29
	dword begin;
29
	dword size_file;
30
	dword size_file;
30
	byte load(...);
31
	byte load(...);
31
	byte symbol(word x;byte s;dword c);
32
	byte symbol(word x;byte s;dword c);
32
	byte symbol_size(byte s);
33
	byte symbol_size(byte s);
33
	dword text(word x,y;dword text1,c);
34
	dword text(word x,y;dword text1);
34
	dword getsize(dword text1);
35
	dword getsize(dword text1);
35
	dword textarea(word x,y;dword text,c);
36
	dword textarea(word x,y;dword text,c);
36
	byte changeSIZE();
37
	byte changeSIZE();
37
	void PixelRGB(word x,y);
38
	void PixelRGB(word x,y);
38
	dword tmp_y,tmp_height,tmp_x;
39
	dword tmp_y,tmp_height,tmp_x;
Line 58... Line 59...
58
{
59
{
59
	dword TMP_DATA;
60
	dword TMP_DATA;
60
	dword ofs;
61
	dword ofs;
61
	byte s;
62
	byte s;
62
	IF(size.text<9) size.text = 8;
63
	IF(size.text<9) size.text = 8;
63
	IF(size.text>45)size.text = 45;
-
 
64
		s = size.text-8;
64
	s = size.text-8;
65
		data = begin;
65
	data = begin;
66
		TMP_DATA = data;
66
	TMP_DATA = data;
67
		TMP_DATA +=s*4;
67
	TMP_DATA +=s*4;
68
		ofs = DSDWORD[TMP_DATA];
68
	ofs = DSDWORD[TMP_DATA];
Line 104... Line 104...
104
        dword xi,yi;
104
        dword xi,yi;
105
        dword tmp,_;
105
        dword tmp,_;
106
        dword iii;
106
        dword iii;
107
        byte rw=0;
107
        byte rw=0;
108
		byte X;
108
		byte X;
-
 
109
		size.TMP_WEIGHT = math.ceil(size.text/17);
109
        IF(s==32)
110
        IF(s==32)
110
		{
111
		{
111
			size.width += width/4;
112
			size.width += width/4;
112
			IF(weight) size.width++;
113
			IF(weight) size.width+=size.TMP_WEIGHT;
113
			return;
114
			return;
114
		}
115
		}
115
		IF(s==9)
116
		IF(s==9)
116
		{
117
		{
117
			size.width += width;
118
			size.width += width;
118
			IF(weight) size.width++;
119
			IF(weight) size.width+=size.TMP_WEIGHT;
119
			return;
120
			return;
120
		}
121
		}
121
        yi = 0;
122
        yi = 0;
122
        iii = 0;
123
        iii = 0;
123
        tmp = 4*block*s;
124
        tmp = 4*block*s;
Line 146... Line 147...
146
                        iii++;
147
                        iii++;
147
                }
148
                }
148
                yi++;
149
                yi++;
149
        }
150
        }
150
		size.width += rw;
151
		size.width += rw;
151
		IF(weight) size.width++;
152
		IF(weight) size.width+=size.TMP_WEIGHT;
152
		IF(s=='_') size.width--;
153
		IF(s=='_') size.width--;
153
		IF(size.offset_x<0)size.offset_x = X;
154
		IF(size.offset_x<0)size.offset_x = X;
154
}
155
}
155
:dword FONT::text(word x,y;dword text1)
156
:dword FONT::text(word x,y;dword text1)
156
{
157
{
157
	signed len=0;
158
	signed len=0;
158
	dword c;
159
	dword c;
159
	word _tmp_h;
160
	word _tmp_h;
160
	c = color;
161
	c = color;
-
 
162
	IF(!text1)return false;
161
	IF(size.text)IF(!changeSIZE())return 0;
163
	IF(size.text)IF(!changeSIZE())return false;
162
	GetProcessInfo(#Form_SELF_FONTS, SelfInfo); 
164
	GetProcessInfo(#Form_SELF_FONTS, SelfInfo); 
163
	IF(y>Form_SELF_FONTS.cheight) return 0;
165
	IF(y>Form_SELF_FONTS.cheight) return false;
164
	IF(x>Form_SELF_FONTS.cwidth) return 0;
166
	IF(x>Form_SELF_FONTS.cwidth) return false;
165
	tmp_y = y;
-
 
166
	AX = c;
167
	AX = c;
167
	r = AL;
168
	r = AL;
168
	g = AH;
169
	g = AH;
169
	c>>=16;
170
	c>>=16;
170
	AX = c;
171
	AX = c;
171
	b = AL;
172
	b = AL;
172
	getsize(text1);
173
	getsize(text1);
-
 
174
	y -= size.offset_y;
-
 
175
	tmp_y = y;
-
 
176
	
-
 
177
	EDX = size.width*size.height*3;
173
	IF(!buffer_size)
178
	IF(!buffer_size)
174
	{
179
	{
175
		buffer_size = size.width*size.height*3;
180
		buffer_size = EDX;
176
		buffer = malloc(buffer_size);
181
		buffer = malloc(buffer_size);
177
	}
182
	}
178
	ELSE IF(buffer_size
183
	ELSE IF(buffer_size
179
	{
184
	{
180
		buffer_size = size.width*size.height*3;
185
		buffer_size = EDX;
181
		buffer = realloc(buffer,buffer_size);
186
		buffer = realloc(buffer,buffer_size);
182
	}
187
	}
183
	IF (no_bg_copy)
188
	IF (no_bg_copy)
184
	{
189
	{
185
		EBX = bg_color;
190
		EBX = bg_color;
186
		EAX = buffer_size+buffer;
-
 
187
		EDI = buffer;
191
		EDI = buffer;
-
 
192
		EAX = buffer_size+EDI;
188
		WHILE (EDI
193
		WHILE (EDI
189
		{
194
		{
190
			ESDWORD[EDI] = EBX;
195
			ESDWORD[EDI] = EBX;
191
			$add edi,3
196
			$add edi,3
192
		}
197
		}
Line 194... Line 199...
194
	ELSE CopyScreen(buffer,x+Form_SELF_FONTS.left+5,y+Form_SELF_FONTS.top+GetSkinHeight(),size.width,size.height);
199
	ELSE CopyScreen(buffer,x+Form_SELF_FONTS.left+5,y+Form_SELF_FONTS.top+GetSkinHeight(),size.width,size.height);
Line 195... Line 200...
195
 
200
 
196
	WHILE(DSBYTE[text1])
201
	WHILE(DSBYTE[text1])
197
	{
202
	{
198
		IF(DSBYTE[text1]=='_') len--;
203
		IF(DSBYTE[text1]=='_') len--;
199
		len+=symbol(len,DSBYTE[text1],c);
204
		len+=symbol(len,DSBYTE[text1]);
200
		IF(weight)len++;
205
		IF(weight)len+=math.ceil(size.text/17);
201
		text1++;
206
		text1++;
202
	}
207
	}
203
	_PutImage(x,y-size.offset_y,size.width,size.height,buffer);
208
	_PutImage(x,y,size.width,size.height,buffer);
204
	return len;
209
	return len;
205
}
210
}
206
:dword FONT::textarea(word x,y;dword text1,c;byte size)
211
:dword FONT::textarea(word x,y;dword text1,c;byte size)
Line 207... Line 212...
207
{
212
{
Line 208... Line 213...
208
	
213
	
209
}
214
}
210
 
215
 
211
:byte FONT::symbol(signed x;byte s;dword c)
216
:byte FONT::symbol(signed x;byte s)
212
{
217
{
213
        dword xi,yi;
218
        dword xi,yi;
-
 
219
        dword tmp,_;
-
 
220
        dword iii;
214
        dword tmp,_;
221
		dword ___x;
215
        dword iii;
222
		word TMP;
216
		dword ___x;
223
		byte _TMP_WEIGHT;
217
        byte rw=0;
224
        byte rw=0;
218
		x += size.offset_x;
225
		x += size.offset_x;
Line 223... Line 230...
223
        tmp = 4*block*s;
230
        tmp = 4*block*s;
224
        tmp +=data;
231
        tmp +=data;
225
        while(yi
232
        while(yi
226
        {
233
        {
227
                xi = 0;
234
                xi = 0;
-
 
235
				TMP = size.offset_y+yi;
228
                while(xi
236
                while(xi
229
                {
237
                {
230
                        IF(iii%32) _ >>= 1;
238
                        IF(iii%32) _ >>= 1;
231
						ELSE
239
						ELSE
232
						{
240
						{
233
                                tmp += 4;
241
                                tmp += 4;
234
                                _ = DSDWORD[tmp];
242
                                _ = DSDWORD[tmp];
235
                        }
243
                        }
236
                        IF(_&1)
244
                        if(_&1)
237
                        {
245
                        {
238
                                IF(xi>rw)rw=xi;
246
                                IF(xi>rw)rw=xi;
239
								___x = x+xi;
247
								___x = x+xi;
240
								IF(___x
248
								IF(___x
241
								{
249
								{
242
									PixelRGB(___x,size.offset_y+yi);
250
									PixelRGB(___x,TMP);
-
 
251
									_TMP_WEIGHT = size.TMP_WEIGHT;
-
 
252
									WHILE(_TMP_WEIGHT)
-
 
253
									{
243
									IF(weight) PixelRGB(___x+1,size.offset_y+yi);
254
										IF(weight) PixelRGB(___x+_TMP_WEIGHT,TMP);
-
 
255
										_TMP_WEIGHT--;
-
 
256
									}
244
								}
257
								}
245
                        }
258
                        }
246
                        xi++;
259
                        xi++;
247
                        iii++;
260
                        iii++;
248
                }
261
                }
Line 257... Line 270...
257
	IF(data)free(data);
270
	IF(data)free(data);
258
	if (!io.readKPACK(path))
271
	if (!io.readKPACK(path))
259
	{
272
	{
260
		debug("Error while loading font: ");
273
		debug("Error while loading font: ");
261
		debugln(path);
274
		debugln(path);
262
		return 0;
275
		return false;
263
	}
276
	}
264
	tmp = io.buffer_data;
277
	data = io.buffer_data;
265
	data = tmp;
278
	tmp = data;
266
	begin = data;
279
	begin = data;
267
	size_file = io.FILES_SIZE;
280
	size_file = io.FILES_SIZE;
268
	tmp +=size_file;
281
	tmp +=size_file;
269
	tmp--;
282
	tmp--;
270
	height = DSBYTE[tmp];
283
	height = DSBYTE[tmp];
271
	tmp--;
284
	tmp--;
272
	width = DSBYTE[tmp];
285
	width = DSBYTE[tmp];
273
	block = math.ceil(height*width/32);
286
	block = math.ceil(height*width/32);
-
 
287
	return true;
274
}
288
}
Line 275... Line 289...
275
 
289
 
276
#endif
290
#endif