Rev 6265 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6265 | Rev 6784 | ||
---|---|---|---|
1 | #ifndef INCLUDE_LABEL_H |
1 | #ifndef INCLUDE_LABEL_H |
2 | #define INCLUDE_LABEL_H |
2 | #define INCLUDE_LABEL_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_FS_H |
8 | #ifndef INCLUDE_IO_H |
9 | #include "../lib/obj/fs.h" |
9 | #include "../lib/io.h" |
10 | #endif |
10 | #endif |
11 | 11 | ||
12 | #include "../lib/patterns/rgb.h" |
12 | #include "../lib/patterns/rgb.h" |
13 | 13 | ||
14 | 14 | ||
15 | #define DEFAULT_FONT "/sys/fonts/Tahoma.kf" |
15 | #define DEFAULT_FONT "/sys/fonts/Tahoma.kf" |
16 | 16 | ||
17 | :struct __SIZE |
17 | :struct __SIZE |
18 | { |
18 | { |
19 | dword width,height; |
19 | dword width,height; |
20 | signed offset_x, offset_y; |
20 | signed offset_x, offset_y; |
21 | float offset_i,w_italic; |
21 | float offset_i,w_italic; |
22 | byte pt; |
22 | byte pt; |
23 | byte TMP_WEIGHT; |
23 | byte TMP_WEIGHT; |
24 | }; |
24 | }; |
25 | :struct LABEL |
25 | :struct LABEL |
26 | { |
26 | { |
27 | __SIZE size; |
27 | __SIZE size; |
28 | int width,height; |
28 | int width,height; |
29 | byte bold,italic,smooth; |
29 | byte bold,italic,smooth; |
30 | dword color, background; |
30 | dword color, background; |
31 | dword font,font_begin; |
31 | dword font,font_begin; |
32 | word block; |
32 | word block; |
33 | byte init(); |
33 | byte init(); |
34 | byte changeSIZE(); |
34 | byte changeSIZE(); |
35 | byte symbol(); |
35 | byte symbol(); |
36 | byte symbol_size(); |
36 | byte symbol_size(); |
37 | dword getsize(); |
37 | dword getsize(); |
38 | 38 | ||
39 | dword raw; |
39 | dword raw; |
40 | dword raw_size; |
40 | dword raw_size; |
41 | void apply_smooth(); |
41 | void apply_smooth(); |
42 | int write_center(); |
42 | int write_center(); |
43 | int write(); |
43 | int write(); |
44 | void write_buf(); |
44 | void write_buf(); |
45 | void show_buf(); |
45 | void show_buf(); |
46 | } label; |
46 | } label; |
47 | 47 | ||
48 | :byte LABEL::changeSIZE() |
48 | :byte LABEL::changeSIZE() |
49 | { |
49 | { |
50 | dword file_size; |
50 | dword file_size; |
51 | dword TMP_DATA; |
51 | dword TMP_DATA; |
52 | dword ofs; |
52 | dword ofs; |
53 | IF(size.pt<9) size.pt = 8; |
53 | IF(size.pt<9) size.pt = 8; |
54 | TMP_DATA = font = font_begin; |
54 | TMP_DATA = font = font_begin; |
55 | TMP_DATA +=size.pt-8*4; |
55 | TMP_DATA +=size.pt-8*4; |
56 | ofs = DSDWORD[TMP_DATA]; |
56 | ofs = DSDWORD[TMP_DATA]; |
57 | IF(ofs==-1)return false; |
57 | IF(ofs==-1)return false; |
58 | font += ofs + 156; |
58 | font += ofs + 156; |
59 | TMP_DATA = font; |
59 | TMP_DATA = font; |
60 | file_size = DSDWORD[TMP_DATA]; |
60 | file_size = DSDWORD[TMP_DATA]; |
61 | TMP_DATA = font + file_size; |
61 | TMP_DATA = font + file_size; |
62 | height = DSBYTE[TMP_DATA - 1]; |
62 | height = DSBYTE[TMP_DATA - 1]; |
63 | width = DSBYTE[TMP_DATA - 2]; |
63 | width = DSBYTE[TMP_DATA - 2]; |
64 | block = math.ceil(height*width/32); |
64 | block = math.ceil(height*width/32); |
65 | return true; |
65 | return true; |
66 | } |
66 | } |
67 | :dword LABEL::getsize(dword text1) |
67 | :dword LABEL::getsize(dword text1) |
68 | { |
68 | { |
69 | size.height = size.width = 0; |
69 | size.height = size.width = 0; |
70 | size.offset_x = size.offset_y = -1; |
70 | size.offset_x = size.offset_y = -1; |
71 | IF(size.pt)IF(!changeSIZE())return 0; |
71 | IF(size.pt)IF(!changeSIZE())return 0; |
72 | WHILE(DSBYTE[text1]) |
72 | WHILE(DSBYTE[text1]) |
73 | { |
73 | { |
74 | symbol_size(DSBYTE[text1]); |
74 | symbol_size(DSBYTE[text1]); |
75 | text1++; |
75 | text1++; |
76 | } |
76 | } |
77 | $neg size.offset_y |
77 | $neg size.offset_y |
78 | $neg size.offset_x |
78 | $neg size.offset_x |
79 | size.height += size.offset_y+1; |
79 | size.height += size.offset_y+1; |
80 | size.width += size.offset_x+1; |
80 | size.width += size.offset_x+1; |
81 | IF(italic) |
81 | IF(italic) |
82 | { |
82 | { |
83 | size.w_italic = size.height/3; |
83 | size.w_italic = size.height/3; |
84 | size.offset_i = size.w_italic/size.height; |
84 | size.offset_i = size.w_italic/size.height; |
85 | size.width += size.w_italic; |
85 | size.width += size.w_italic; |
86 | size.w_italic = -size.w_italic; |
86 | size.w_italic = -size.w_italic; |
87 | } |
87 | } |
88 | return size.width; |
88 | return size.width; |
89 | } |
89 | } |
90 | :byte LABEL::symbol_size(byte s) |
90 | :byte LABEL::symbol_size(byte s) |
91 | { |
91 | { |
92 | dword xi,yi; |
92 | dword xi,yi; |
93 | dword tmp,_; |
93 | dword tmp,_; |
94 | dword iii = 0; |
94 | dword iii = 0; |
95 | byte rw=0; |
95 | byte rw=0; |
96 | byte X; |
96 | byte X; |
97 | size.TMP_WEIGHT = math.ceil(size.pt/17); |
97 | size.TMP_WEIGHT = math.ceil(size.pt/17); |
98 | IF(s==32) |
98 | IF(s==32) |
99 | { |
99 | { |
100 | size.width += width/4; |
100 | size.width += width/4; |
101 | IF(bold) size.width+=size.TMP_WEIGHT; |
101 | IF(bold) size.width+=size.TMP_WEIGHT; |
102 | return; |
102 | return; |
103 | } |
103 | } |
104 | IF(s==9) |
104 | IF(s==9) |
105 | { |
105 | { |
106 | size.width += width; |
106 | size.width += width; |
107 | IF(bold) size.width+=size.TMP_WEIGHT; |
107 | IF(bold) size.width+=size.TMP_WEIGHT; |
108 | return; |
108 | return; |
109 | } |
109 | } |
110 | s = Cp866ToAnsi(s); |
110 | s = Cp866ToAnsi(s); |
111 | tmp = 4*block*s + font; |
111 | tmp = 4*block*s + font; |
112 | for(yi=0; yi |
112 | for(yi=0; yi |
113 | { |
113 | { |
114 | for(xi=0; xi |
114 | for(xi=0; xi |
115 | { |
115 | { |
116 | IF(iii%32) _ >>= 1; |
116 | IF(iii%32) _ >>= 1; |
117 | ELSE |
117 | ELSE |
118 | { |
118 | { |
119 | tmp += 4; |
119 | tmp += 4; |
120 | _ = DSDWORD[tmp]; |
120 | _ = DSDWORD[tmp]; |
121 | } |
121 | } |
122 | IF(_&1) |
122 | IF(_&1) |
123 | { |
123 | { |
124 | IF(xi>rw)rw=xi; |
124 | IF(xi>rw)rw=xi; |
125 | IF(size.height |
125 | IF(size.height |
126 | IF(size.offset_y<0)size.offset_y = yi; |
126 | IF(size.offset_y<0)size.offset_y = yi; |
127 | ELSE IF(yi |
127 | ELSE IF(yi |
128 | IF(!X) X = xi; |
128 | IF(!X) X = xi; |
129 | ELSE IF(X>xi)X = xi; |
129 | ELSE IF(X>xi)X = xi; |
130 | } |
130 | } |
131 | iii++; |
131 | iii++; |
132 | } |
132 | } |
133 | } |
133 | } |
134 | size.width += rw; |
134 | size.width += rw; |
135 | IF(bold) size.width+=size.TMP_WEIGHT; |
135 | IF(bold) size.width+=size.TMP_WEIGHT; |
136 | //IF(s=='_') size.width--; //http://board.kolibrios.org/viewtopic.php?f=44&t=973&start=645 |
136 | //IF(s=='_') size.width--; //http://board.kolibrios.org/viewtopic.php?f=44&t=973&start=645 |
137 | IF(size.offset_x<0)size.offset_x = X; |
137 | IF(size.offset_x<0)size.offset_x = X; |
138 | } |
138 | } |
139 | :byte LABEL::symbol(signed x,y; byte s; dword image_raw) |
139 | :byte LABEL::symbol(signed x,y; byte s; dword image_raw) |
140 | { |
140 | { |
141 | dword xi,yi; |
141 | dword xi,yi; |
142 | dword iii = 0; |
142 | dword iii = 0; |
143 | dword offs; |
143 | dword offs; |
144 | float ital = -size.w_italic; |
144 | float ital = -size.w_italic; |
145 | dword ___x; |
145 | dword ___x; |
146 | byte rw=0; |
146 | byte rw=0; |
147 | IF(s==32)return width/4; |
147 | IF(s==32)return width/4; |
148 | IF(s==9)return width; |
148 | IF(s==9)return width; |
149 | s = Cp866ToAnsi(s); |
149 | s = Cp866ToAnsi(s); |
150 | EBX = block*s << 2 + font; |
150 | EBX = block*s << 2 + font; |
151 | for(yi=0; yi |
151 | for(yi=0; yi |
152 | { |
152 | { |
153 | EDI = size.offset_y + yi + y * size.width * 3 + image_raw; |
153 | EDI = size.offset_y + yi + y * size.width * 3 + image_raw; |
154 | for(xi=0; xi |
154 | for(xi=0; xi |
155 | { |
155 | { |
156 | IF(iii%32) $shr ecx,1 |
156 | IF(iii%32) $shr ecx,1 |
157 | ELSE |
157 | ELSE |
158 | { |
158 | { |
159 | EBX += 4; |
159 | EBX += 4; |
160 | ECX = DSDWORD[EBX]; |
160 | ECX = DSDWORD[EBX]; |
161 | } |
161 | } |
162 | IF(ECX&true) |
162 | IF(ECX&true) |
163 | { |
163 | { |
164 | IF(xi>rw)rw=xi; |
164 | IF(xi>rw)rw=xi; |
165 | ___x = x+xi; |
165 | ___x = x+xi; |
166 | IF(italic)___x+=math.ceil(ital); |
166 | IF(italic)___x+=math.ceil(ital); |
167 | offs = ___x*3 + EDI; |
167 | offs = ___x*3 + EDI; |
168 | DSDWORD[offs] = DSDWORD[offs] & 0xFF000000 | color; |
168 | DSDWORD[offs] = DSDWORD[offs] & 0xFF000000 | color; |
169 | IF(bold) DSDWORD[offs+3] = DSDWORD[offs+3] & 0xFF000000 | color; |
169 | IF(bold) DSDWORD[offs+3] = DSDWORD[offs+3] & 0xFF000000 | color; |
170 | } |
170 | } |
171 | iii++; |
171 | iii++; |
172 | } |
172 | } |
173 | if (italic) ital-=size.offset_i; |
173 | if (italic) ital-=size.offset_i; |
174 | } |
174 | } |
175 | return rw; |
175 | return rw; |
176 | } |
176 | } |
177 | 177 | ||
178 | byte Cp866ToAnsi(byte s) { |
178 | byte Cp866ToAnsi(byte s) { |
179 | IF(s>=128)&&(s<=175)s+=64; |
179 | IF(s>=128)&&(s<=175)s+=64; |
180 | ELSE IF(s>=224)&&(s<=239)s+=16; |
180 | ELSE IF(s>=224)&&(s<=239)s+=16; |
181 | ELSE IF(s==241)s=184; //e rus with dots (yo) |
181 | ELSE IF(s==241)s=184; //e rus with dots (yo) |
182 | ELSE IF(s==240)s=168; //E rus with dots (yo) |
182 | ELSE IF(s==240)s=168; //E rus with dots (yo) |
183 | ELSE IF(s==242)s='E'; //E urk (ye) |
183 | ELSE IF(s==242)s='E'; //E ukr (ye) |
184 | ELSE IF(s==243)s=186; //e urk (ye) |
184 | ELSE IF(s==243)s=186; //e ukr (ye) |
185 | ELSE IF(s==244)s='I'; //I urk (yi) |
185 | ELSE IF(s==244)s='I'; //I ukr (yi) |
186 | ELSE IF(s==245)s=191; //i urk (yi) |
186 | ELSE IF(s==245)s=191; //i ukr (yi) |
187 | return s; |
187 | return s; |
188 | } |
188 | } |
189 | 189 | ||
190 | :byte LABEL::init(dword font_path) |
190 | :byte LABEL::init(dword font_path) |
191 | { |
191 | { |
192 | lib_init_fs(); |
192 | IO label_io; |
193 | IF(font)free(font); |
193 | IF(font)free(font); |
194 | IF(!fs.read(font_path)) { |
194 | label_io.read(font_path); |
195 | debug("Error while loading font: "); |
- | |
196 | debugln(font_path); |
195 | IF(!EAX) { |
197 | //io.run("/sys/@notify","'Error: Font is not loaded.' -E"); |
196 | notify("'Error: KFONT is not loaded.' -E"); |
198 | return false; |
197 | return false; |
199 | } |
198 | } |
200 | font_begin = font = EAX; |
199 | font_begin = font = label_io.buffer_data; |
201 | EBX = font_begin + ECX; |
- | |
202 | height = DSBYTE[EBX-1]; |
200 | height = DSBYTE[calc(font_begin+label_io.FILES_SIZE)-1]; |
203 | width = DSBYTE[EBX-2]; |
201 | width = DSBYTE[calc(font_begin+label_io.FILES_SIZE)-2]; |
204 | block = math.ceil(height*width/32); |
202 | block = math.ceil(height*width/32); |
205 | smooth = true; |
203 | smooth = true; |
206 | return true; |
204 | return true; |
207 | } |
205 | } |
208 | 206 | ||
209 | 207 | ||
210 | /*===================================================================================== |
208 | /*===================================================================================== |
211 | =========================== =========================== |
209 | =========================== =========================== |
212 | =========================== RAW =========================== |
210 | =========================== RAW =========================== |
213 | =========================== =========================== |
211 | =========================== =========================== |
214 | =====================================================================================*/ |
212 | =====================================================================================*/ |
215 | 213 | ||
216 | 214 | ||
217 | inline fastcall dword b24(EAX) { return DSDWORD[EAX] & 0x00FFFFFF; } |
215 | inline fastcall dword b24(EAX) { return DSDWORD[EAX] & 0x00FFFFFF; } |
218 | :void LABEL::apply_smooth() |
216 | :void LABEL::apply_smooth() |
219 | { |
217 | { |
220 | dword i,line_w,to,dark_background; |
218 | dword i,line_w,to,dark_background; |
221 | line_w = size.width * 3; |
219 | line_w = size.width * 3; |
222 | to = size.height - 1 * line_w + raw - 3; |
220 | to = size.height - 1 * line_w + raw - 3; |
223 | for(i=raw; i < to; i+=3) |
221 | for(i=raw; i < to; i+=3) |
224 | { |
222 | { |
225 | if(i-raw%line_w +3 == line_w) continue; |
223 | if(i-raw%line_w +3 == line_w) continue; |
226 | // pixels position, where b - black, w - write |
224 | // pixels position, where b - black, w - write |
227 | // bw |
225 | // bw |
228 | // wb |
226 | // wb |
229 | if(b24(i)!=background) && (b24(i+3)==background) && (b24(i+line_w)==background) && (b24(i+3+line_w)!=background) |
227 | if(b24(i)!=background) && (b24(i+3)==background) && (b24(i+line_w)==background) && (b24(i+3+line_w)!=background) |
230 | { |
228 | { |
231 | dark_background = MixColors(background,b24(i),210); |
229 | dark_background = MixColors(background,b24(i),210); |
232 | DSDWORD[i+3] = DSDWORD[i+3] & 0xFF000000 | dark_background; |
230 | DSDWORD[i+3] = DSDWORD[i+3] & 0xFF000000 | dark_background; |
233 | DSDWORD[i+line_w] = DSDWORD[i+line_w] & 0xFF000000 | dark_background; |
231 | DSDWORD[i+line_w] = DSDWORD[i+line_w] & 0xFF000000 | dark_background; |
234 | } |
232 | } |
235 | // wb |
233 | // wb |
236 | // bw |
234 | // bw |
237 | else if(b24(i)==background) && (b24(i+3)!=background) && (b24(i+line_w)!=background) && (b24(i+3+line_w)==background) |
235 | else if(b24(i)==background) && (b24(i+3)!=background) && (b24(i+line_w)!=background) && (b24(i+3+line_w)==background) |
238 | { |
236 | { |
239 | dark_background = MixColors(background,b24(i+3),210); |
237 | dark_background = MixColors(background,b24(i+3),210); |
240 | DSDWORD[i] = DSDWORD[i] & 0xFF000000 | dark_background; |
238 | DSDWORD[i] = DSDWORD[i] & 0xFF000000 | dark_background; |
241 | DSDWORD[i+3+line_w] = DSDWORD[i+3+line_w] & 0xFF000000 | dark_background; |
239 | DSDWORD[i+3+line_w] = DSDWORD[i+3+line_w] & 0xFF000000 | dark_background; |
242 | } |
240 | } |
243 | } |
241 | } |
244 | } |
242 | } |
245 | 243 | ||
246 | :int LABEL::write_center(dword x,y,w,h; dword _background, _color; byte fontSizePoints; dword txt) |
244 | :int LABEL::write_center(dword x,y,w,h; dword _background, _color; byte fontSizePoints; dword txt) |
247 | { |
245 | { |
248 | size.pt = fontSizePoints; |
246 | size.pt = fontSizePoints; |
249 | getsize(txt); |
247 | getsize(txt); |
250 | return write(w-size.width/2+x,y, _background, _color, fontSizePoints, txt); |
248 | return write(w-size.width/2+x,y, _background, _color, fontSizePoints, txt); |
251 | } |
249 | } |
252 | 250 | ||
253 | :int LABEL::write(int x,y; dword _background, _color; byte fontSizePoints; dword text1) |
251 | :int LABEL::write(int x,y; dword _background, _color; byte fontSizePoints; dword text1) |
254 | { |
252 | { |
255 | signed len=0; |
253 | signed len=0; |
256 | IF(!text1)return false; |
254 | IF(!text1)return false; |
257 | IF(size.pt)IF(!changeSIZE())return false; |
255 | IF(size.pt)IF(!changeSIZE())return false; |
258 | size.pt = fontSizePoints; |
256 | size.pt = fontSizePoints; |
259 | getsize(text1); |
257 | getsize(text1); |
260 | color = _color; |
258 | color = _color; |
261 | background = _background; |
259 | background = _background; |
262 | y -= size.offset_y; |
260 | y -= size.offset_y; |
263 | EDX = size.width*size.height*3; |
261 | EDX = size.width*size.height*3; |
264 | IF(!raw_size) |
262 | IF(!raw_size) |
265 | { |
263 | { |
266 | raw_size = EDX; |
264 | raw_size = EDX; |
267 | raw = malloc(raw_size); |
265 | raw = malloc(raw_size); |
268 | } |
266 | } |
269 | ELSE IF(raw_size |
267 | ELSE IF(raw_size |
270 | { |
268 | { |
271 | raw_size = EDX; |
269 | raw_size = EDX; |
272 | raw = realloc(raw,raw_size); |
270 | raw = realloc(raw,raw_size); |
273 | } |
271 | } |
274 | // Fill background color { |
272 | // Fill background color { |
275 | EBX = background; |
273 | EBX = background; |
276 | EAX = raw_size+raw; |
274 | EAX = raw_size+raw; |
277 | for (EDI=raw; EDI |
275 | for (EDI=raw; EDI |
278 | // } |
276 | // } |
279 | len = size.offset_x; |
277 | len = size.offset_x; |
280 | WHILE(DSBYTE[text1]) |
278 | WHILE(DSBYTE[text1]) |
281 | { |
279 | { |
282 | //IF(DSBYTE[text1]=='_') len--; //http://board.kolibrios.org/viewtopic.php?f=44&t=973&start=645 |
280 | //IF(DSBYTE[text1]=='_') len--; //http://board.kolibrios.org/viewtopic.php?f=44&t=973&start=645 |
283 | len+=symbol(len,0,DSBYTE[text1], raw); |
281 | len+=symbol(len,0,DSBYTE[text1], raw); |
284 | IF(bold)len+=math.ceil(size.pt/17); |
282 | IF(bold)len+=math.ceil(size.pt/17); |
285 | text1++; |
283 | text1++; |
286 | } |
284 | } |
287 | IF (smooth) apply_smooth(); |
285 | IF (smooth) apply_smooth(); |
288 | show_buf(x,y); |
286 | show_buf(x,y); |
289 | return len; |
287 | return len; |
290 | } |
288 | } |
291 | 289 | ||
292 | :void LABEL::write_buf(int x,y,w,h; dword _background, _color; byte fontSizePoints; dword text1) |
290 | :void LABEL::write_buf(int x,y,w,h; dword _background, _color; byte fontSizePoints; dword text1) |
293 | { |
291 | { |
294 | dword new_raw_size; |
292 | dword new_raw_size; |
295 | IF(!text1)return; |
293 | IF(!text1)return; |
296 | IF(size.pt)IF(!changeSIZE())return; |
294 | IF(size.pt)IF(!changeSIZE())return; |
297 | 295 | ||
298 | if (size.pt != fontSizePoints) { |
296 | if (size.pt != fontSizePoints) { |
299 | size.pt = fontSizePoints; |
297 | size.pt = fontSizePoints; |
300 | getsize(text1); |
298 | getsize(text1); |
301 | y -= size.offset_y; |
299 | y -= size.offset_y; |
302 | } |
300 | } |
303 | color = _color; |
301 | color = _color; |
304 | background = _background; |
302 | background = _background; |
305 | 303 | ||
306 | size.width = w; |
304 | size.width = w; |
307 | size.height = h; |
305 | size.height = h; |
308 | 306 | ||
309 | new_raw_size = w*h*3; |
307 | new_raw_size = w*h*3; |
310 | IF(raw_size != new_raw_size) |
308 | IF(raw_size != new_raw_size) |
311 | { |
309 | { |
312 | raw_size = new_raw_size; |
310 | raw_size = new_raw_size; |
313 | free(raw); |
311 | free(raw); |
314 | raw = malloc(raw_size); |
312 | raw = malloc(raw_size); |
315 | // Fill background color |
313 | // Fill background color |
316 | EBX = background; |
314 | EBX = background; |
317 | EAX = raw_size+raw; |
315 | EAX = raw_size+raw; |
318 | for (EDI=raw; EDI |
316 | for (EDI=raw; EDI |
319 | } |
317 | } |
320 | WHILE(DSBYTE[text1]) |
318 | WHILE(DSBYTE[text1]) |
321 | { |
319 | { |
322 | x+=symbol(x,y,DSBYTE[text1], raw); |
320 | x+=symbol(x,y,DSBYTE[text1], raw); |
323 | IF(bold)x+=math.ceil(size.pt/17); |
321 | IF(bold)x+=math.ceil(size.pt/17); |
324 | text1++; |
322 | text1++; |
325 | } |
323 | } |
326 | return; |
324 | return; |
327 | } |
325 | } |
328 | 326 | ||
329 | :void LABEL::show_buf(dword x, y){ |
327 | :void LABEL::show_buf(dword x, y){ |
330 | _PutImage(x, y, size.width, size.height, raw); |
328 | _PutImage(x, y, size.width, size.height, raw); |
331 | } |
329 | } |
332 | 330 | ||
333 | 331 | ||
334 | 332 | ||
335 | #endif |
333 | #endif |
336 | >>=239)s+=16; |
334 | >>=239)s+=16; |
337 | >=175)s+=64; |
335 | >=175)s+=64; |
338 | >><>0)size.offset_x>0)size.offset_y>9)> |
336 | >><>0)size.offset_x>0)size.offset_y>9)> |