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 :struct FONT
{ {
byte width,height,offsetLine; byte width,height,offsetLine,r,g,b;
word width_buffer;
dword file_size; dword file_size;
dword buffer;
word block; word block;
dword data; dword data;
dword begin; dword begin;
dword size_file; dword size_file;
byte load(...); 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 text(word x,y;dword text,c;byte size);
dword textarea(word x,y;dword text,c;byte size); dword textarea(word x,y;dword text,c;byte size);
byte changeSIZE(byte size); byte changeSIZE(byte size);
void PixelRGB(word x,y);
dword tmp_y,tmp_height,tmp_x;
}; };
FONT font = 0; 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) :byte FONT::changeSIZE(byte size)
{ {
dword TMP_DATA; dword TMP_DATA;
@ -49,58 +67,74 @@ FONT font = 0;
block = math.ceil(height*width/32); block = math.ceil(height*width/32);
return true; return true;
} }
:proc_info Form_SELF_FONTS;
:dword FONT::text(word x,y;dword text1,c;byte size) :dword FONT::text(word x,y;dword text1,c;byte size)
{ {
dword len=0; dword len=0;
if(size)if(!changeSIZE(size))return 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]) WHILE(DSBYTE[text1])
{ {
len += symbol(x+len,y,DSBYTE[text1],c); len += symbol(len,DSBYTE[text1],c);
text1++; text1++;
} }
_PutImage(x,y,width_buffer,height,buffer);
free(buffer);
return len; return len;
} }
:dword FONT::textarea(word x,y;dword text1,c;byte size) :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 xi,yi;
dword tmp,_; dword tmp,_;
dword iii; dword iii;
dword ___;
byte rw=0; byte rw=0;
IF(offsetLine)y+=offsetLine;
IF(s==32)return width/4; IF(s==32)return width/4;
IF(s==9)return width; IF(s==9)return width;
yi = 0; yi = 0;
iii = 0; iii = 0;
tmp = 4*block*s; tmp = 4*block*s;
tmp +=data; tmp +=data;
while(yi<height) WHILE(yi<height)
{ {
xi = 0; xi = 0;
WHILE(xi<width) 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; tmp += 4;
_ = DSDWORD[tmp]; _ = DSDWORD[tmp];
} }
ELSE _ >>= 1;
IF(_&1) IF(_&1)
{ {
IF(xi>rw)rw=xi; IF(xi>rw)rw=xi;
PutPixel(x+xi,y+yi,c); //PixelRGB(x+xi-tmp_x,tmp_y+yi);
PixelRGB(x+xi,yi);
} }
xi++; xi++;
iii++; iii++;