Update lib font

git-svn-id: svn://kolibrios.org@5740 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
pavelyakov 2015-08-18 01:45:23 +00:00
parent c068fbab11
commit 8a71cf03e6
10 changed files with 53 additions and 19 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -11,19 +11,37 @@
:struct FONT
{
byte width,height,offsetLine;
byte width,height,offsetLine,r,g,b;
word width_buffer;
dword file_size;
dword buffer;
word block;
dword data;
dword begin;
dword size_file;
byte load(...);
byte symbol(word x,y;byte s;dword c);
byte symbol(word x;byte s;dword c);
dword text(word x,y;dword text,c;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;
};
FONT font = 0;
:void FONT::PixelRGB(dword x,y)
{
dword tmp;
tmp = y*width_buffer*3;
tmp += x*3;
tmp += buffer;
DSBYTE[tmp] = r;
tmp++;
DSBYTE[tmp] = g;
tmp++;
DSBYTE[tmp] = b;
}
:byte FONT::changeSIZE(byte size)
{
dword TMP_DATA;
@ -49,58 +67,74 @@ FONT font = 0;
block = math.ceil(height*width/32);
return true;
}
:proc_info Form_SELF_FONTS;
:dword FONT::text(word x,y;dword text1,c;byte size)
{
dword len=0;
if(size)if(!changeSIZE(size))return 0;
GetProcessInfo(#Form_SELF_FONTS, SelfInfo);
//tmp_height = height;
//tmp_y = 0;
AX = c;
r = AL;
g = AH;
c>>=16;
AX = c;
b = AL;
width_buffer = width;
width_buffer *= strlen(text1);
buffer = malloc(width_buffer*height);
width_buffer /= 3;
CopyScreen(buffer,x+Form_SELF_FONTS.left+5,y+Form_SELF_FONTS.top+GetSkinHeight(),width_buffer,height);
WHILE(DSBYTE[text1])
{
len += symbol(x+len,y,DSBYTE[text1],c);
len += symbol(len,DSBYTE[text1],c);
text1++;
}
_PutImage(x,y,width_buffer,height,buffer);
free(buffer);
return len;
}
:dword FONT::textarea(word x,y;dword text1,c;byte size)
{
dword len=0;
if(size)if(!changeSIZE(size))return 0;
WHILE(DSBYTE[text1])
{
IF(DSBYTE[text1]=='\r'){ y+=height; len=0;}
ELSE len += symbol(x+len,y,DSBYTE[text1],c);
text1++;
}
return len;
}
:byte FONT::symbol(signed x,y;byte s;dword c)
:byte FONT::symbol(signed x;byte s;dword c)
{
dword xi,yi;
dword tmp,_;
dword iii;
dword ___;
byte rw=0;
IF(offsetLine)y+=offsetLine;
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)
{
IF(!(iii%32))
/*IF(x+width>Form_SELF_FONTS.cwidth)
{
tmp_y+=height;
tmp_height += height;
tmp_x = x;
}*/
IF(iii%32) _ >>= 1;
ELSE
{
tmp += 4;
_ = DSDWORD[tmp];
}
ELSE _ >>= 1;
IF(_&1)
{
IF(xi>rw)rw=xi;
PutPixel(x+xi,y+yi,c);
//PixelRGB(x+xi-tmp_x,tmp_y+yi);
PixelRGB(x+xi,yi);
}
xi++;
iii++;