1 /***************************************************************************
2 * Copyright (c) 2024 Microsoft Corporation
3 *
4 * This program and the accompanying materials are made available under the
5 * terms of the MIT License which is available at
6 * https://opensource.org/licenses/MIT.
7 *
8 * SPDX-License-Identifier: MIT
9 **************************************************************************/
10
11
12 /**************************************************************************/
13 /**************************************************************************/
14 /** */
15 /** GUIX Component */
16 /** */
17 /** Display Management (Display) */
18 /** */
19 /**************************************************************************/
20
21 #define GX_SOURCE_CODE
22
23
24 /* Include necessary system files. */
25
26 #include "gx_api.h"
27 #include "gx_display.h"
28 #include "gx_context.h"
29
30 /**************************************************************************/
31 /* */
32 /* FUNCTION RELEASE */
33 /* */
34 /* _gx_display_driver_8bpp_rotated_pixelmap_raw_write PORTABLE C */
35 /* 6.1.4 */
36 /* AUTHOR */
37 /* */
38 /* Kenneth Maxwell, Microsoft Corporation */
39 /* */
40 /* DESCRIPTION */
41 /* */
42 /* Internal helper function that handles writing of uncompressed */
43 /* pixlemap file without alpha channel. */
44 /* */
45 /* INPUT */
46 /* */
47 /* context Drawing context */
48 /* xpos x-coord of top-left draw point*/
49 /* ypos y-coord of top-left draw point*/
50 /* pixelmap Pointer to GX_PIXELMAP struct */
51 /* */
52 /* OUTPUT */
53 /* */
54 /* None */
55 /* */
56 /* CALLED BY */
57 /* */
58 /* GUIX Internal Code */
59 /* */
60 /* RELEASE HISTORY */
61 /* */
62 /* DATE NAME DESCRIPTION */
63 /* */
64 /* 02-02-2021 Kenneth Maxwell Initial Version 6.1.4 */
65 /* */
66 /**************************************************************************/
_gx_display_driver_8bpp_rotated_pixelmap_raw_write(GX_DRAW_CONTEXT * context,INT xpos,INT ypos,GX_PIXELMAP * pixelmap)67 static VOID _gx_display_driver_8bpp_rotated_pixelmap_raw_write(GX_DRAW_CONTEXT *context,
68 INT xpos, INT ypos, GX_PIXELMAP *pixelmap)
69 {
70 INT xval;
71 INT yval;
72 GX_UBYTE *putrow;
73 GX_UBYTE *getrow;
74 GX_UBYTE *put;
75 GX_CONST GX_UBYTE *get;
76
77 GX_RECTANGLE *clip = context -> gx_draw_context_clip;
78 GX_RECTANGLE rotated_clip;
79
80 GX_SWAP_VALS(xpos, ypos);
81
82 if (context -> gx_draw_context_display -> gx_display_rotation_angle == GX_SCREEN_ROTATION_CW)
83 {
84 rotated_clip.gx_rectangle_left = clip -> gx_rectangle_top;
85 rotated_clip.gx_rectangle_right = clip -> gx_rectangle_bottom;
86 rotated_clip.gx_rectangle_top = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_x_resolution - clip -> gx_rectangle_right - 1);
87 rotated_clip.gx_rectangle_bottom = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_x_resolution - clip -> gx_rectangle_left - 1);
88 ypos = (context -> gx_draw_context_canvas -> gx_canvas_x_resolution - ypos - pixelmap -> gx_pixelmap_width);
89 }
90 else
91 {
92 rotated_clip.gx_rectangle_left = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_y_resolution - clip -> gx_rectangle_bottom - 1);
93 rotated_clip.gx_rectangle_right = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_y_resolution - clip -> gx_rectangle_top - 1);
94 rotated_clip.gx_rectangle_top = clip -> gx_rectangle_left;
95 rotated_clip.gx_rectangle_bottom = clip -> gx_rectangle_right;
96 xpos = (context -> gx_draw_context_canvas -> gx_canvas_y_resolution - xpos - pixelmap -> gx_pixelmap_height);
97 }
98
99 putrow = (GX_UBYTE *)context -> gx_draw_context_memory;
100 putrow += rotated_clip.gx_rectangle_top * context -> gx_draw_context_pitch;
101 putrow += rotated_clip.gx_rectangle_left;
102
103 getrow = (GX_UBYTE *)(pixelmap -> gx_pixelmap_data);
104 getrow += pixelmap -> gx_pixelmap_height * (rotated_clip.gx_rectangle_top - ypos);
105 getrow += (rotated_clip.gx_rectangle_left - xpos);
106
107 for (yval = rotated_clip.gx_rectangle_top; yval <= rotated_clip.gx_rectangle_bottom; yval++)
108 {
109 put = putrow;
110 get = getrow;
111
112 for (xval = rotated_clip.gx_rectangle_left; xval <= rotated_clip.gx_rectangle_right; xval++)
113 {
114 *put++ = *get++;
115 }
116 putrow += context -> gx_draw_context_pitch;
117 getrow += pixelmap -> gx_pixelmap_height;
118 }
119 }
120
121
122
123 /**************************************************************************/
124 /* */
125 /* FUNCTION RELEASE */
126 /* */
127 /* _gx_display_driver_8bpp_rotated_pixelmap_compressed_write */
128 /* PORTABLE C */
129 /* 6.1.4 */
130 /* AUTHOR */
131 /* */
132 /* Kenneth Maxwell, Microsoft Corporation */
133 /* */
134 /* DESCRIPTION */
135 /* */
136 /* Internal helper function that handles writing of compressed */
137 /* pixlemap file. */
138 /* */
139 /* INPUT */
140 /* */
141 /* context Drawing context */
142 /* xpos x-coord of top-left draw point*/
143 /* ypos y-coord of top-left draw point*/
144 /* pixelmap Pointer to GX_PIXELMAP struct */
145 /* */
146 /* OUTPUT */
147 /* */
148 /* None */
149 /* */
150 /* CALLS */
151 /* */
152 /* None */
153 /* */
154 /* CALLED BY */
155 /* */
156 /* GUIX Internal Code */
157 /* */
158 /* RELEASE HISTORY */
159 /* */
160 /* DATE NAME DESCRIPTION */
161 /* */
162 /* 02-02-2021 Kenneth Maxwell Initial Version 6.1.4 */
163 /* */
164 /**************************************************************************/
_gx_display_driver_8bpp_rotated_pixelmap_compressed_write(GX_DRAW_CONTEXT * context,INT xpos,INT ypos,GX_PIXELMAP * pixelmap)165 static VOID _gx_display_driver_8bpp_rotated_pixelmap_compressed_write(GX_DRAW_CONTEXT *context,
166 INT xpos, INT ypos, GX_PIXELMAP *pixelmap)
167 {
168 INT yval;
169 INT xval;
170 GX_CONST GX_UBYTE *get;
171 GX_UBYTE *put;
172 GX_UBYTE *putrow;
173 GX_UBYTE count;
174 GX_UBYTE pixel = 0;
175 GX_RECTANGLE *clip = context -> gx_draw_context_clip;
176
177 GX_RECTANGLE rotated_clip;
178
179 GX_SWAP_VALS(xpos, ypos);
180
181 if (context -> gx_draw_context_display -> gx_display_rotation_angle == GX_SCREEN_ROTATION_CW)
182 {
183 rotated_clip.gx_rectangle_left = clip -> gx_rectangle_top;
184 rotated_clip.gx_rectangle_right = clip -> gx_rectangle_bottom;
185 rotated_clip.gx_rectangle_top = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_x_resolution - clip -> gx_rectangle_right - 1);
186 rotated_clip.gx_rectangle_bottom = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_x_resolution - clip -> gx_rectangle_left - 1);
187 ypos = (context -> gx_draw_context_canvas -> gx_canvas_x_resolution - ypos - pixelmap -> gx_pixelmap_width);
188 }
189 else
190 {
191 rotated_clip.gx_rectangle_left = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_y_resolution - clip -> gx_rectangle_bottom - 1);
192 rotated_clip.gx_rectangle_right = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_y_resolution - clip -> gx_rectangle_top - 1);
193 rotated_clip.gx_rectangle_top = clip -> gx_rectangle_left;
194 rotated_clip.gx_rectangle_bottom = clip -> gx_rectangle_right;
195 xpos = (context -> gx_draw_context_canvas -> gx_canvas_y_resolution - xpos - pixelmap -> gx_pixelmap_height);
196 }
197
198 get = (GX_CONST GX_UBYTE *)pixelmap -> gx_pixelmap_data;
199
200 /* First, skip to the starting row. */
201 for (yval = ypos; yval < rotated_clip.gx_rectangle_top; yval++)
202 {
203 xval = 0;
204 while (xval < pixelmap -> gx_pixelmap_height)
205 {
206 count = *get++;
207
208 if (count & 0x80)
209 {
210 count = (GX_UBYTE)((count & 0x7f) + 1);
211
212 /* Skip repeated pixel value. */
213 get++;
214 }
215 else
216 {
217 count++;
218
219 /* Skip raw pixel values. */
220 get += count;
221 }
222 xval += count;
223 }
224 }
225
226 /* Now we are on the first visible row, copy pixels until we get
227 to the end of the last visible row. */
228 putrow = (GX_UBYTE *)context -> gx_draw_context_memory;
229 putrow += yval * context -> gx_draw_context_pitch;
230 putrow += xpos;
231
232 while (yval <= rotated_clip.gx_rectangle_bottom)
233 {
234 put = putrow;
235 xval = xpos;
236
237 while (xval < (xpos + pixelmap -> gx_pixelmap_height))
238 {
239 count = *get++;
240
241 if (count & 0x80)
242 {
243
244 /* Repeated value. */
245 count = (GX_UBYTE)((count & 0x7f) + 1);
246 pixel = *get++;
247
248 while (count--)
249 {
250 if (xval >= rotated_clip.gx_rectangle_left &&
251 xval <= rotated_clip.gx_rectangle_right)
252 {
253 *put = pixel;
254 }
255 put++;
256 xval++;
257 }
258 }
259 else
260 {
261
262 /* String of non-repeated values. */
263 count++;
264
265 while (count--)
266 {
267 if (xval >= rotated_clip.gx_rectangle_left &&
268 xval <= rotated_clip.gx_rectangle_right)
269 {
270 *put = *get;
271 }
272 put++;
273 get++;
274 xval++;
275 }
276 }
277 }
278 putrow += context -> gx_draw_context_pitch;
279 yval++;
280 }
281 }
282
283 /**************************************************************************/
284 /* */
285 /* FUNCTION RELEASE */
286 /* */
287 /* _gx_display_driver_8bpp_rotated_pixelmap_transparent_write */
288 /* PORTABLE C */
289 /* 6.1.4 */
290 /* AUTHOR */
291 /* */
292 /* Kenneth Maxwell, Microsoft Corporation */
293 /* */
294 /* DESCRIPTION */
295 /* */
296 /* Internal helper function that handles writing of uncompressed */
297 /* pixlemap file with alpha channel. */
298 /* */
299 /* INPUT */
300 /* */
301 /* context Drawing context */
302 /* xpos x-coord of top-left draw point*/
303 /* ypos y-coord of top-left draw point*/
304 /* pixelmap Pointer to GX_PIXELMAP struct */
305 /* */
306 /* OUTPUT */
307 /* */
308 /* None */
309 /* */
310 /* CALLS */
311 /* */
312 /* None */
313 /* */
314 /* CALLED BY */
315 /* */
316 /* GUIX Internal Code */
317 /* */
318 /* RELEASE HISTORY */
319 /* */
320 /* DATE NAME DESCRIPTION */
321 /* */
322 /* 02-02-2021 Kenneth Maxwell Initial Version 6.1.4 */
323 /* */
324 /**************************************************************************/
_gx_display_driver_8bpp_rotated_pixelmap_transparent_write(GX_DRAW_CONTEXT * context,INT xpos,INT ypos,GX_PIXELMAP * pixelmap)325 static VOID _gx_display_driver_8bpp_rotated_pixelmap_transparent_write(GX_DRAW_CONTEXT *context,
326 INT xpos, INT ypos, GX_PIXELMAP *pixelmap)
327 {
328 INT xval;
329 INT yval;
330 GX_UBYTE *putrow;
331 GX_UBYTE *getrow;
332 GX_UBYTE *put;
333 GX_UBYTE inval;
334 GX_CONST GX_UBYTE *get;
335
336 GX_RECTANGLE *clip = context -> gx_draw_context_clip;
337 GX_RECTANGLE rotated_clip;
338
339 GX_SWAP_VALS(xpos, ypos);
340
341 if (context -> gx_draw_context_display -> gx_display_rotation_angle == GX_SCREEN_ROTATION_CW)
342 {
343 rotated_clip.gx_rectangle_left = clip -> gx_rectangle_top;
344 rotated_clip.gx_rectangle_right = clip -> gx_rectangle_bottom;
345 rotated_clip.gx_rectangle_top = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_x_resolution - clip -> gx_rectangle_right - 1);
346 rotated_clip.gx_rectangle_bottom = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_x_resolution - clip -> gx_rectangle_left - 1);
347 ypos = (context -> gx_draw_context_canvas -> gx_canvas_x_resolution - ypos - pixelmap -> gx_pixelmap_width);
348 }
349 else
350 {
351 rotated_clip.gx_rectangle_left = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_y_resolution - clip -> gx_rectangle_bottom - 1);
352 rotated_clip.gx_rectangle_right = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_y_resolution - clip -> gx_rectangle_top - 1);
353 rotated_clip.gx_rectangle_top = clip -> gx_rectangle_left;
354 rotated_clip.gx_rectangle_bottom = clip -> gx_rectangle_right;
355 xpos = (context -> gx_draw_context_canvas -> gx_canvas_y_resolution - xpos - pixelmap -> gx_pixelmap_height);
356 }
357
358 putrow = (GX_UBYTE *)context -> gx_draw_context_memory;
359 putrow += rotated_clip.gx_rectangle_top * context -> gx_draw_context_pitch;
360 putrow += rotated_clip.gx_rectangle_left;
361
362 getrow = (GX_UBYTE *)(pixelmap -> gx_pixelmap_data);
363 getrow += pixelmap -> gx_pixelmap_height * (rotated_clip.gx_rectangle_top - ypos);
364 getrow += (rotated_clip.gx_rectangle_left - xpos);
365
366 for (yval = rotated_clip.gx_rectangle_top; yval <= rotated_clip.gx_rectangle_bottom; yval++)
367 {
368 put = putrow;
369 get = getrow;
370
371 for (xval = rotated_clip.gx_rectangle_left; xval <= rotated_clip.gx_rectangle_right; xval++)
372 {
373 inval = *get++;
374 if (inval == pixelmap -> gx_pixelmap_transparent_color)
375 {
376 put++;
377 }
378 else
379 {
380 *put++ = inval;
381 }
382 }
383 putrow += context -> gx_draw_context_pitch;
384 getrow += pixelmap -> gx_pixelmap_height;
385 }
386 }
387
388 /**************************************************************************/
389 /* */
390 /* FUNCTION RELEASE */
391 /* */
392 /* _gx_display_driver_8bpp_rotated_pixelmap_compressed_transparent_ */
393 /* write */
394 /* PORTABLE C */
395 /* 6.1.4 */
396 /* AUTHOR */
397 /* */
398 /* Kenneth Maxwell, Microsoft Corporation */
399 /* */
400 /* DESCRIPTION */
401 /* */
402 /* Internal helper function that handles writing of compressed */
403 /* pixlemap file with alpha channel. */
404 /* */
405 /* INPUT */
406 /* */
407 /* context Drawing context */
408 /* xpos x-coord of top-left draw point*/
409 /* ypos y-coord of top-left draw point*/
410 /* pixelmap Pointer to GX_PIXELMAP struct */
411 /* */
412 /* OUTPUT */
413 /* */
414 /* None */
415 /* */
416 /* CALLS */
417 /* */
418 /* None */
419 /* */
420 /* CALLED BY */
421 /* */
422 /* GUIX Internal Code */
423 /* */
424 /* RELEASE HISTORY */
425 /* */
426 /* DATE NAME DESCRIPTION */
427 /* */
428 /* 02-02-2021 Kenneth Maxwell Initial Version 6.1.4 */
429 /* */
430 /**************************************************************************/
_gx_display_driver_8bpp_rotated_pixelmap_compressed_transparent_write(GX_DRAW_CONTEXT * context,INT xpos,INT ypos,GX_PIXELMAP * pixelmap)431 static VOID _gx_display_driver_8bpp_rotated_pixelmap_compressed_transparent_write(GX_DRAW_CONTEXT *context,
432 INT xpos, INT ypos, GX_PIXELMAP *pixelmap)
433 {
434 INT yval;
435 INT xval;
436 GX_CONST GX_UBYTE *get;
437 GX_UBYTE *put;
438 GX_UBYTE *putrow;
439 GX_UBYTE count;
440 GX_UBYTE pixel = 0;
441 GX_RECTANGLE *clip = context -> gx_draw_context_clip;
442 GX_RECTANGLE rotated_clip;
443
444 GX_SWAP_VALS(xpos, ypos);
445
446 if (context -> gx_draw_context_display -> gx_display_rotation_angle == GX_SCREEN_ROTATION_CW)
447 {
448 rotated_clip.gx_rectangle_left = clip -> gx_rectangle_top;
449 rotated_clip.gx_rectangle_right = clip -> gx_rectangle_bottom;
450 rotated_clip.gx_rectangle_top = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_x_resolution - clip -> gx_rectangle_right - 1);
451 rotated_clip.gx_rectangle_bottom = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_x_resolution - clip -> gx_rectangle_left - 1);
452 ypos = (context -> gx_draw_context_canvas -> gx_canvas_x_resolution - ypos - pixelmap -> gx_pixelmap_width);
453 }
454 else
455 {
456 rotated_clip.gx_rectangle_left = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_y_resolution - clip -> gx_rectangle_bottom - 1);
457 rotated_clip.gx_rectangle_right = (GX_VALUE)(context -> gx_draw_context_canvas -> gx_canvas_y_resolution - clip -> gx_rectangle_top - 1);
458 rotated_clip.gx_rectangle_top = clip -> gx_rectangle_left;
459 rotated_clip.gx_rectangle_bottom = clip -> gx_rectangle_right;
460 xpos = (context -> gx_draw_context_canvas -> gx_canvas_y_resolution - xpos - pixelmap -> gx_pixelmap_height);
461 }
462
463 get = (GX_CONST GX_UBYTE *)pixelmap -> gx_pixelmap_data;
464
465 /* First, skip to the starting row. */
466 for (yval = ypos; yval < rotated_clip.gx_rectangle_top; yval++)
467 {
468 xval = 0;
469 while (xval < pixelmap -> gx_pixelmap_height)
470 {
471 count = *get++;
472
473 if (count & 0x80)
474 {
475 count = (GX_UBYTE)((count & 0x7f) + 1);
476
477 /* Skip repeated pixel value. */
478 get++;
479 }
480 else
481 {
482 count++;
483
484 /* Skip raw pixel values. */
485 get += count;
486 }
487 xval += count;
488 }
489 }
490
491 /* Now we are on the first visible row, copy pixels until we get
492 to the end of the last visible row. */
493 putrow = (GX_UBYTE *)context -> gx_draw_context_memory;
494 putrow += yval * context -> gx_draw_context_pitch;
495 putrow += xpos;
496
497 while (yval <= rotated_clip.gx_rectangle_bottom)
498 {
499 put = putrow;
500 xval = xpos;
501 while (xval < (xpos + pixelmap -> gx_pixelmap_height))
502 {
503 count = *get++;
504
505 if (count & 0x80)
506 {
507
508 /* Repeated value. */
509 count = (GX_UBYTE)((count & 0x7f) + 1);
510 pixel = *get++;
511
512 if (pixel == pixelmap -> gx_pixelmap_transparent_color)
513 {
514 put += count;
515 xval += count;
516 }
517 else
518 {
519 while (count--)
520 {
521 if (xval >= rotated_clip.gx_rectangle_left &&
522 xval <= rotated_clip.gx_rectangle_right)
523 {
524 *put = pixel;
525 }
526 put++;
527 xval++;
528 }
529 }
530 }
531 else
532 {
533
534 /* String of non-repeated values. */
535 count++;
536
537 while (count--)
538 {
539 pixel = *get++;
540
541 if (xval >= rotated_clip.gx_rectangle_left &&
542 xval <= rotated_clip.gx_rectangle_right &&
543 pixel != pixelmap -> gx_pixelmap_transparent_color)
544 {
545 *put = pixel;
546 }
547 put++;
548 xval++;
549 }
550 }
551 }
552 putrow += context -> gx_draw_context_pitch;
553 yval++;
554 }
555 }
556
557 /**************************************************************************/
558 /* */
559 /* FUNCTION RELEASE */
560 /* */
561 /* _gx_display_driver_8bpp_rotated_pixelmap_draw PORTABLE C */
562 /* 6.1.4 */
563 /* AUTHOR */
564 /* */
565 /* Kenneth Maxwell, Microsoft Corporation */
566 /* */
567 /* DESCRIPTION */
568 /* */
569 /* 8bit screen driver pixelmap drawing function that handles */
570 /* compressed or uncompress, with or without alpha channel. */
571 /* */
572 /* INPUT */
573 /* */
574 /* context Drawing context */
575 /* xpos x-coord of top-left draw point*/
576 /* ypos y-coord of top-left draw point*/
577 /* pixelmap Pointer to GX_PIXELMAP struct */
578 /* */
579 /* OUTPUT */
580 /* */
581 /* None */
582 /* */
583 /* CALLS */
584 /* */
585 /* _gx_display_driver_8bit_rotated_pixelmap_compressed_write */
586 /* _gx_display_driver_8bit_rotated_pixelmap_compressed_transparent_ */
587 /* write */
588 /* _gx_display_driver_8bit_rotated_pixelmap_transparent_write */
589 /* _gx_display_driver_8bit_rotated_pixelmap_raw_write */
590 /* */
591 /* CALLED BY */
592 /* */
593 /* GUIX Internal Code */
594 /* */
595 /* RELEASE HISTORY */
596 /* */
597 /* DATE NAME DESCRIPTION */
598 /* */
599 /* 02-02-2021 Kenneth Maxwell Initial Version 6.1.4 */
600 /* */
601 /**************************************************************************/
_gx_display_driver_8bpp_rotated_pixelmap_draw(GX_DRAW_CONTEXT * context,INT xpos,INT ypos,GX_PIXELMAP * pixelmap)602 VOID _gx_display_driver_8bpp_rotated_pixelmap_draw(GX_DRAW_CONTEXT *context,
603 INT xpos, INT ypos, GX_PIXELMAP *pixelmap)
604 {
605
606 if (pixelmap -> gx_pixelmap_format != GX_COLOR_FORMAT_8BIT_PALETTE ||
607 (pixelmap -> gx_pixelmap_flags & GX_PIXELMAP_ALPHA))
608 {
609
610 /* Wrong color format for this driver. */
611 return;
612 }
613
614 if (pixelmap -> gx_pixelmap_flags & GX_PIXELMAP_TRANSPARENT)
615 {
616 if (pixelmap -> gx_pixelmap_flags & GX_PIXELMAP_COMPRESSED)
617 {
618
619 /* Has both compression and transparent. */
620 _gx_display_driver_8bpp_rotated_pixelmap_compressed_transparent_write(context, xpos, ypos, pixelmap);
621 }
622 else
623 {
624
625 /* Transparent, no compression. */
626 _gx_display_driver_8bpp_rotated_pixelmap_transparent_write(context, xpos, ypos, pixelmap);
627 }
628 }
629 else
630 {
631 if (pixelmap -> gx_pixelmap_flags & GX_PIXELMAP_COMPRESSED)
632 {
633
634 /* Compressed with no transparency. */
635 _gx_display_driver_8bpp_rotated_pixelmap_compressed_write(context, xpos, ypos, pixelmap);
636 }
637 else
638 {
639
640 /* No compression or transaprency. */
641 _gx_display_driver_8bpp_rotated_pixelmap_raw_write(context, xpos, ypos, pixelmap);
642 }
643 }
644 }
645
646