Rev 5742 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5742 | Rev 5745 | ||
---|---|---|---|
1 | #ifndef INCLUDE_FONT_H |
1 | #ifndef INCLUDE_FONT_H |
2 | #define INCLUDE_FONT_H |
2 | #define INCLUDE_FONT_H |
3 | 3 | ||
4 | #ifndef INCLUDE_MATH_H |
4 | #ifndef INCLUDE_MATH_H |
5 | #include "../lib/math.h" |
5 | #include "../lib/math.h" |
6 | #endif |
6 | #endif |
7 | 7 | ||
8 | #ifndef INCLUDE_IO_H |
8 | #ifndef INCLUDE_IO_H |
9 | #include "../lib/io.h" |
9 | #include "../lib/io.h" |
10 | #endif |
10 | #endif |
11 | 11 | ||
12 | :struct FONT |
12 | :struct FONT |
13 | { |
13 | { |
14 | byte width,height,offsetLine,r,g,b; |
14 | byte width,height,offsetLine,r,g,b; |
15 | word width_buffer; |
15 | word width_buffer; |
16 | dword file_size; |
16 | dword file_size; |
17 | dword buffer; |
17 | dword buffer; |
18 | dword buffer_size; |
18 | dword buffer_size; |
19 | word block; |
19 | word block; |
20 | dword data; |
20 | dword data; |
21 | dword begin; |
21 | dword begin; |
22 | dword size_file; |
22 | dword size_file; |
23 | byte load(...); |
23 | byte load(...); |
24 | byte symbol(word x;byte s;dword c); |
24 | byte symbol(word x;byte s;dword c); |
25 | byte symbol_size(byte s); |
25 | byte symbol_size(byte s); |
26 | dword text(word x,y;dword text,c;byte size); |
26 | dword text(word x,y;dword text1,c;byte size); |
27 | dword text_width(dword text1;byte size); |
27 | dword text_width(dword text1;byte size); |
28 | dword textarea(word x,y;dword text,c;byte size); |
28 | dword textarea(word x,y;dword text,c;byte size); |
29 | byte changeSIZE(byte size); |
29 | byte changeSIZE(byte size); |
30 | void PixelRGB(word x,y); |
30 | void PixelRGB(word x,y); |
31 | dword tmp_y,tmp_height,tmp_x; |
31 | dword tmp_y,tmp_height,tmp_x; |
- | 32 | byte no_bg_copy; |
|
- | 33 | dword bg_color; |
|
32 | }; |
34 | }; |
33 | FONT font = 0; |
35 | FONT font = 0; |
34 | 36 | ||
35 | :void FONT::PixelRGB(dword x,y) |
37 | :void FONT::PixelRGB(dword x,y) |
36 | { |
38 | { |
37 | dword tmp; |
39 | dword tmp; |
38 | tmp = y*width_buffer*3; |
40 | tmp = y*width_buffer*3; |
39 | tmp += x*3; |
41 | tmp += x*3; |
40 | tmp += buffer; |
42 | tmp += buffer; |
41 | 43 | ||
42 | DSBYTE[tmp] = r; |
44 | DSBYTE[tmp] = r; |
43 | tmp++; |
45 | tmp++; |
44 | DSBYTE[tmp] = g; |
46 | DSBYTE[tmp] = g; |
45 | tmp++; |
47 | tmp++; |
46 | DSBYTE[tmp] = b; |
48 | DSBYTE[tmp] = b; |
47 | } |
49 | } |
48 | :byte FONT::changeSIZE(byte size) |
50 | :byte FONT::changeSIZE(byte size) |
49 | { |
51 | { |
50 | dword TMP_DATA; |
52 | dword TMP_DATA; |
51 | dword ofs; |
53 | dword ofs; |
52 | byte s; |
54 | byte s; |
53 | IF(size<9) size = 8; |
55 | IF(size<9) size = 8; |
54 | IF(size>45)size = 45; |
56 | IF(size>45)size = 45; |
55 | s = size-8; |
57 | s = size-8; |
56 | data = begin; |
58 | data = begin; |
57 | TMP_DATA = data; |
59 | TMP_DATA = data; |
58 | TMP_DATA +=s*4; |
60 | TMP_DATA +=s*4; |
59 | ofs = DSDWORD[TMP_DATA]; |
61 | ofs = DSDWORD[TMP_DATA]; |
60 | IF(ofs==-1)return false; |
62 | IF(ofs==-1)return false; |
61 | data += ofs; |
63 | data += ofs; |
62 | data += 156; |
64 | data += 156; |
63 | TMP_DATA = data; |
65 | TMP_DATA = data; |
64 | file_size = DSDWORD[TMP_DATA]; |
66 | file_size = DSDWORD[TMP_DATA]; |
65 | TMP_DATA += file_size; |
67 | TMP_DATA += file_size; |
66 | TMP_DATA--; |
68 | TMP_DATA--; |
67 | height = DSBYTE[TMP_DATA]; |
69 | height = DSBYTE[TMP_DATA]; |
68 | TMP_DATA--; |
70 | TMP_DATA--; |
69 | width = DSBYTE[TMP_DATA]; |
71 | width = DSBYTE[TMP_DATA]; |
70 | block = math.ceil(height*width/32); |
72 | block = math.ceil(height*width/32); |
71 | return true; |
73 | return true; |
72 | } |
74 | } |
73 | :proc_info Form_SELF_FONTS; |
75 | :proc_info Form_SELF_FONTS; |
74 | 76 | ||
75 | :dword FONT::text_width(dword text1;byte size) |
77 | :dword FONT::text_width(dword text1;byte size) |
76 | { |
78 | { |
77 | dword len=0; |
79 | dword len=0; |
78 | IF(size)IF(!changeSIZE(size))return 0; |
80 | IF(size)IF(!changeSIZE(size))return 0; |
79 | WHILE(DSBYTE[text1]) |
81 | WHILE(DSBYTE[text1]) |
80 | { |
82 | { |
81 | len += symbol_size(DSBYTE[text1]); |
83 | len += symbol_size(DSBYTE[text1]); |
82 | text1++; |
84 | text1++; |
83 | } |
85 | } |
84 | return len; |
86 | return len; |
85 | } |
87 | } |
86 | :byte FONT::symbol_size(byte s) |
88 | :byte FONT::symbol_size(byte s) |
87 | { |
89 | { |
88 | dword xi,yi; |
90 | dword xi,yi; |
89 | dword tmp,_; |
91 | dword tmp,_; |
90 | dword iii; |
92 | dword iii; |
91 | byte rw=0; |
93 | byte rw=0; |
92 | IF(s==32)return width/4; |
94 | IF(s==32)return width/4; |
93 | IF(s==9)return width; |
95 | IF(s==9)return width; |
94 | yi = 0; |
96 | yi = 0; |
95 | iii = 0; |
97 | iii = 0; |
96 | tmp = 4*block*s; |
98 | tmp = 4*block*s; |
97 | tmp +=data; |
99 | tmp +=data; |
98 | WHILE(yi |
100 | WHILE(yi |
99 | { |
101 | { |
100 | xi = 0; |
102 | xi = 0; |
101 | WHILE(xi |
103 | WHILE(xi |
102 | { |
104 | { |
103 | IF(iii%32) _ >>= 1; |
105 | IF(iii%32) _ >>= 1; |
104 | ELSE |
106 | ELSE |
105 | { |
107 | { |
106 | tmp += 4; |
108 | tmp += 4; |
107 | _ = DSDWORD[tmp]; |
109 | _ = DSDWORD[tmp]; |
108 | } |
110 | } |
109 | IF(_&1) IF(xi>rw)rw=xi; |
111 | IF(_&1) IF(xi>rw)rw=xi; |
110 | xi++; |
112 | xi++; |
111 | iii++; |
113 | iii++; |
112 | } |
114 | } |
113 | yi++; |
115 | yi++; |
114 | } |
116 | } |
115 | return rw; |
117 | return rw; |
116 | } |
118 | } |
117 | :dword FONT::text(word x,y;dword text1,c;byte size) |
119 | :dword FONT::text(word x,y;dword text1,c;byte size) |
118 | { |
120 | { |
119 | signed len=0; |
121 | signed len=0; |
120 | IF(size)IF(!changeSIZE(size))return 0; |
122 | IF(size)IF(!changeSIZE(size))return 0; |
121 | GetProcessInfo(#Form_SELF_FONTS, SelfInfo); |
123 | GetProcessInfo(#Form_SELF_FONTS, SelfInfo); |
122 | IF(y>Form_SELF_FONTS.cheight) return 0; |
124 | IF(y>Form_SELF_FONTS.cheight) return 0; |
123 | IF(x>Form_SELF_FONTS.cwidth) return 0; |
125 | IF(x>Form_SELF_FONTS.cwidth) return 0; |
124 | tmp_y = y; |
126 | tmp_y = y; |
125 | AX = c; |
127 | AX = c; |
126 | r = AL; |
128 | r = AL; |
127 | g = AH; |
129 | g = AH; |
128 | c>>=16; |
130 | c>>=16; |
129 | AX = c; |
131 | AX = c; |
130 | b = AL; |
132 | b = AL; |
131 | width_buffer = width; |
133 | width_buffer = text_width(text1,size); |
132 | width_buffer *= strlen(text1); |
134 | //width_buffer *= strlen(text1); |
- | 135 | IF(!buffer_size) |
|
- | 136 | { |
|
133 | IF(!buffer_size)buffer = malloc(width_buffer*height*3); |
137 | buffer_size = width_buffer*height*3; |
- | 138 | buffer = malloc(buffer_size); |
|
- | 139 | } |
|
134 | ELSE IF(buffer_size |
140 | ELSE IF(buffer_size |
- | 141 | { |
|
- | 142 | buffer_size = width_buffer*height*3; |
|
- | 143 | buffer = realloc(buffer,buffer_size); |
|
- | 144 | } |
|
- | 145 | IF (no_bg_copy) |
|
- | 146 | { |
|
- | 147 | EBX = bg_color; |
|
- | 148 | EAX = buffer_size+buffer; |
|
- | 149 | EDI = buffer; |
|
- | 150 | WHILE (EDI |
|
- | 151 | { |
|
- | 152 | ESDWORD[EDI] = EBX; |
|
- | 153 | $add edi,3 |
|
- | 154 | } |
|
- | 155 | } |
|
135 | CopyScreen(buffer,x+Form_SELF_FONTS.left+5,y+Form_SELF_FONTS.top+GetSkinHeight(),width_buffer,height); |
156 | ELSE CopyScreen(buffer,x+Form_SELF_FONTS.left+5,y+Form_SELF_FONTS.top+GetSkinHeight(),width_buffer,height); |
136 | - | ||
- | 157 | //width_buffer = text_width(text1); |
|
137 | WHILE(DSBYTE[text1]) |
158 | WHILE(DSBYTE[text1]) |
138 | { |
159 | { |
139 | symbol(len,DSBYTE[text1],c); |
160 | symbol(len,DSBYTE[text1],c); |
140 | len+=EAX; |
161 | len+=EAX; |
141 | text1++; |
162 | text1++; |
142 | } |
163 | } |
143 | _PutImage(x,y,width_buffer,height,buffer); |
164 | _PutImage(x,y,width_buffer,height,buffer); |
144 | return len; |
165 | return len; |
145 | } |
166 | } |
146 | :dword FONT::textarea(word x,y;dword text1,c;byte size) |
167 | :dword FONT::textarea(word x,y;dword text1,c;byte size) |
147 | { |
168 | { |
148 | 169 | ||
149 | } |
170 | } |
150 | 171 | ||
151 | :byte FONT::symbol(signed x;byte s;dword c) |
172 | :byte FONT::symbol(signed x;byte s;dword c) |
152 | { |
173 | { |
153 | dword xi,yi; |
174 | dword xi,yi; |
154 | dword tmp,_; |
175 | dword tmp,_; |
155 | dword iii; |
176 | dword iii; |
156 | dword ___x; |
177 | dword ___x; |
157 | byte rw=0; |
178 | byte rw=0; |
158 | x -= 2; |
179 | x -= 2; |
159 | IF(s==32)return width/4; |
180 | IF(s==32)return width/4; |
160 | IF(s==9)return width; |
181 | IF(s==9)return width; |
161 | yi = 0; |
182 | yi = 0; |
162 | iii = 0; |
183 | iii = 0; |
163 | tmp = 4*block*s; |
184 | tmp = 4*block*s; |
164 | tmp +=data; |
185 | tmp +=data; |
165 | while(yi |
186 | while(yi |
166 | { |
187 | { |
167 | xi = 0; |
188 | xi = 0; |
168 | WHILE(xi |
189 | WHILE(xi |
169 | { |
190 | { |
170 | IF(iii%32) _ >>= 1; |
191 | IF(iii%32) _ >>= 1; |
171 | ELSE |
192 | ELSE |
172 | { |
193 | { |
173 | tmp += 4; |
194 | tmp += 4; |
174 | _ = DSDWORD[tmp]; |
195 | _ = DSDWORD[tmp]; |
175 | } |
196 | } |
176 | IF(_&1) |
197 | IF(_&1) |
177 | { |
198 | { |
178 | IF(xi>rw)rw=xi; |
199 | IF(xi>rw)rw=xi; |
179 | ___x = x+xi; |
200 | ___x = x+xi; |
180 | IF(___x |
201 | IF(___x |
181 | } |
202 | } |
182 | xi++; |
203 | xi++; |
183 | iii++; |
204 | iii++; |
184 | } |
205 | } |
185 | yi++; |
206 | yi++; |
186 | } |
207 | } |
187 | return rw; |
208 | return rw; |
188 | } |
209 | } |
189 | :byte FONT::load(dword path) |
210 | :byte FONT::load(dword path) |
190 | { |
211 | { |
191 | dword tmp; |
212 | dword tmp; |
- | 213 | buffer_size = 0; |
|
192 | IF(data)free(data); |
214 | IF(data)free(data); |
193 | tmp = io.read(path); |
215 | if (io.read(path)!=0) |
- | 216 | { |
|
- | 217 | debug("Error while loading font: "); |
|
- | 218 | debugln(path); |
|
- | 219 | return 0; |
|
- | 220 | } |
|
- | 221 | tmp = io.buffer_data; |
|
194 | data = tmp; |
222 | data = tmp; |
195 | begin = data; |
223 | begin = data; |
196 | size_file = io.FILES_SIZE; |
224 | size_file = io.FILES_SIZE; |
197 | tmp +=size_file; |
225 | tmp +=size_file; |
198 | tmp--; |
226 | tmp--; |
199 | height = DSBYTE[tmp]; |
227 | height = DSBYTE[tmp]; |
200 | tmp--; |
228 | tmp--; |
201 | width = DSBYTE[tmp]; |
229 | width = DSBYTE[tmp]; |
202 | block = math.ceil(height*width/32); |
230 | block = math.ceil(height*width/32); |
203 | } |
231 | } |
204 | 232 | ||
205 | #endif |
233 | #endif |
206 | > |
234 | > |
207 | > |
235 | > |
208 | > |
236 | > |
209 | > |
237 | > |
210 | > |
238 | > |
211 | >9)> |
239 | > |
- | 240 | > |
|
- | 241 | >9)> |