Rev 5736 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5736 | Rev 5740 | ||
---|---|---|---|
Line 9... | Line 9... | ||
9 | #include "../lib/io.h" |
9 | #include "../lib/io.h" |
10 | #endif |
10 | #endif |
Line 11... | Line 11... | ||
11 | 11 | ||
12 | :struct FONT |
12 | :struct FONT |
13 | { |
13 | { |
- | 14 | byte width,height,offsetLine,r,g,b; |
|
14 | byte width,height,offsetLine; |
15 | word width_buffer; |
- | 16 | dword file_size; |
|
15 | dword file_size; |
17 | dword buffer; |
16 | word block; |
18 | word block; |
17 | dword data; |
19 | dword data; |
18 | dword begin; |
20 | dword begin; |
19 | dword size_file; |
21 | dword size_file; |
20 | byte load(...); |
22 | byte load(...); |
21 | byte symbol(word x,y;byte s;dword c); |
23 | byte symbol(word x;byte s;dword c); |
22 | dword text(word x,y;dword text,c;byte size); |
24 | dword text(word x,y;dword text,c;byte size); |
23 | dword textarea(word x,y;dword text,c;byte size); |
25 | dword textarea(word x,y;dword text,c;byte size); |
- | 26 | byte changeSIZE(byte size); |
|
- | 27 | void PixelRGB(word x,y); |
|
24 | byte changeSIZE(byte size); |
28 | dword tmp_y,tmp_height,tmp_x; |
25 | }; |
29 | }; |
- | 30 | FONT font = 0; |
|
- | 31 | ||
- | 32 | :void FONT::PixelRGB(dword x,y) |
|
- | 33 | { |
|
- | 34 | dword tmp; |
|
- | 35 | tmp = y*width_buffer*3; |
|
- | 36 | tmp += x*3; |
|
- | 37 | tmp += buffer; |
|
- | 38 | ||
- | 39 | DSBYTE[tmp] = r; |
|
- | 40 | tmp++; |
|
- | 41 | DSBYTE[tmp] = g; |
|
- | 42 | tmp++; |
|
- | 43 | DSBYTE[tmp] = b; |
|
26 | FONT font = 0; |
44 | } |
27 | :byte FONT::changeSIZE(byte size) |
45 | :byte FONT::changeSIZE(byte size) |
28 | { |
46 | { |
29 | dword TMP_DATA; |
47 | dword TMP_DATA; |
30 | dword ofs; |
48 | dword ofs; |
Line 47... | Line 65... | ||
47 | TMP_DATA--; |
65 | TMP_DATA--; |
48 | width = DSBYTE[TMP_DATA]; |
66 | width = DSBYTE[TMP_DATA]; |
49 | block = math.ceil(height*width/32); |
67 | block = math.ceil(height*width/32); |
50 | return true; |
68 | return true; |
51 | } |
69 | } |
- | 70 | :proc_info Form_SELF_FONTS; |
|
52 | :dword FONT::text(word x,y;dword text1,c;byte size) |
71 | :dword FONT::text(word x,y;dword text1,c;byte size) |
53 | { |
72 | { |
54 | dword len=0; |
73 | dword len=0; |
55 | if(size)if(!changeSIZE(size))return 0; |
74 | if(size)if(!changeSIZE(size))return 0; |
- | 75 | GetProcessInfo(#Form_SELF_FONTS, SelfInfo); |
|
- | 76 | //tmp_height = height; |
|
- | 77 | //tmp_y = 0; |
|
- | 78 | AX = c; |
|
- | 79 | r = AL; |
|
- | 80 | g = AH; |
|
- | 81 | c>>=16; |
|
- | 82 | AX = c; |
|
- | 83 | b = AL; |
|
- | 84 | width_buffer = width; |
|
- | 85 | width_buffer *= strlen(text1); |
|
- | 86 | buffer = malloc(width_buffer*height); |
|
- | 87 | width_buffer /= 3; |
|
- | 88 | CopyScreen(buffer,x+Form_SELF_FONTS.left+5,y+Form_SELF_FONTS.top+GetSkinHeight(),width_buffer,height); |
|
Line 56... | Line 89... | ||
56 | 89 | ||
57 | WHILE(DSBYTE[text1]) |
90 | WHILE(DSBYTE[text1]) |
58 | { |
91 | { |
59 | len += symbol(x+len,y,DSBYTE[text1],c); |
92 | len += symbol(len,DSBYTE[text1],c); |
60 | text1++; |
93 | text1++; |
- | 94 | } |
|
- | 95 | _PutImage(x,y,width_buffer,height,buffer); |
|
61 | } |
96 | free(buffer); |
62 | return len; |
97 | return len; |
63 | } |
98 | } |
64 | :dword FONT::textarea(word x,y;dword text1,c;byte size) |
99 | :dword FONT::textarea(word x,y;dword text1,c;byte size) |
65 | { |
- | |
66 | dword len=0; |
- | |
67 | if(size)if(!changeSIZE(size))return 0; |
- | |
68 | WHILE(DSBYTE[text1]) |
100 | { |
69 | { |
- | |
70 | IF(DSBYTE[text1]=='\r'){ y+=height; len=0;} |
- | |
71 | ELSE len += symbol(x+len,y,DSBYTE[text1],c); |
- | |
72 | text1++; |
- | |
73 | } |
- | |
74 | return len; |
101 | |
75 | } |
102 | } |
76 | :byte FONT::symbol(signed x,y;byte s;dword c) |
103 | :byte FONT::symbol(signed x;byte s;dword c) |
77 | { |
104 | { |
78 | dword xi,yi; |
105 | dword xi,yi; |
79 | dword tmp,_; |
106 | dword tmp,_; |
- | 107 | dword iii; |
|
80 | dword iii; |
108 | dword ___; |
81 | byte rw=0; |
- | |
82 | IF(offsetLine)y+=offsetLine; |
109 | byte rw=0; |
83 | IF(s==32)return width/4; |
110 | IF(s==32)return width/4; |
84 | IF(s==9)return width; |
111 | IF(s==9)return width; |
85 | yi = 0; |
112 | yi = 0; |
86 | iii = 0; |
113 | iii = 0; |
87 | tmp = 4*block*s; |
114 | tmp = 4*block*s; |
88 | tmp +=data; |
115 | tmp +=data; |
89 | while(yi |
116 | WHILE(yi |
90 | { |
117 | { |
91 | xi = 0; |
118 | xi = 0; |
92 | WHILE(xi |
119 | WHILE(xi |
- | 120 | { |
|
- | 121 | /*IF(x+width>Form_SELF_FONTS.cwidth) |
|
- | 122 | { |
|
- | 123 | tmp_y+=height; |
|
- | 124 | tmp_height += height; |
|
- | 125 | tmp_x = x; |
|
93 | { |
126 | }*/ |
- | 127 | IF(iii%32) _ >>= 1; |
|
94 | IF(!(iii%32)) |
128 | ELSE |
95 | { |
129 | { |
96 | tmp += 4; |
130 | tmp += 4; |
97 | _ = DSDWORD[tmp]; |
131 | _ = DSDWORD[tmp]; |
98 | } |
- | |
99 | ELSE _ >>= 1; |
132 | } |
100 | IF(_&1) |
133 | IF(_&1) |
101 | { |
134 | { |
102 | IF(xi>rw)rw=xi; |
135 | IF(xi>rw)rw=xi; |
- | 136 | //PixelRGB(x+xi-tmp_x,tmp_y+yi); |
|
103 | PutPixel(x+xi,y+yi,c); |
137 | PixelRGB(x+xi,yi); |
104 | } |
138 | } |
105 | xi++; |
139 | xi++; |
106 | iii++; |
140 | iii++; |
107 | } |
141 | } |