forked from KolibriOS/kolibrios
Fixed bugs font.h offset y
git-svn-id: svn://kolibrios.org@5754 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
9873529078
commit
6ea4f3a37b
@ -14,6 +14,7 @@
|
||||
word width,height;
|
||||
signed offset_x,offset_y;
|
||||
byte text;
|
||||
byte TMP_WEIGHT;
|
||||
};
|
||||
:struct FONT
|
||||
{
|
||||
@ -30,7 +31,7 @@
|
||||
byte load(...);
|
||||
byte symbol(word x;byte s;dword c);
|
||||
byte symbol_size(byte s);
|
||||
dword text(word x,y;dword text1,c);
|
||||
dword text(word x,y;dword text1);
|
||||
dword getsize(dword text1);
|
||||
dword textarea(word x,y;dword text,c);
|
||||
byte changeSIZE();
|
||||
@ -60,24 +61,23 @@ FONT font = 0;
|
||||
dword ofs;
|
||||
byte s;
|
||||
IF(size.text<9) size.text = 8;
|
||||
IF(size.text>45)size.text = 45;
|
||||
s = size.text-8;
|
||||
data = begin;
|
||||
TMP_DATA = data;
|
||||
TMP_DATA +=s*4;
|
||||
ofs = DSDWORD[TMP_DATA];
|
||||
IF(ofs==-1)return false;
|
||||
data += ofs;
|
||||
data += 156;
|
||||
TMP_DATA = data;
|
||||
file_size = DSDWORD[TMP_DATA];
|
||||
TMP_DATA += file_size;
|
||||
TMP_DATA--;
|
||||
height = DSBYTE[TMP_DATA];
|
||||
TMP_DATA--;
|
||||
width = DSBYTE[TMP_DATA];
|
||||
block = math.ceil(height*width/32);
|
||||
return true;
|
||||
s = size.text-8;
|
||||
data = begin;
|
||||
TMP_DATA = data;
|
||||
TMP_DATA +=s*4;
|
||||
ofs = DSDWORD[TMP_DATA];
|
||||
IF(ofs==-1)return false;
|
||||
data += ofs;
|
||||
data += 156;
|
||||
TMP_DATA = data;
|
||||
file_size = DSDWORD[TMP_DATA];
|
||||
TMP_DATA += file_size;
|
||||
TMP_DATA--;
|
||||
height = DSBYTE[TMP_DATA];
|
||||
TMP_DATA--;
|
||||
width = DSBYTE[TMP_DATA];
|
||||
block = math.ceil(height*width/32);
|
||||
return true;
|
||||
}
|
||||
:proc_info Form_SELF_FONTS;
|
||||
|
||||
@ -106,16 +106,17 @@ FONT font = 0;
|
||||
dword iii;
|
||||
byte rw=0;
|
||||
byte X;
|
||||
size.TMP_WEIGHT = math.ceil(size.text/17);
|
||||
IF(s==32)
|
||||
{
|
||||
size.width += width/4;
|
||||
IF(weight) size.width++;
|
||||
IF(weight) size.width+=size.TMP_WEIGHT;
|
||||
return;
|
||||
}
|
||||
IF(s==9)
|
||||
{
|
||||
size.width += width;
|
||||
IF(weight) size.width++;
|
||||
IF(weight) size.width+=size.TMP_WEIGHT;
|
||||
return;
|
||||
}
|
||||
yi = 0;
|
||||
@ -148,7 +149,7 @@ FONT font = 0;
|
||||
yi++;
|
||||
}
|
||||
size.width += rw;
|
||||
IF(weight) size.width++;
|
||||
IF(weight) size.width+=size.TMP_WEIGHT;
|
||||
IF(s=='_') size.width--;
|
||||
IF(size.offset_x<0)size.offset_x = X;
|
||||
}
|
||||
@ -158,11 +159,11 @@ FONT font = 0;
|
||||
dword c;
|
||||
word _tmp_h;
|
||||
c = color;
|
||||
IF(size.text)IF(!changeSIZE())return 0;
|
||||
IF(!text1)return false;
|
||||
IF(size.text)IF(!changeSIZE())return false;
|
||||
GetProcessInfo(#Form_SELF_FONTS, SelfInfo);
|
||||
IF(y>Form_SELF_FONTS.cheight) return 0;
|
||||
IF(x>Form_SELF_FONTS.cwidth) return 0;
|
||||
tmp_y = y;
|
||||
IF(y>Form_SELF_FONTS.cheight) return false;
|
||||
IF(x>Form_SELF_FONTS.cwidth) return false;
|
||||
AX = c;
|
||||
r = AL;
|
||||
g = AH;
|
||||
@ -170,21 +171,25 @@ FONT font = 0;
|
||||
AX = c;
|
||||
b = AL;
|
||||
getsize(text1);
|
||||
y -= size.offset_y;
|
||||
tmp_y = y;
|
||||
|
||||
EDX = size.width*size.height*3;
|
||||
IF(!buffer_size)
|
||||
{
|
||||
buffer_size = size.width*size.height*3;
|
||||
buffer_size = EDX;
|
||||
buffer = malloc(buffer_size);
|
||||
}
|
||||
ELSE IF(buffer_size<size.width*size.height*3)
|
||||
ELSE IF(buffer_size<EDX)
|
||||
{
|
||||
buffer_size = size.width*size.height*3;
|
||||
buffer_size = EDX;
|
||||
buffer = realloc(buffer,buffer_size);
|
||||
}
|
||||
IF (no_bg_copy)
|
||||
{
|
||||
EBX = bg_color;
|
||||
EAX = buffer_size+buffer;
|
||||
EDI = buffer;
|
||||
EAX = buffer_size+EDI;
|
||||
WHILE (EDI<EAX)
|
||||
{
|
||||
ESDWORD[EDI] = EBX;
|
||||
@ -196,11 +201,11 @@ FONT font = 0;
|
||||
WHILE(DSBYTE[text1])
|
||||
{
|
||||
IF(DSBYTE[text1]=='_') len--;
|
||||
len+=symbol(len,DSBYTE[text1],c);
|
||||
IF(weight)len++;
|
||||
len+=symbol(len,DSBYTE[text1]);
|
||||
IF(weight)len+=math.ceil(size.text/17);
|
||||
text1++;
|
||||
}
|
||||
_PutImage(x,y-size.offset_y,size.width,size.height,buffer);
|
||||
_PutImage(x,y,size.width,size.height,buffer);
|
||||
return len;
|
||||
}
|
||||
:dword FONT::textarea(word x,y;dword text1,c;byte size)
|
||||
@ -208,12 +213,14 @@ FONT font = 0;
|
||||
|
||||
}
|
||||
|
||||
:byte FONT::symbol(signed x;byte s;dword c)
|
||||
:byte FONT::symbol(signed x;byte s)
|
||||
{
|
||||
dword xi,yi;
|
||||
dword tmp,_;
|
||||
dword iii;
|
||||
dword ___x;
|
||||
word TMP;
|
||||
byte _TMP_WEIGHT;
|
||||
byte rw=0;
|
||||
x += size.offset_x;
|
||||
IF(s==32)return width/4;
|
||||
@ -225,6 +232,7 @@ FONT font = 0;
|
||||
while(yi<height)
|
||||
{
|
||||
xi = 0;
|
||||
TMP = size.offset_y+yi;
|
||||
while(xi<width)
|
||||
{
|
||||
IF(iii%32) _ >>= 1;
|
||||
@ -233,14 +241,19 @@ FONT font = 0;
|
||||
tmp += 4;
|
||||
_ = DSDWORD[tmp];
|
||||
}
|
||||
IF(_&1)
|
||||
if(_&1)
|
||||
{
|
||||
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);
|
||||
PixelRGB(___x,TMP);
|
||||
_TMP_WEIGHT = size.TMP_WEIGHT;
|
||||
WHILE(_TMP_WEIGHT)
|
||||
{
|
||||
IF(weight) PixelRGB(___x+_TMP_WEIGHT,TMP);
|
||||
_TMP_WEIGHT--;
|
||||
}
|
||||
}
|
||||
}
|
||||
xi++;
|
||||
@ -259,10 +272,10 @@ FONT font = 0;
|
||||
{
|
||||
debug("Error while loading font: ");
|
||||
debugln(path);
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
tmp = io.buffer_data;
|
||||
data = tmp;
|
||||
data = io.buffer_data;
|
||||
tmp = data;
|
||||
begin = data;
|
||||
size_file = io.FILES_SIZE;
|
||||
tmp +=size_file;
|
||||
@ -271,6 +284,7 @@ FONT font = 0;
|
||||
tmp--;
|
||||
width = DSBYTE[tmp];
|
||||
block = math.ceil(height*width/32);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user