9,10 → 9,6 |
#include "../lib/io.h" |
#endif |
|
|
#define CP866 0 |
#define ANSI 1 |
|
:struct __SIZE |
{ |
word width,height; |
38,6 → 34,7 |
byte symbol(word x;byte s;dword c); |
byte symbol_size(byte s); |
dword prepare(word x,y;dword text1); |
void prepare_buf(word x,y,w,h;dword text1); |
void show(word x,y); |
byte textcenter(word x,y,w,h;dword txt); |
dword getsize(dword text1); |
44,37 → 41,27 |
dword textarea(word x,y;dword text,c); |
byte changeSIZE(); |
void PixelRGB(word x,y); |
dword GetPixel(word x,y); |
dword tmp_y,tmp_height,tmp_x; |
//dword GetPixel(word x,y); |
byte no_bg_copy; |
dword bg_color; |
}; |
FONT font = 0; |
|
/* |
:dword FONT::GetPixel(word x,y) |
{ |
dword tmp; |
tmp = y*size.width*3; |
tmp += x*3; |
tmp += buffer; |
dword tmp = y*size.width*3; |
tmp += x*3 + buffer; |
r = DSBYTE[tmp]; |
tmp++; |
g = DSBYTE[tmp]; |
tmp++; |
b = DSBYTE[tmp]; |
} |
g = DSBYTE[tmp+1]; |
b = DSBYTE[tmp+2]; |
}*/ |
:void FONT::PixelRGB(dword x,y) |
{ |
dword tmp; |
tmp = y*size.width*3; |
tmp += x*3; |
tmp += buffer; |
|
dword tmp = y*size.width*3; |
tmp += x*3 + buffer; |
DSBYTE[tmp] = r; |
tmp++; |
DSBYTE[tmp] = g; |
tmp++; |
DSBYTE[tmp] = b; |
DSBYTE[tmp+1] = g; |
DSBYTE[tmp+2] = b; |
} |
:byte FONT::changeSIZE() |
{ |
163,8 → 150,7 |
} |
yi = 0; |
iii = 0; |
tmp = 4*block*s; |
tmp +=data; |
tmp = 4*block*s + data; |
while(yi<height) |
{ |
xi = 0; |
199,7 → 185,6 |
{ |
signed len=0; |
dword c; |
word _tmp_h; |
c = color; |
IF(!text1)return false; |
IF(size.text)IF(!changeSIZE())return false; |
214,7 → 199,6 |
b = AL; |
getsize(text1); |
y -= size.offset_y; |
tmp_y = y; |
|
EDX = size.width*size.height*3; |
IF(!buffer_size) |
320,8 → 304,6 |
IF(xi>rw)rw=xi; |
___x = x+xi; |
IF(italic)___x+=math.ceil(ital); |
if(___x<Form_SELF_FONTS.cwidth)&&(tmp_y+yi<Form_SELF_FONTS.cheight) |
{ |
PixelRGB(___x,TMP); |
_TMP_WEIGHT = size.TMP_WEIGHT; |
WHILE(_TMP_WEIGHT) |
330,7 → 312,6 |
_TMP_WEIGHT--; |
} |
} |
} |
xi++; |
iii++; |
} |
341,24 → 322,54 |
} |
:byte FONT::load(dword path) |
{ |
dword tmp; |
buffer_size = 0; |
IF(data)free(data); |
if (!io.readKPACK(path)) |
{ |
debug("Error while loading font: "); |
debugln(path); |
return false; |
} |
begin = tmp = data = io.buffer_data; |
if (!io.readKPACK(path)) { debug("Error while loading font: "); debugln(path); return false; } |
begin = data = io.buffer_data; |
size_file = io.FILES_SIZE; |
tmp +=size_file; |
tmp--; |
height = DSBYTE[tmp]; |
tmp--; |
width = DSBYTE[tmp]; |
EBX = begin + size_file; |
height = DSBYTE[EBX - 1]; |
width = DSBYTE[EBX - 2]; |
block = math.ceil(height*width/32); |
return true; |
} |
|
:void FONT::prepare_buf(word x,y,w,h; dword text1) |
{ |
signed len=0; |
dword c; |
c = color; |
IF(!text1)return; |
IF(size.text)IF(!changeSIZE())return; |
GetProcessInfo(#Form_SELF_FONTS, SelfInfo); |
AX = c; r = AL; g = AH; c>>=16; AX = c; b = AL; |
getsize(text1); |
y -= size.offset_y; |
|
size.width = w; |
size.height = y; |
EDX = size.width*size.height*3; |
IF(!buffer_size) |
{ |
buffer_size = EDX; |
buffer = malloc(buffer_size); |
EBX = bg_color; |
EDI = buffer; |
EAX = buffer_size+EDI; |
WHILE (EDI<EAX) |
{ |
ESDWORD[EDI] = EBX; |
$add edi,3 |
} |
} |
WHILE(DSBYTE[text1]) |
{ |
x+=symbol(x,DSBYTE[text1]); |
IF(weight)x+=math.ceil(size.text/17); |
text1++; |
} |
return; |
} |
|
|
#endif |