14,6 → 14,7 |
word width,height; |
signed offset_x,offset_y; |
byte text; |
byte TMP_WEIGHT; |
}; |
:struct FONT |
{ |
30,7 → 31,7 |
byte load(...); |
byte symbol(word x;byte s;dword c); |
byte symbol_size(byte s); |
dword text(word x,y;dword text1,c); |
dword text(word x,y;dword text1); |
dword getsize(dword text1); |
dword textarea(word x,y;dword text,c); |
byte changeSIZE(); |
60,7 → 61,6 |
dword ofs; |
byte s; |
IF(size.text<9) size.text = 8; |
IF(size.text>45)size.text = 45; |
s = size.text-8; |
data = begin; |
TMP_DATA = data; |
106,16 → 106,17 |
dword iii; |
byte rw=0; |
byte X; |
size.TMP_WEIGHT = math.ceil(size.text/17); |
IF(s==32) |
{ |
size.width += width/4; |
IF(weight) size.width++; |
IF(weight) size.width+=size.TMP_WEIGHT; |
return; |
} |
IF(s==9) |
{ |
size.width += width; |
IF(weight) size.width++; |
IF(weight) size.width+=size.TMP_WEIGHT; |
return; |
} |
yi = 0; |
148,7 → 149,7 |
yi++; |
} |
size.width += rw; |
IF(weight) size.width++; |
IF(weight) size.width+=size.TMP_WEIGHT; |
IF(s=='_') size.width--; |
IF(size.offset_x<0)size.offset_x = X; |
} |
158,11 → 159,11 |
dword c; |
word _tmp_h; |
c = color; |
IF(size.text)IF(!changeSIZE())return 0; |
IF(!text1)return false; |
IF(size.text)IF(!changeSIZE())return false; |
GetProcessInfo(#Form_SELF_FONTS, SelfInfo); |
IF(y>Form_SELF_FONTS.cheight) return 0; |
IF(x>Form_SELF_FONTS.cwidth) return 0; |
tmp_y = y; |
IF(y>Form_SELF_FONTS.cheight) return false; |
IF(x>Form_SELF_FONTS.cwidth) return false; |
AX = c; |
r = AL; |
g = AH; |
170,21 → 171,25 |
AX = c; |
b = AL; |
getsize(text1); |
y -= size.offset_y; |
tmp_y = y; |
|
EDX = size.width*size.height*3; |
IF(!buffer_size) |
{ |
buffer_size = size.width*size.height*3; |
buffer_size = EDX; |
buffer = malloc(buffer_size); |
} |
ELSE IF(buffer_size<size.width*size.height*3) |
ELSE IF(buffer_size<EDX) |
{ |
buffer_size = size.width*size.height*3; |
buffer_size = EDX; |
buffer = realloc(buffer,buffer_size); |
} |
IF (no_bg_copy) |
{ |
EBX = bg_color; |
EAX = buffer_size+buffer; |
EDI = buffer; |
EAX = buffer_size+EDI; |
WHILE (EDI<EAX) |
{ |
ESDWORD[EDI] = EBX; |
196,11 → 201,11 |
WHILE(DSBYTE[text1]) |
{ |
IF(DSBYTE[text1]=='_') len--; |
len+=symbol(len,DSBYTE[text1],c); |
IF(weight)len++; |
len+=symbol(len,DSBYTE[text1]); |
IF(weight)len+=math.ceil(size.text/17); |
text1++; |
} |
_PutImage(x,y-size.offset_y,size.width,size.height,buffer); |
_PutImage(x,y,size.width,size.height,buffer); |
return len; |
} |
:dword FONT::textarea(word x,y;dword text1,c;byte size) |
208,12 → 213,14 |
|
} |
|
:byte FONT::symbol(signed x;byte s;dword c) |
:byte FONT::symbol(signed x;byte s) |
{ |
dword xi,yi; |
dword tmp,_; |
dword iii; |
dword ___x; |
word TMP; |
byte _TMP_WEIGHT; |
byte rw=0; |
x += size.offset_x; |
IF(s==32)return width/4; |
225,6 → 232,7 |
while(yi<height) |
{ |
xi = 0; |
TMP = size.offset_y+yi; |
while(xi<width) |
{ |
IF(iii%32) _ >>= 1; |
233,16 → 241,21 |
tmp += 4; |
_ = DSDWORD[tmp]; |
} |
IF(_&1) |
if(_&1) |
{ |
IF(xi>rw)rw=xi; |
___x = x+xi; |
IF(___x<Form_SELF_FONTS.cwidth)&&(tmp_y+yi<Form_SELF_FONTS.cheight) |
{ |
PixelRGB(___x,size.offset_y+yi); |
IF(weight) PixelRGB(___x+1,size.offset_y+yi); |
PixelRGB(___x,TMP); |
_TMP_WEIGHT = size.TMP_WEIGHT; |
WHILE(_TMP_WEIGHT) |
{ |
IF(weight) PixelRGB(___x+_TMP_WEIGHT,TMP); |
_TMP_WEIGHT--; |
} |
} |
} |
xi++; |
iii++; |
} |
259,10 → 272,10 |
{ |
debug("Error while loading font: "); |
debugln(path); |
return 0; |
return false; |
} |
tmp = io.buffer_data; |
data = tmp; |
data = io.buffer_data; |
tmp = data; |
begin = data; |
size_file = io.FILES_SIZE; |
tmp +=size_file; |
271,6 → 284,7 |
tmp--; |
width = DSBYTE[tmp]; |
block = math.ceil(height*width/32); |
return true; |
} |
|
#endif |