forked from KolibriOS/kolibrios
Update lib font
git-svn-id: svn://kolibrios.org@5740 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
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.
Binary file not shown.
+53
-19
@@ -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++;
|
||||
|
||||
Reference in New Issue
Block a user