summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/lib/grey.h9
-rw-r--r--apps/plugins/lib/grey_core.c58
-rw-r--r--apps/plugins/lib/grey_draw.c13
-rw-r--r--apps/plugins/lib/grey_scroll.c273
4 files changed, 168 insertions, 185 deletions
diff --git a/apps/plugins/lib/grey.h b/apps/plugins/lib/grey.h
index 9a3bd7d3f8..5bef88a89a 100644
--- a/apps/plugins/lib/grey.h
+++ b/apps/plugins/lib/grey.h
@@ -121,15 +121,18 @@ void grey_ub_scroll_down(int count);
121#endif 121#endif
122 122
123#if LCD_PIXELFORMAT == HORIZONTAL_PACKING 123#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
124#define _GREY_X_ADVANCE 1 124#define _GREY_BSHIFT 0
125#else 125#else
126#if LCD_DEPTH == 1 126#if LCD_DEPTH == 1
127#define _GREY_X_ADVANCE 8 127#define _GREY_BSHIFT 3
128#elif LCD_DEPTH == 2 128#elif LCD_DEPTH == 2
129#define _GREY_X_ADVANCE 4 129#define _GREY_BSHIFT 2
130#endif 130#endif
131#endif /* LCD_PIXELFORMAT */ 131#endif /* LCD_PIXELFORMAT */
132 132
133#define _GREY_BSIZE (1<<_GREY_BSHIFT)
134#define _GREY_BMASK (_GREY_BSIZE-1)
135
133/* The greyscale buffer management structure */ 136/* The greyscale buffer management structure */
134struct _grey_info 137struct _grey_info
135{ 138{
diff --git a/apps/plugins/lib/grey_core.c b/apps/plugins/lib/grey_core.c
index 43eed9b022..5ba5f41404 100644
--- a/apps/plugins/lib/grey_core.c
+++ b/apps/plugins/lib/grey_core.c
@@ -373,7 +373,10 @@ bool grey_init(struct plugin_api* newrb, unsigned char *gbuf, long gbuf_size,
373 return false; 373 return false;
374 374
375#ifndef SIMULATOR 375#ifndef SIMULATOR
376 /* Init to white */
376 _grey_rb->memset(_grey_info.values, 0x80, plane_size); 377 _grey_rb->memset(_grey_info.values, 0x80, plane_size);
378
379 /* Init phases with random bits */
377 dst = (unsigned*)(_grey_info.phases); 380 dst = (unsigned*)(_grey_info.phases);
378 end = (unsigned*)(_grey_info.phases + plane_size); 381 end = (unsigned*)(_grey_info.phases + plane_size);
379 382
@@ -516,7 +519,7 @@ void grey_update_rect(int x, int y, int width, int height)
516 519
517void grey_update_rect(int x, int y, int width, int height) 520void grey_update_rect(int x, int y, int width, int height)
518{ 521{
519 unsigned char *src; 522 unsigned char *src, *dst;
520 523
521 if ((width <= 0) || (height <= 0)) 524 if ((width <= 0) || (height <= 0))
522 return; /* nothing to do */ 525 return; /* nothing to do */
@@ -527,26 +530,31 @@ void grey_update_rect(int x, int y, int width, int height)
527 width = _grey_info.width - x; 530 width = _grey_info.width - x;
528 531
529 src = _grey_info.buffer + _GREY_MULUQ(_grey_info.width, y) + x; 532 src = _grey_info.buffer + _GREY_MULUQ(_grey_info.width, y) + x;
533
534#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
535 dst = _grey_info.values + _GREY_MULUQ(_grey_info.width, y) + x;
530 536
531 do 537 do
538 {
539 _grey_rb->memcpy(dst, src, width);
540 dst += _grey_info.width;
541 src += _grey_info.width;
542 }
543 while (--height > 0);
544
545#else /* LCD_PIXELFORMAT == VRTICAL_PACKING */
546 do
532 { 547 {
533#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
534 int idx = _GREY_MULUQ(_grey_info.width, y) + x;
535#else
536#if LCD_DEPTH == 1
537 int idx = _GREY_MULUQ(_grey_info.width, y & ~7) + (x << 3) + (~y & 7);
538#elif LCD_DEPTH == 2
539 int idx = _GREY_MULUQ(_grey_info.width, y & ~3) + (x << 2) + (~y & 3);
540#endif
541#endif /* LCD_PIXELFORMAT */
542 unsigned char *dst_row = _grey_info.values + idx;
543 unsigned char *src_row = src; 548 unsigned char *src_row = src;
544 unsigned char *src_end = src + width; 549 unsigned char *src_end = src + width;
545 550
551 dst = _grey_info.values
552 + _GREY_MULUQ(_grey_info.width, y & ~_GREY_BMASK)
553 + (x << _GREY_BSHIFT) + (~y & _GREY_BMASK);
546 do 554 do
547 { 555 {
548 *dst_row = *src_row++; 556 *dst = *src_row++;
549 dst_row += _GREY_X_ADVANCE; 557 dst += _GREY_BSIZE;
550 } 558 }
551 while (src_row < src_end); 559 while (src_row < src_end);
552 560
@@ -554,6 +562,8 @@ void grey_update_rect(int x, int y, int width, int height)
554 src += _grey_info.width; 562 src += _grey_info.width;
555 } 563 }
556 while (--height > 0); 564 while (--height > 0);
565
566#endif /* LCD_PIXELFORMAT */
557} 567}
558 568
559#endif /* !SIMULATOR */ 569#endif /* !SIMULATOR */
@@ -687,18 +697,12 @@ static void grey_screendump_hook(int fd)
687#ifdef SIMULATOR 697#ifdef SIMULATOR
688 unsigned char *src = _grey_info.buffer 698 unsigned char *src = _grey_info.buffer
689 + _GREY_MULUQ(_grey_info.width, gy) + gx; 699 + _GREY_MULUQ(_grey_info.width, gy) + gx;
690
691 for (i = 0; i < 4; i++)
692 linebuf[x + i] = BMP_FIXEDCOLORS + *src++;
693#else 700#else
694 unsigned char *src = _grey_info.values 701 unsigned char *src = _grey_info.values
695 + _GREY_MULUQ(_grey_info.width, gy) + gx; 702 + _GREY_MULUQ(_grey_info.width, gy) + gx;
696 for (i = 0; i < 4; i++)
697 {
698 linebuf[x + i] = BMP_FIXEDCOLORS + *src;
699 src += _GREY_X_ADVANCE;
700 }
701#endif 703#endif
704 for (i = 0; i < 4; i++)
705 linebuf[x + i] = BMP_FIXEDCOLORS + *src++;
702 } 706 }
703 else 707 else
704 { 708 {
@@ -730,7 +734,9 @@ static void grey_screendump_hook(int fd)
730#else 734#else
731 linebuf[x] = BMP_FIXEDCOLORS 735 linebuf[x] = BMP_FIXEDCOLORS
732 + _grey_info.values[_GREY_MULUQ(_grey_info.width, 736 + _grey_info.values[_GREY_MULUQ(_grey_info.width,
733 gy & ~7) + (gx << 3) + (~gy & 7)]; 737 gy & ~_GREY_BMASK)
738 + (gx << _GREY_BSHIFT)
739 + (~gy & _GREY_BMASK)];
734#endif 740#endif
735 } 741 }
736 else 742 else
@@ -757,7 +763,9 @@ static void grey_screendump_hook(int fd)
757#else 763#else
758 linebuf[x] = BMP_FIXEDCOLORS 764 linebuf[x] = BMP_FIXEDCOLORS
759 + _grey_info.values[_GREY_MULUQ(_grey_info.width, 765 + _grey_info.values[_GREY_MULUQ(_grey_info.width,
760 gy & ~3) + (gx << 2) + (~gy & 3)]; 766 gy & ~_GREY_BMASK)
767 + (gx << _GREY_BSHIFT)
768 + (~gy & _GREY_BMASK)];
761#endif 769#endif
762 } 770 }
763 else 771 else
diff --git a/apps/plugins/lib/grey_draw.c b/apps/plugins/lib/grey_draw.c
index ccb8deae7b..683793129e 100644
--- a/apps/plugins/lib/grey_draw.c
+++ b/apps/plugins/lib/grey_draw.c
@@ -634,18 +634,15 @@ void grey_ub_gray_bitmap_part(const unsigned char *src, int src_x, int src_y,
634 if (y + height > _grey_info.height) 634 if (y + height > _grey_info.height)
635 height = _grey_info.height - y; 635 height = _grey_info.height - y;
636 636
637 src += _GREY_MULUQ(stride, src_y) + src_x; /* move starting point */ 637 src += _GREY_MULUQ(stride, src_y) + src_x; /* move starting point */
638 638
639 do 639 do
640 { 640 {
641#if LCD_PIXELFORMAT == HORIZONTAL_PACKING 641#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
642 int idx = _GREY_MULUQ(_grey_info.width, y) + x; 642 int idx = _GREY_MULUQ(_grey_info.width, y) + x;
643#else 643#else
644#if LCD_DEPTH == 1 644 int idx = _GREY_MULUQ(_grey_info.width, y & ~_GREY_BMASK)
645 int idx = _GREY_MULUQ(_grey_info.width, y & ~7) + (x << 3) + (~y & 7); 645 + (x << _GREY_BSHIFT) + (~y & _GREY_BMASK);
646#elif LCD_DEPTH == 2
647 int idx = _GREY_MULUQ(_grey_info.width, y & ~3) + (x << 2) + (~y & 3);
648#endif
649#endif /* LCD_PIXELFORMAT */ 646#endif /* LCD_PIXELFORMAT */
650 unsigned char *dst_row = _grey_info.values + idx; 647 unsigned char *dst_row = _grey_info.values + idx;
651 const unsigned char *src_row = src; 648 const unsigned char *src_row = src;
@@ -654,7 +651,7 @@ void grey_ub_gray_bitmap_part(const unsigned char *src, int src_x, int src_y,
654 do 651 do
655 { 652 {
656 *dst_row = _grey_info.gvalue[*src_row++]; 653 *dst_row = _grey_info.gvalue[*src_row++];
657 dst_row += _GREY_X_ADVANCE; 654 dst_row += _GREY_BSIZE;
658 } 655 }
659 while (src_row < src_end); 656 while (src_row < src_end);
660 657
diff --git a/apps/plugins/lib/grey_scroll.c b/apps/plugins/lib/grey_scroll.c
index 4a18d7d29e..4e1d5070fc 100644
--- a/apps/plugins/lib/grey_scroll.c
+++ b/apps/plugins/lib/grey_scroll.c
@@ -46,8 +46,9 @@ void grey_scroll_left(int count)
46 do 46 do
47 { 47 {
48 _grey_rb->memmove(data, data + count, length); 48 _grey_rb->memmove(data, data + count, length);
49 _grey_rb->memset(data + length, blank, count); 49 data += length;
50 data += _grey_info.width; 50 _grey_rb->memset(data, blank, count);
51 data += count;
51 } 52 }
52 while (data < data_end); 53 while (data < data_end);
53} 54}
@@ -149,210 +150,184 @@ void grey_ub_scroll_down(int count)
149/* Scroll left */ 150/* Scroll left */
150void grey_ub_scroll_left(int count) 151void grey_ub_scroll_left(int count)
151{ 152{
152 unsigned char *dst, *src, *end; 153 unsigned char *data, *data_end;
153 int blank, y, idx; 154 int blank, length;
154 155
155 if ((count == 0) || ((unsigned)count >= (unsigned)_grey_info.width)) 156 if ((unsigned)count >= (unsigned)_grey_info.width)
156 return; 157 return;
157 158
159 data = _grey_info.values;
160 data_end = data + _GREY_MULUQ(_grey_info.width, _grey_info.height);
161 length = (_grey_info.width - count) << _GREY_BSHIFT;
162 count <<= _GREY_BSHIFT;
158 blank = (_grey_info.drawmode & DRMODE_INVERSEVID) ? 163 blank = (_grey_info.drawmode & DRMODE_INVERSEVID) ?
159 _grey_info.fg_val : _grey_info.bg_val; 164 _grey_info.fg_val : _grey_info.bg_val;
160 165
161 for (y = 0; y < _grey_info.height; y++) 166 do
162 { 167 {
163#if LCD_PIXELFORMAT == HORIZONTAL_PACKING 168 _grey_rb->memmove(data, data + count, length);
164 idx = _GREY_MULUQ(_grey_info.width, y); 169 data += length;
165#else 170 _grey_rb->memset(data, blank, count);
166#if LCD_DEPTH == 1 171 data += count;
167 idx = _GREY_MULUQ(_grey_info.width, y & ~7) + (~y & 7);
168#elif LCD_DEPTH == 2
169 idx = _GREY_MULUQ(_grey_info.width, y & ~3) + (~y & 3);
170#endif
171#endif /* LCD_PIXELFORMAT */
172 dst = _grey_info.values + idx;
173 src = dst + count * _GREY_X_ADVANCE;
174 end = dst + _grey_info.width * _GREY_X_ADVANCE;
175
176 do
177 {
178 *dst = *src;
179 dst += _GREY_X_ADVANCE;
180 src += _GREY_X_ADVANCE;
181 }
182 while (src < end);
183
184 do
185 {
186 *dst = blank;
187 dst += _GREY_X_ADVANCE;
188 }
189 while (dst < end);
190 } 172 }
173 while (data < data_end);
191} 174}
192 175
193/* Scroll right */ 176/* Scroll right */
194void grey_ub_scroll_right(int count) 177void grey_ub_scroll_right(int count)
195{ 178{
196 unsigned char *dst, *src, *start; 179 unsigned char *data, *data_end;
197 int blank, y, idx; 180 int blank, length;
198 181
199 if ((count == 0) || ((unsigned)count >= (unsigned)_grey_info.width)) 182 if ((unsigned)count >= (unsigned)_grey_info.width)
200 return; 183 return;
201 184
185 data = _grey_info.values;
186 data_end = data + _GREY_MULUQ(_grey_info.width, _grey_info.height);
187 length = (_grey_info.width - count) << _GREY_BSHIFT;
188 count <<= _GREY_BSHIFT;
202 blank = (_grey_info.drawmode & DRMODE_INVERSEVID) ? 189 blank = (_grey_info.drawmode & DRMODE_INVERSEVID) ?
203 _grey_info.fg_val : _grey_info.bg_val; 190 _grey_info.fg_val : _grey_info.bg_val;
204 191
205 for (y = 0; y < _grey_info.height; y++) 192 do
206 { 193 {
207#if LCD_PIXELFORMAT == HORIZONTAL_PACKING 194 _grey_rb->memmove(data + count, data, length);
208 idx = _GREY_MULUQ(_grey_info.width, y); 195 _grey_rb->memset(data, blank, count);
209#else 196 data += _grey_info.width << _GREY_BSHIFT;
210#if LCD_DEPTH == 1
211 idx = _GREY_MULUQ(_grey_info.width, y & ~7) + (~y & 7);
212#elif LCD_DEPTH == 2
213 idx = _GREY_MULUQ(_grey_info.width, y & ~3) + (~y & 3);
214#endif
215#endif /* LCD_PIXELFORMAT */
216 start = _grey_info.values + idx;
217 dst = start + _grey_info.width * _GREY_X_ADVANCE;
218 src = dst - count * _GREY_X_ADVANCE;
219
220 do
221 {
222 dst -= _GREY_X_ADVANCE;
223 src -= _GREY_X_ADVANCE;
224 *dst = *src;
225 }
226 while (src > start);
227
228 do
229 {
230 dst -= _GREY_X_ADVANCE;
231 *dst = blank;
232 }
233 while (dst > start);
234 } 197 }
198 while (data < data_end);
235} 199}
236 200
201/* Scroll up */
237void grey_ub_scroll_up(int count) 202void grey_ub_scroll_up(int count)
238{ 203{
239 unsigned char *dst, *dst_end, *src; 204 unsigned char *dst, *end, *src;
240 int blank, ys, yd, is, id; 205 int blank;
241 206
242 if ((unsigned)count >= (unsigned)_grey_info.height) 207 if ((unsigned)count >= (unsigned)_grey_info.height)
243 return; 208 return;
244 209
210 dst = _grey_info.values;
211 end = dst + _GREY_MULUQ(_grey_info.height, _grey_info.width);
245 blank = (_grey_info.drawmode & DRMODE_INVERSEVID) ? 212 blank = (_grey_info.drawmode & DRMODE_INVERSEVID) ?
246 _grey_info.fg_val : _grey_info.bg_val; 213 _grey_info.fg_val : _grey_info.bg_val;
247 214
248 for (ys = count, yd = 0; ys < _grey_info.height; ys++, yd++) 215#if LCD_PIXELFORMAT == VERTICAL_PACKING
216 if (count & _GREY_BMASK)
249 { 217 {
250#if LCD_PIXELFORMAT == HORIZONTAL_PACKING 218 /* Scrolling by fractional blocks - move pixel wise. */
251 id = _GREY_MULUQ(_grey_info.width, yd); 219 unsigned char *line_end;
252 is = _GREY_MULUQ(_grey_info.width, ys); 220 int ys, yd;
253#else
254#if LCD_DEPTH == 1
255 id = _GREY_MULUQ(_grey_info.width, yd & ~7) + (~yd & 7);
256 is = _GREY_MULUQ(_grey_info.width, ys & ~7) + (~ys & 7);
257#elif LCD_DEPTH == 2
258 id = _GREY_MULUQ(_grey_info.width, yd & ~3) + (~yd & 3);
259 is = _GREY_MULUQ(_grey_info.width, ys & ~3) + (~ys & 3);
260#endif
261#endif /* LCD_PIXELFORMAT */
262 dst = _grey_info.values + id;
263 src = _grey_info.values + is;
264 dst_end = dst + _grey_info.width * _GREY_X_ADVANCE;
265 221
266 do 222 for (ys = count, yd = 0; ys < _grey_info.height; ys++, yd++)
267 { 223 {
268 *dst = *src; 224 dst = _grey_info.values
269 dst += _GREY_X_ADVANCE; 225 + _GREY_MULUQ(_grey_info.width, yd & ~_GREY_BMASK)
270 src += _GREY_X_ADVANCE; 226 + (~yd & _GREY_BMASK);
227 src = _grey_info.values
228 + _GREY_MULUQ(_grey_info.width, ys & ~_GREY_BMASK)
229 + (~ys & _GREY_BMASK);
230 line_end = dst + _grey_info.width * _GREY_BSIZE;
231
232 do
233 {
234 *dst = *src;
235 dst += _GREY_BSIZE;
236 src += _GREY_BSIZE;
237 }
238 while (dst < line_end);
239 }
240 for (; yd & _GREY_BMASK; yd++) /* Fill remainder of current block. */
241 {
242 dst = _grey_info.values
243 + _GREY_MULUQ(_grey_info.width, yd & ~_GREY_BMASK)
244 + (~yd & _GREY_BMASK);
245 line_end = dst + _grey_info.width * _GREY_BSIZE;
246
247 do
248 {
249 *dst = blank;
250 dst += _GREY_BSIZE;
251 }
252 while (dst < line_end);
271 } 253 }
272 while (dst < dst_end);
273 } 254 }
274 for (; yd < _grey_info.height; yd++) 255 else
275 {
276#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
277 id = _GREY_MULUQ(_grey_info.width, yd);
278#else
279#if LCD_DEPTH == 1
280 id = _GREY_MULUQ(_grey_info.width, yd & ~7) + (~yd & 7);
281#elif LCD_DEPTH == 2
282 id = _GREY_MULUQ(_grey_info.width, yd & ~3) + (~yd & 3);
283#endif 256#endif
284#endif /* LCD_PIXELFORMAT */ 257 {
285 dst = _grey_info.values + id; 258 int blen = _GREY_MULUQ(_grey_info.height - count, _grey_info.width);
286 dst_end = dst + _grey_info.width * _GREY_X_ADVANCE;
287 259
288 do 260 src = dst + _GREY_MULUQ(count, _grey_info.width);
289 { 261 _grey_rb->memmove(dst, src, blen);
290 *dst = blank; 262 dst += blen;
291 dst += _GREY_X_ADVANCE;
292 }
293 while (dst < dst_end);
294 } 263 }
264 _grey_rb->memset(dst, blank, end - dst); /* Fill remainder at once. */
295} 265}
296 266
267/* Scroll down */
297void grey_ub_scroll_down(int count) 268void grey_ub_scroll_down(int count)
298{ 269{
299 unsigned char *dst, *dst_end, *src; 270 unsigned char *start, *dst, *src;
300 int blank, ys, yd, is, id; 271 int blank;
301 272
302 if ((unsigned)count >= (unsigned)_grey_info.height) 273 if ((unsigned)count >= (unsigned)_grey_info.height)
303 return; 274 return;
304 275
276 start = _grey_info.values;
277 dst = start + _GREY_MULUQ(_grey_info.height, _grey_info.width);
305 blank = (_grey_info.drawmode & DRMODE_INVERSEVID) ? 278 blank = (_grey_info.drawmode & DRMODE_INVERSEVID) ?
306 _grey_info.fg_val : _grey_info.bg_val; 279 _grey_info.fg_val : _grey_info.bg_val;
307 280
308 yd = _grey_info.height - 1; 281#if LCD_PIXELFORMAT == VERTICAL_PACKING
309 for (ys = yd - count; ys >= 0; ys--, yd--) 282 if (count & _GREY_BMASK)
310 { 283 {
311#if LCD_PIXELFORMAT == HORIZONTAL_PACKING 284 /* Scrolling by fractional blocks - move pixel wise. */
312 id = _GREY_MULUQ(_grey_info.width, yd); 285 unsigned char *line_end;
313 is = _GREY_MULUQ(_grey_info.width, ys); 286 int ys, yd;
314#else
315#if LCD_DEPTH == 1
316 id = _GREY_MULUQ(_grey_info.width, yd & ~7) + (~yd & 7);
317 is = _GREY_MULUQ(_grey_info.width, ys & ~7) + (~ys & 7);
318#elif LCD_DEPTH == 2
319 id = _GREY_MULUQ(_grey_info.width, yd & ~3) + (~yd & 3);
320 is = _GREY_MULUQ(_grey_info.width, ys & ~3) + (~ys & 3);
321#endif
322#endif /* LCD_PIXELFORMAT */
323 dst = _grey_info.values + id;
324 src = _grey_info.values + is;
325 dst_end = dst + _grey_info.width * _GREY_X_ADVANCE;
326 287
327 do 288 yd = _grey_info.height - 1;
289 for (ys = yd - count; ys >= 0; ys--, yd--)
328 { 290 {
329 *dst = *src; 291 dst = _grey_info.values
330 dst += _GREY_X_ADVANCE; 292 + _GREY_MULUQ(_grey_info.width, yd & ~_GREY_BMASK)
331 src += _GREY_X_ADVANCE; 293 + (~yd & _GREY_BMASK);
294 src = _grey_info.values
295 + _GREY_MULUQ(_grey_info.width, ys & ~_GREY_BMASK)
296 + (~ys & _GREY_BMASK);
297 line_end = dst + _grey_info.width * _GREY_BSIZE;
298
299 do
300 {
301 *dst = *src;
302 dst += _GREY_BSIZE;
303 src += _GREY_BSIZE;
304 }
305 while (dst < line_end);
306 }
307 for (; ~yd & _GREY_BMASK; yd--) /* Fill remainder of current block. */
308 {
309 dst = _grey_info.values
310 + _GREY_MULUQ(_grey_info.width, yd & ~_GREY_BMASK)
311 + (~yd & _GREY_BMASK);
312 line_end = dst + _grey_info.width * _GREY_BSIZE;
313
314 do
315 {
316 line_end -= _GREY_BSIZE;
317 *line_end = blank;
318 }
319 while (dst < line_end);
332 } 320 }
333 while (dst < dst_end);
334 } 321 }
335 for (; yd >= 0; yd--) 322 else
336 {
337#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
338 id = _GREY_MULUQ(_grey_info.width, yd);
339#else
340#if LCD_DEPTH == 1
341 id = _GREY_MULUQ(_grey_info.width, yd & ~7) + (~yd & 7);
342#elif LCD_DEPTH == 2
343 id = _GREY_MULUQ(_grey_info.width, yd & ~3) + (~yd & 3);
344#endif 323#endif
345#endif /* LCD_PIXELFORMAT */ 324 {
346 dst = _grey_info.values + id; 325 int blen = _GREY_MULUQ(_grey_info.height - count, _grey_info.width);
347 dst_end = dst + _grey_info.width * _GREY_X_ADVANCE;
348 326
349 do 327 dst -= blen;
350 { 328 _grey_rb->memmove(dst, start, blen);
351 *dst = blank;
352 dst += _GREY_X_ADVANCE;
353 }
354 while (dst < dst_end);
355 } 329 }
330 _grey_rb->memset(start, blank, dst - start); /* Fill remainder at once. */
356} 331}
357 332
358#endif /* !SIMULATOR */ 333#endif /* !SIMULATOR */