9,17 → 9,10 |
#include "../lib/io.h" |
#endif |
|
:struct __SIZE |
{ |
word width,height; |
signed offset_x,offset_y; |
byte text; |
}; |
:struct FONT |
{ |
__SIZE size; |
byte width,height,offsetLine,r,g,b,weight; |
dword color; |
byte width,height,offsetLine,r,g,b; |
word width_buffer; |
dword file_size; |
dword buffer; |
dword buffer_size; |
30,10 → 23,10 |
byte load(...); |
byte symbol(word x;byte s;dword c); |
byte symbol_size(byte s); |
dword text(word x,y;dword text1,c); |
dword getsize(dword text1); |
dword textarea(word x,y;dword text,c); |
byte changeSIZE(); |
dword text(word x,y;dword text1,c;byte size); |
dword text_width(dword text1;byte size); |
dword textarea(word x,y;dword text,c;byte size); |
byte changeSIZE(byte size); |
void PixelRGB(word x,y); |
dword tmp_y,tmp_height,tmp_x; |
byte no_bg_copy; |
44,7 → 37,7 |
:void FONT::PixelRGB(dword x,y) |
{ |
dword tmp; |
tmp = y*size.width*3; |
tmp = y*width_buffer*3; |
tmp += x*3; |
tmp += buffer; |
|
54,14 → 47,14 |
tmp++; |
DSBYTE[tmp] = b; |
} |
:byte FONT::changeSIZE() |
:byte FONT::changeSIZE(byte size) |
{ |
dword TMP_DATA; |
dword ofs; |
byte s; |
IF(size.text<9) size.text = 8; |
IF(size.text>45)size.text = 45; |
s = size.text-8; |
IF(size<9) size = 8; |
IF(size>45)size = 45; |
s = size-8; |
data = begin; |
TMP_DATA = data; |
TMP_DATA +=s*4; |
81,23 → 74,16 |
} |
:proc_info Form_SELF_FONTS; |
|
:dword FONT::getsize(dword text1) |
:dword FONT::text_width(dword text1;byte size) |
{ |
size.height = size.width = 0; |
size.offset_x = size.offset_y = -1; |
IF(size.text)IF(!changeSIZE())return 0; |
dword len=0; |
IF(size)IF(!changeSIZE(size))return 0; |
WHILE(DSBYTE[text1]) |
{ |
symbol_size(DSBYTE[text1]); |
len += symbol_size(DSBYTE[text1]); |
text1++; |
} |
$neg size.offset_y |
$neg size.offset_x |
size.height++; |
size.height += size.offset_y; |
size.width += size.offset_x; |
size.width++; |
return size.width; |
return len; |
} |
:byte FONT::symbol_size(byte s) |
{ |
105,24 → 91,13 |
dword tmp,_; |
dword iii; |
byte rw=0; |
byte X; |
IF(s==32) |
{ |
size.width += width/4; |
IF(weight) size.width++; |
return; |
} |
IF(s==9) |
{ |
size.width += width; |
IF(weight) size.width++; |
return; |
} |
IF(s==32)return width/4; |
IF(s==9)return width; |
yi = 0; |
iii = 0; |
tmp = 4*block*s; |
tmp +=data; |
while(yi<height) |
WHILE(yi<height) |
{ |
xi = 0; |
WHILE(xi<width) |
133,32 → 108,18 |
tmp += 4; |
_ = DSDWORD[tmp]; |
} |
IF(_&1) |
{ |
IF(xi>rw)rw=xi; |
IF(size.height<yi)size.height = yi; |
IF(size.offset_y<0)size.offset_y = yi; |
ELSE IF(yi<size.offset_y)size.offset_y = yi; |
IF(!X) X = xi; |
ELSE IF(X>xi)X = xi; |
} |
IF(_&1) IF(xi>rw)rw=xi; |
xi++; |
iii++; |
} |
yi++; |
} |
size.width += rw; |
IF(weight) size.width++; |
IF(s=='_') size.width--; |
IF(size.offset_x<0)size.offset_x = X; |
return rw; |
} |
:dword FONT::text(word x,y;dword text1) |
:dword FONT::text(word x,y;dword text1,c;byte size) |
{ |
signed len=0; |
dword c; |
word _tmp_h; |
c = color; |
IF(size.text)IF(!changeSIZE())return 0; |
IF(size)IF(!changeSIZE(size))return 0; |
GetProcessInfo(#Form_SELF_FONTS, SelfInfo); |
IF(y>Form_SELF_FONTS.cheight) return 0; |
IF(x>Form_SELF_FONTS.cwidth) return 0; |
169,15 → 130,16 |
c>>=16; |
AX = c; |
b = AL; |
getsize(text1); |
width_buffer = text_width(text1,size); |
//width_buffer *= strlen(text1); |
IF(!buffer_size) |
{ |
buffer_size = size.width*size.height*3; |
buffer_size = width_buffer*height*3; |
buffer = malloc(buffer_size); |
} |
ELSE IF(buffer_size<size.width*size.height*3) |
ELSE IF(buffer_size<width_buffer*height*3) |
{ |
buffer_size = size.width*size.height*3; |
buffer_size = width_buffer*height*3; |
buffer = realloc(buffer,buffer_size); |
} |
IF (no_bg_copy) |
191,16 → 153,15 |
$add edi,3 |
} |
} |
ELSE CopyScreen(buffer,x+Form_SELF_FONTS.left+5,y+Form_SELF_FONTS.top+GetSkinHeight(),size.width,size.height); |
|
ELSE CopyScreen(buffer,x+Form_SELF_FONTS.left+5,y+Form_SELF_FONTS.top+GetSkinHeight(),width_buffer,height); |
//width_buffer = text_width(text1); |
WHILE(DSBYTE[text1]) |
{ |
IF(DSBYTE[text1]=='_') len--; |
len+=symbol(len,DSBYTE[text1],c); |
IF(weight)len++; |
symbol(len,DSBYTE[text1],c); |
len+=EAX; |
text1++; |
} |
_PutImage(x,y-size.offset_y,size.width,size.height,buffer); |
_PutImage(x,y,width_buffer,height,buffer); |
return len; |
} |
:dword FONT::textarea(word x,y;dword text1,c;byte size) |
215,7 → 176,7 |
dword iii; |
dword ___x; |
byte rw=0; |
x += size.offset_x; |
x -= 2; |
IF(s==32)return width/4; |
IF(s==9)return width; |
yi = 0; |
225,7 → 186,7 |
while(yi<height) |
{ |
xi = 0; |
while(xi<width) |
WHILE(xi<width) |
{ |
IF(iii%32) _ >>= 1; |
ELSE |
237,12 → 198,8 |
{ |
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); |
IF(___x<Form_SELF_FONTS.cwidth)&&(tmp_y+yi<Form_SELF_FONTS.cheight)PixelRGB(___x,yi); |
} |
} |
xi++; |
iii++; |
} |