22 #include "../gdriver/gdriver.h"
25 #if defined(GDISP_DRIVER_VMT)
26 #define IN_DRIVER GFXON
28 #define IN_DRIVER GFXOFF
32 #if defined(GDISP_DRIVER_LIST)
33 #define IS_MULTIPLE GFXON
35 #define IS_MULTIPLE GFXOFF
39 #if IS_MULTIPLE || GDISP_NEED_PIXMAP
42 #define USE_VMT GFXOFF
46 #ifndef IN_PIXMAP_DRIVER
47 #define IN_PIXMAP_DRIVER GFXOFF
53 #define HARDWARE_AUTODETECT 2
55 #if USE_VMT && !IN_DRIVER
57 #define HARDWARE_DEFAULT HARDWARE_AUTODETECT
60 #define HARDWARE_DEFAULT GFXOFF
76 #ifndef GDISP_HARDWARE_DEINIT
77 #define GDISP_HARDWARE_DEINIT HARDWARE_DEFAULT
87 #ifndef GDISP_HARDWARE_FLUSH
88 #define GDISP_HARDWARE_FLUSH HARDWARE_DEFAULT
98 #ifndef GDISP_HARDWARE_STREAM_WRITE
99 #define GDISP_HARDWARE_STREAM_WRITE HARDWARE_DEFAULT
109 #ifndef GDISP_HARDWARE_STREAM_READ
110 #define GDISP_HARDWARE_STREAM_READ HARDWARE_DEFAULT
122 #ifndef GDISP_HARDWARE_STREAM_POS
123 #define GDISP_HARDWARE_STREAM_POS HARDWARE_DEFAULT
133 #ifndef GDISP_HARDWARE_DRAWPIXEL
134 #define GDISP_HARDWARE_DRAWPIXEL HARDWARE_DEFAULT
144 #ifndef GDISP_HARDWARE_CLEARS
145 #define GDISP_HARDWARE_CLEARS HARDWARE_DEFAULT
154 #ifndef GDISP_HARDWARE_FILLS
155 #define GDISP_HARDWARE_FILLS HARDWARE_DEFAULT
164 #ifndef GDISP_HARDWARE_BITFILLS
165 #define GDISP_HARDWARE_BITFILLS HARDWARE_DEFAULT
174 #ifndef GDISP_HARDWARE_SCROLL
175 #define GDISP_HARDWARE_SCROLL HARDWARE_DEFAULT
184 #ifndef GDISP_HARDWARE_PIXELREAD
185 #define GDISP_HARDWARE_PIXELREAD HARDWARE_DEFAULT
194 #ifndef GDISP_HARDWARE_CONTROL
195 #define GDISP_HARDWARE_CONTROL HARDWARE_DEFAULT
204 #ifndef GDISP_HARDWARE_QUERY
205 #define GDISP_HARDWARE_QUERY HARDWARE_DEFAULT
219 #ifndef GDISP_HARDWARE_CLIP
220 #define GDISP_HARDWARE_CLIP HARDWARE_DEFAULT
228 #if GDISP_NEED_PIXMAP && !IN_DRIVER
229 #if !GDISP_HARDWARE_DEINIT
230 #undef GDISP_HARDWARE_DEINIT
231 #define GDISP_HARDWARE_DEINIT HARDWARE_AUTODETECT
233 #if !GDISP_HARDWARE_DRAWPIXEL
234 #undef GDISP_HARDWARE_DRAWPIXEL
235 #define GDISP_HARDWARE_DRAWPIXEL HARDWARE_AUTODETECT
237 #if !GDISP_HARDWARE_PIXELREAD
238 #undef GDISP_HARDWARE_PIXELREAD
239 #define GDISP_HARDWARE_PIXELREAD HARDWARE_AUTODETECT
241 #if !GDISP_HARDWARE_CONTROL
242 #undef GDISP_HARDWARE_CONTROL
243 #define GDISP_HARDWARE_CONTROL HARDWARE_AUTODETECT
245 #if GDISP_HARDWARE_FLUSH == GFXON
246 #undef GDISP_HARDWARE_FLUSH
247 #define GDISP_HARDWARE_FLUSH HARDWARE_AUTODETECT
249 #if GDISP_HARDWARE_STREAM_WRITE == GFXON
250 #undef GDISP_HARDWARE_STREAM_WRITE
251 #define GDISP_HARDWARE_STREAM_WRITE HARDWARE_AUTODETECT
253 #if GDISP_HARDWARE_STREAM_READ == GFXON
254 #undef GDISP_HARDWARE_STREAM_READ
255 #define GDISP_HARDWARE_STREAM_READ HARDWARE_AUTODETECT
257 #if GDISP_HARDWARE_CLEARS == GFXON
258 #undef GDISP_HARDWARE_CLEARS
259 #define GDISP_HARDWARE_CLEARS HARDWARE_AUTODETECT
261 #if GDISP_HARDWARE_FILLS == GFXON
262 #undef GDISP_HARDWARE_FILLS
263 #define GDISP_HARDWARE_FILLS HARDWARE_AUTODETECT
265 #if GDISP_HARDWARE_BITFILLS == GFXON
266 #undef GDISP_HARDWARE_BITFILLS
267 #define GDISP_HARDWARE_BITFILLS HARDWARE_AUTODETECT
269 #if GDISP_HARDWARE_SCROLL == GFXON
270 #undef GDISP_HARDWARE_SCROLL
271 #define GDISP_HARDWARE_SCROLL HARDWARE_AUTODETECT
273 #if GDISP_HARDWARE_QUERY == GFXON
274 #undef GDISP_HARDWARE_QUERY
275 #define GDISP_HARDWARE_QUERY HARDWARE_AUTODETECT
277 #if GDISP_HARDWARE_CLIP == GFXON
278 #undef GDISP_HARDWARE_CLIP
279 #define GDISP_HARDWARE_CLIP HARDWARE_AUTODETECT
286 #if !GDISP_PACKED_PIXELS
287 #define gdispPackPixels(buf,cx,x,y,c) { ((gColor *)(buf))[(y)*(cx)+(x)] = (c); }
288 #elif !GDISP_HARDWARE_BITFILLS
289 #error "GDISP: packed pixel formats are only supported for hardware accelerated drivers."
290 #elif GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_RGB888 \
291 && GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_RGB444 \
292 && GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_RGB666 \
293 && GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_CUSTOM
294 #error "GDISP: A packed pixel format has been specified for an unsupported pixel format."
298 #if !defined(gdispPackPixels) || defined(__DOXYGEN__)
318 #define gvmt(g) ((const GDISPVMT const *)((g)->d.vmt))
320 struct GDISPControl {
333 gU8 controllerdisplay;
335 #define GDISP_FLG_INSTREAM 0x0001
336 #define GDISP_FLG_SCRSTREAM 0x0002
337 #define GDISP_FLG_DRIVER 0x0004
340 #if GDISP_NEED_MULTITHREAD
345 #if GDISP_HARDWARE_CLIP != GFXON && (GDISP_NEED_CLIP || GDISP_NEED_VALIDATION)
370 #if GDISP_NEED_TEXT_WORDWRAP
376 #if GDISP_LINEBUF_SIZE != 0 && ((GDISP_NEED_SCROLL && !GDISP_HARDWARE_SCROLL) || (!GDISP_HARDWARE_STREAM_WRITE && GDISP_HARDWARE_BITFILLS))
382 typedef struct GDISPVMT {
384 #define GDISP_VFLG_DYNAMICONLY 0x0001
385 #define GDISP_VFLG_PIXMAP 0x0002
386 gBool (*init)(GDisplay *g);
387 void (*deinit)(GDisplay *g);
388 void (*writestart)(GDisplay *g);
389 void (*writepos)(GDisplay *g);
390 void (*writecolor)(GDisplay *g);
391 void (*writestop)(GDisplay *g);
392 void (*readstart)(GDisplay *g);
393 gColor (*readcolor)(GDisplay *g);
394 void (*readstop)(GDisplay *g);
395 void (*pixel)(GDisplay *g);
396 void (*clear)(GDisplay *g);
397 void (*fill)(GDisplay *g);
398 void (*blit)(GDisplay *g);
399 gColor (*get)(GDisplay *g);
400 void (*vscroll)(GDisplay *g);
401 void (*control)(GDisplay *g);
402 void *(*query)(GDisplay *g);
403 void (*setclip)(GDisplay *g);
404 void (*flush)(GDisplay *g);
410 #if IN_DRIVER || !USE_VMT || defined(__DOXYGEN__)
417 #define LLDSPEC static
428 LLDSPEC gBool gdisp_lld_init(GDisplay *g);
430 #if GDISP_HARDWARE_DEINIT || defined(__DOXYGEN__)
438 LLDSPEC
void gdisp_lld_deinit(GDisplay *g);
441 #if GDISP_HARDWARE_FLUSH || defined(__DOXYGEN__)
450 LLDSPEC
void gdisp_lld_flush(GDisplay *g);
453 #if GDISP_HARDWARE_STREAM_WRITE || defined(__DOXYGEN__)
468 LLDSPEC
void gdisp_lld_write_start(GDisplay *g);
479 LLDSPEC
void gdisp_lld_write_color(GDisplay *g);
489 LLDSPEC
void gdisp_lld_write_stop(GDisplay *g);
491 #if GDISP_HARDWARE_STREAM_POS || defined(__DOXYGEN__)
501 LLDSPEC
void gdisp_lld_write_pos(GDisplay *g);
505 #if GDISP_HARDWARE_STREAM_READ || defined(__DOXYGEN__)
518 LLDSPEC
void gdisp_lld_read_start(GDisplay *g);
529 LLDSPEC
gColor gdisp_lld_read_color(GDisplay *g);
539 LLDSPEC
void gdisp_lld_read_stop(GDisplay *g);
542 #if GDISP_HARDWARE_DRAWPIXEL || defined(__DOXYGEN__)
553 LLDSPEC
void gdisp_lld_draw_pixel(GDisplay *g);
556 #if GDISP_HARDWARE_CLEARS || defined(__DOXYGEN__)
566 LLDSPEC
void gdisp_lld_clear(GDisplay *g);
569 #if GDISP_HARDWARE_FILLS || defined(__DOXYGEN__)
581 LLDSPEC
void gdisp_lld_fill_area(GDisplay *g);
584 #if GDISP_HARDWARE_BITFILLS || defined(__DOXYGEN__)
598 LLDSPEC
void gdisp_lld_blit_area(GDisplay *g);
601 #if GDISP_HARDWARE_PIXELREAD || defined(__DOXYGEN__)
612 LLDSPEC
gColor gdisp_lld_get_pixel_color(GDisplay *g);
615 #if (GDISP_HARDWARE_SCROLL && GDISP_NEED_SCROLL) || defined(__DOXYGEN__)
631 LLDSPEC
void gdisp_lld_vertical_scroll(GDisplay *g);
634 #if (GDISP_HARDWARE_CONTROL && GDISP_NEED_CONTROL) || defined(__DOXYGEN__)
645 LLDSPEC
void gdisp_lld_control(GDisplay *g);
648 #if (GDISP_HARDWARE_QUERY && GDISP_NEED_QUERY) || defined(__DOXYGEN__)
659 LLDSPEC
void *gdisp_lld_query(GDisplay *g);
662 #if (GDISP_HARDWARE_CLIP && (GDISP_NEED_CLIP || GDISP_NEED_VALIDATION)) || defined(__DOXYGEN__)
673 LLDSPEC
void gdisp_lld_set_clip(GDisplay *g);
681 #define gdisp_lld_init(g) gvmt(g)->init(g)
682 #define gdisp_lld_deinit(g) gvmt(g)->deinit(g)
683 #define gdisp_lld_flush(g) gvmt(g)->flush(g)
684 #define gdisp_lld_write_start(g) gvmt(g)->writestart(g)
685 #define gdisp_lld_write_pos(g) gvmt(g)->writepos(g)
686 #define gdisp_lld_write_color(g) gvmt(g)->writecolor(g)
687 #define gdisp_lld_write_stop(g) gvmt(g)->writestop(g)
688 #define gdisp_lld_read_start(g) gvmt(g)->readstart(g)
689 #define gdisp_lld_read_color(g) gvmt(g)->readcolor(g)
690 #define gdisp_lld_read_stop(g) gvmt(g)->readstop(g)
691 #define gdisp_lld_draw_pixel(g) gvmt(g)->pixel(g)
692 #define gdisp_lld_clear(g) gvmt(g)->clear(g)
693 #define gdisp_lld_fill_area(g) gvmt(g)->fill(g)
694 #define gdisp_lld_blit_area(g) gvmt(g)->blit(g)
695 #define gdisp_lld_get_pixel_color(g) gvmt(g)->get(g)
696 #define gdisp_lld_vertical_scroll(g) gvmt(g)->vscroll(g)
697 #define gdisp_lld_control(g) gvmt(g)->control(g)
698 #define gdisp_lld_query(g) gvmt(g)->query(g)
699 #define gdisp_lld_set_clip(g) gvmt(g)->setclip(g)
708 #if !GDISP_HARDWARE_STREAM_WRITE && !GDISP_HARDWARE_DRAWPIXEL
709 #error "GDISP Driver: Either GDISP_HARDWARE_STREAM_WRITE or GDISP_HARDWARE_DRAWPIXEL must be GFXON"
713 #if !IS_MULTIPLE && !IN_PIXMAP_DRIVER
714 #undef GDISP_DRIVER_VMT
715 #define GDISP_DRIVER_VMT GDISPVMT_OnlyOne
719 #ifndef GDISP_DRIVER_VMT_FLAGS
720 #define GDISP_DRIVER_VMT_FLAGS 0
727 gBool _gdispInitDriver(
GDriver *g,
void *param,
unsigned driverinstance,
unsigned systeminstance);
728 void _gdispPostInitDriver(
GDriver *g);
729 void _gdispDeInitDriver(
GDriver *g);
739 const GDISPVMT GDISP_DRIVER_VMT[1] = {{
740 { GDRIVER_TYPE_DISPLAY, 0,
sizeof(GDisplay), _gdispInitDriver, _gdispPostInitDriver, _gdispDeInitDriver },
742 #if GDISP_HARDWARE_DEINIT
747 #if GDISP_HARDWARE_STREAM_WRITE
748 gdisp_lld_write_start,
749 #if GDISP_HARDWARE_STREAM_POS
754 gdisp_lld_write_color,
755 gdisp_lld_write_stop,
759 #if GDISP_HARDWARE_STREAM_READ
760 gdisp_lld_read_start,
761 gdisp_lld_read_color,
766 #if GDISP_HARDWARE_DRAWPIXEL
767 gdisp_lld_draw_pixel,
771 #if GDISP_HARDWARE_CLEARS
776 #if GDISP_HARDWARE_FILLS
781 #if GDISP_HARDWARE_BITFILLS
786 #if GDISP_HARDWARE_PIXELREAD
787 gdisp_lld_get_pixel_color,
791 #if GDISP_HARDWARE_SCROLL && GDISP_NEED_SCROLL
792 gdisp_lld_vertical_scroll,
796 #if GDISP_HARDWARE_CONTROL && GDISP_NEED_CONTROL
801 #if GDISP_HARDWARE_QUERY && GDISP_NEED_QUERY
806 #if GDISP_HARDWARE_CLIP && (GDISP_NEED_CLIP || GDISP_NEED_VALIDATION)
811 #if GDISP_HARDWARE_FLUSH
824 #if GDISP_LLD_PIXELFORMAT & GDISP_COLORSYSTEM_TRUECOLOR
825 #define LLDCOLOR_SYSTEM GDISP_COLORSYSTEM_TRUECOLOR
828 #define LLDCOLOR_BITS_R ((GDISP_LLD_PIXELFORMAT>>8) & 0x0F)
829 #define LLDCOLOR_BITS_G ((GDISP_LLD_PIXELFORMAT>>4) & 0x0F)
830 #define LLDCOLOR_BITS_B ((GDISP_LLD_PIXELFORMAT>>0) & 0x0F)
831 #define LLDCOLOR_BITS (LLDCOLOR_BITS_R + LLDCOLOR_BITS_G + LLDCOLOR_BITS_B)
834 #if LLDCOLOR_BITS <= 8
835 #define LLDCOLOR_TYPE gU8
836 #define LLDCOLOR_TYPE_BITS 8
837 #elif LLDCOLOR_BITS <= 16
838 #define LLDCOLOR_TYPE gU16
839 #define LLDCOLOR_TYPE_BITS 16
840 #elif LLDCOLOR_BITS <= 32
841 #define LLDCOLOR_TYPE gU32
842 #define LLDCOLOR_TYPE_BITS 32
844 #error "GDISP: Cannot define low level driver color types with more than 32 bits"
846 #if LLDCOLOR_TYPE_BITS == LLDCOLOR_BITS
847 #define LLDCOLOR_NEEDS_MASK GFXOFF
849 #define LLDCOLOR_NEEDS_MASK GFXON
851 #define LLDCOLOR_MASK() ((1 << LLDCOLOR_BITS)-1)
854 #if (GDISP_LLD_PIXELFORMAT & GDISP_COLORSYSTEM_MASK) == GDISP_COLORSYSTEM_RGB
855 #define LLDCOLOR_SHIFT_R (LLDCOLOR_BITS_B+LLDCOLOR_BITS_G)
856 #define LLDCOLOR_SHIFT_G LLDCOLOR_BITS_B
857 #define LLDCOLOR_SHIFT_B 0
859 #define LLDCOLOR_SHIFT_B (LLDCOLOR_BITS_R+LLDCOLOR_BITS_G)
860 #define LLDCOLOR_SHIFT_G LLDCOLOR_BITS_R
861 #define LLDCOLOR_SHIFT_R 0
865 #if LLDCOLOR_BITS_R + LLDCOLOR_SHIFT_R == 8
866 #define LLDRED_OF(c) ((c) & (((1<<LLDCOLOR_BITS_R)-1) << LLDCOLOR_SHIFT_R))
867 #define LLDRGB2COLOR_R(r) ((LLDCOLOR_TYPE)((r) & (0xFF & ~((1<<(8-LLDCOLOR_BITS_R))-1))))
868 #elif LLDCOLOR_BITS_R + LLDCOLOR_SHIFT_R > 8
869 #define LLDRED_OF(c) (((c) & (((1<<LLDCOLOR_BITS_R)-1) << LLDCOLOR_SHIFT_R)) >> (LLDCOLOR_BITS_R+LLDCOLOR_SHIFT_R-8))
870 #define LLDRGB2COLOR_R(r) (((LLDCOLOR_TYPE)((r) & (0xFF & ~((1<<(8-LLDCOLOR_BITS_R))-1)))) << (LLDCOLOR_BITS_R+LLDCOLOR_SHIFT_R-8))
872 #define LLDRED_OF(c) (((c) & (((1<<LLDCOLOR_BITS_R)-1) << LLDCOLOR_SHIFT_R)) << (8-(LLDCOLOR_BITS_R+LLDCOLOR_SHIFT_R)))
873 #define LLDRGB2COLOR_R(r) (((LLDCOLOR_TYPE)((r) & (0xFF & ~((1<<(8-LLDCOLOR_BITS_R))-1)))) >> (8-(LLDCOLOR_BITS_R+LLDCOLOR_SHIFT_R)))
875 #if LLDCOLOR_BITS_G + LLDCOLOR_SHIFT_G == 8
876 #define LLDGREEN_OF(c) ((c) & (((1<<LLDCOLOR_BITS_G)-1) << LLDCOLOR_SHIFT_G))
877 #define LLDRGB2COLOR_G(g) ((LLDCOLOR_TYPE)((g) & (0xFF & ~((1<<(8-LLDCOLOR_BITS_G))-1))))
878 #elif LLDCOLOR_BITS_G + LLDCOLOR_SHIFT_G > 8
879 #define LLDGREEN_OF(c) (((c) & (((1<<LLDCOLOR_BITS_G)-1) << LLDCOLOR_SHIFT_G)) >> (LLDCOLOR_BITS_G+LLDCOLOR_SHIFT_G-8))
880 #define LLDRGB2COLOR_G(g) (((LLDCOLOR_TYPE)((g) & (0xFF & ~((1<<(8-LLDCOLOR_BITS_G))-1)))) << (LLDCOLOR_BITS_G+LLDCOLOR_SHIFT_G-8))
882 #define LLDGREEN_OF(c) (((c) & (((1<<LLDCOLOR_BITS_G)-1) << LLDCOLOR_SHIFT_G)) << (8-(LLDCOLOR_BITS_G+LLDCOLOR_SHIFT_G)))
883 #define LLDRGB2COLOR_G(g) (((LLDCOLOR_TYPE)((g) & (0xFF & ~((1<<(8-LLDCOLOR_BITS_G))-1)))) >> (8-(LLDCOLOR_BITS_G+LLDCOLOR_SHIFT_G)))
885 #if LLDCOLOR_BITS_B + LLDCOLOR_SHIFT_B == 8
886 #define LLDBLUE_OF(c) ((c) & (((1<<LLDCOLOR_BITS_B)-1) << LLDCOLOR_SHIFT_B))
887 #define LLDRGB2COLOR_B(b) ((LLDCOLOR_TYPE)((b) & (0xFF & ~((1<<(8-LLDCOLOR_BITS_B))-1))))
888 #elif LLDCOLOR_BITS_B + LLDCOLOR_SHIFT_B > 8
889 #define LLDBLUE_OF(c) (((c) & (((1<<LLDCOLOR_BITS_B)-1) << LLDCOLOR_SHIFT_B)) >> (LLDCOLOR_BITS_B+LLDCOLOR_SHIFT_B-8))
890 #define LLDRGB2COLOR_B(b) (((LLDCOLOR_TYPE)((b) & (0xFF & ~((1<<(8-LLDCOLOR_BITS_B))-1)))) << (LLDCOLOR_BITS_B+LLDCOLOR_SHIFT_B-8))
892 #define LLDBLUE_OF(c) (((c) & (((1<<LLDCOLOR_BITS_B)-1) << LLDCOLOR_SHIFT_B)) << (8-(LLDCOLOR_BITS_B+LLDCOLOR_SHIFT_B)))
893 #define LLDRGB2COLOR_B(b) (((LLDCOLOR_TYPE)((b) & (0xFF & ~((1<<(8-LLDCOLOR_BITS_B))-1)))) >> (8-(LLDCOLOR_BITS_B+LLDCOLOR_SHIFT_B)))
895 #define LLDLUMA_OF(c) ((LLDRED_OF(c)+((gU16)LLDGREEN_OF(c)<<1)+LLDBLUE_OF(c))>>2)
896 #define LLDEXACT_RED_OF(c) (((gU16)(((c)>>LLDCOLOR_SHIFT_R)&((1<<LLDCOLOR_BITS_R)-1))*255)/((1<<LLDCOLOR_BITS_R)-1))
897 #define LLDEXACT_GREEN_OF(c) (((gU16)(((c)>>LLDCOLOR_SHIFT_G)&((1<<LLDCOLOR_BITS_G)-1))*255)/((1<<LLDCOLOR_BITS_G)-1))
898 #define LLDEXACT_BLUE_OF(c) (((gU16)(((c)>>LLDCOLOR_SHIFT_B)&((1<<LLDCOLOR_BITS_B)-1))*255)/((1<<LLDCOLOR_BITS_B)-1))
899 #define LLDEXACT_LUMA_OF(c) ((LLDEXACT_RED_OF(c)+((gU16)LLDEXACT_GREEN_OF(c)<<1)+LLDEXACT_BLUE_OF(c))>>2)
900 #define LLDLUMA2COLOR(l) (LLDRGB2COLOR_R(l) | LLDRGB2COLOR_G(l) | LLDRGB2COLOR_B(l))
901 #define LLDRGB2COLOR(r,g,b) (LLDRGB2COLOR_R(r) | LLDRGB2COLOR_G(g) | LLDRGB2COLOR_B(b))
904 #if LLDCOLOR_BITS_R + LLDCOLOR_SHIFT_R == 24
905 #define LLDHTML2COLOR_R(h) ((h) & ((0xFF & ~((1<<(8-LLDCOLOR_BITS_R))-1))<<16))
906 #elif COLOR_BITS_R + COLOR_SHIFT_R > 24
907 #define LLDHTML2COLOR_R(h) (((h) & ((0xFF & ~((1<<(8-LLDCOLOR_BITS_R))-1))<<16)) << (LLDCOLOR_BITS_R+LLDCOLOR_SHIFT_R-24))
909 #define LLDHTML2COLOR_R(h) (((h) & ((0xFF & ~((1<<(8-LLDCOLOR_BITS_R))-1))<<16)) >> (24-(LLDCOLOR_BITS_R+LLDCOLOR_SHIFT_R)))
911 #if LLDCOLOR_BITS_G + LLDCOLOR_SHIFT_G == 16
912 #define LLDHTML2COLOR_G(h) ((h) & ((0xFF & ~((1<<(8-LLDCOLOR_BITS_G))-1))<<8))
913 #elif LLDCOLOR_BITS_G + LLDCOLOR_SHIFT_G > 16
914 #define LLDHTML2COLOR_G(h) (((h) & ((0xFF & ~((1<<(8-LLDCOLOR_BITS_G))-1))<<8)) << (LLDCOLOR_BITS_G+LLDCOLOR_SHIFT_G-16))
916 #define LLDHTML2COLOR_G(h) (((h) & ((0xFF & ~((1<<(8-LLDCOLOR_BITS_G))-1))<<8)) >> (16-(LLDCOLOR_BITS_G+LLDCOLOR_SHIFT_G)))
918 #if LLDCOLOR_BITS_B + LLDCOLOR_SHIFT_B == 8
919 #define LLDHTML2COLOR_B(h) ((h) & (0xFF & ~((1<<(8-LLDCOLOR_BITS_B))-1)))
920 #elif LLDCOLOR_BITS_B + LLDCOLOR_SHIFT_B > 8
921 #define LLDHTML2COLOR_B(h) (((h) & (0xFF & ~((1<<(8-LLDCOLOR_BITS_B))-1))) << (LLDCOLOR_BITS_B+LLDCOLOR_SHIFT_B-8))
923 #define LLDHTML2COLOR_B(h) (((h) & (0xFF & ~((1<<(8-LLDCOLOR_BITS_B))-1))) >> (8-(LLDCOLOR_BITS_B+LLDCOLOR_SHIFT_B)))
925 #define LLDHTML2COLOR(h) ((LLDCOLOR_TYPE)(LLDHTML2COLOR_R(h) | LLDHTML2COLOR_G(h) | LLDHTML2COLOR_B(h)))
930 #elif (GDISP_LLD_PIXELFORMAT & GDISP_COLORSYSTEM_MASK) == GDISP_COLORSYSTEM_GRAYSCALE
931 #define LLDCOLOR_SYSTEM GDISP_COLORSYSTEM_GRAYSCALE
934 #define LLDCOLOR_BITS (GDISP_LLD_PIXELFORMAT & 0xFF)
935 #define LLDCOLOR_BITS_R LLDCOLOR_BITS
936 #define LLDCOLOR_BITS_G LLDCOLOR_BITS
937 #define LLDCOLOR_BITS_B LLDCOLOR_BITS
938 #define LLDCOLOR_SHIFT_R 0
939 #define LLDCOLOR_SHIFT_G 0
940 #define LLDCOLOR_SHIFT_B 0
943 #if LLDCOLOR_BITS <= 8
944 #define LLDCOLOR_TYPE gU8
945 #define LLDCOLOR_TYPE_BITS 8
947 #error "GDISP: Cannot define gray-scale low level driver color types with more than 8 bits"
949 #if LLDCOLOR_TYPE_BITS == LLDCOLOR_BITS
950 #define LLDCOLOR_NEEDS_MASK GFXOFF
952 #define LLDCOLOR_NEEDS_MASK GFXON
954 #define LLDCOLOR_MASK() ((1 << LLDCOLOR_BITS)-1)
957 #define LLDRGB2COLOR(r,g,b) (((r)|(g)|(b)) ? 1 : 0)
958 #define LLDLUMA2COLOR(l) ((l) ? 1 : 0)
959 #define LLDHTML2COLOR(h) ((h) ? 1 : 0)
960 #define LLDLUMA_OF(c) ((c) ? 255 : 0)
961 #define LLDEXACT_LUMA_OF(c) LLDLUMA_OF(c)
964 #define LLDRGB2COLOR(r,g,b) ((LLDCOLOR_TYPE)(((gU16)(r)+(g)+(g)+(b)) >> (10-LLDCOLOR_BITS)))
965 #define LLDLUMA2COLOR(l) ((LLDCOLOR_TYPE)((l)>>(8-LLDCOLOR_BITS)))
966 #define LLDHTML2COLOR(h) ((LLDCOLOR_TYPE)(((((h)&0xFF0000)>>16)+(((h)&0x00FF00)>>7)+((h)&0x0000FF)) >> (10-LLDCOLOR_BITS)))
967 #define LLDLUMA_OF(c) (((c) & ((1<<LLDCOLOR_BITS)-1)) << (8-LLDCOLOR_BITS))
968 #define LLDEXACT_LUMA_OF(c) ((((gU16)(c) & ((1<<LLDCOLOR_BITS)-1))*255)/((1<<LLDCOLOR_BITS)-1))
971 #define LLDRED_OF(c) LLDLUMA_OF(c)
972 #define LLDGREEN_OF(c) LLDLUMA_OF(c)
973 #define LLDBLUE_OF(c) LLDLUMA_OF(c)
974 #define LLDEXACT_RED_OF(c) LLDEXACT_LUMA_OF(c)
975 #define LLDEXACT_GREEN_OF(c) LLDEXACT_LUMA_OF(c)
976 #define LLDEXACT_BLUE_OF(c) LLDEXACT_LUMA_OF(c)
981 #elif (GDISP_LLD_PIXELFORMAT & GDISP_COLORSYSTEM_MASK) == GDISP_COLORSYSTEM_PALETTE
982 #define LLDCOLOR_SYSTEM GDISP_COLORSYSTEM_PALETTE
984 #error "GDISP: A palette color system for low level drivers is not currently supported"
990 #error "GDISP: Unsupported color system for low level drivers"
994 #if COLOR_BITS > LLDCOLOR_BITS
995 #define LARGER_COLOR_BITS COLOR_BITS
996 #define LARGER_COLOR_TYPE COLOR_TYPE
998 #define LARGER_COLOR_BITS LLDCOLOR_BITS
999 #define LARGER_COLOR_TYPE LLDCOLOR_TYPE
1010 #ifndef GDISP_HARDWARE_USE_EXACT_COLOR
1011 #if LLDCOLOR_BITS_R - COLOR_BITS_R >= LLDCOLOR_BITS_R/2 || LLDCOLOR_BITS_G - COLOR_BITS_G >= LLDCOLOR_BITS_G/2 || LLDCOLOR_BITS_B - COLOR_BITS_B >= LLDCOLOR_BITS_B/2
1012 #define GDISP_HARDWARE_USE_EXACT_COLOR GFXON
1014 #define GDISP_HARDWARE_USE_EXACT_COLOR GFXOFF
1019 #if GDISP_PIXELFORMAT == GDISP_LLD_PIXELFORMAT || defined(__DOXYGEN__)
1024 #define gdispColor2Native(c) (c)
1029 #define gdispNative2Color(c) (c)
1030 #elif COLOR_SYSTEM == GDISP_COLORSYSTEM_GRAYSCALE || LLDCOLOR_SYSTEM == GDISP_COLORSYSTEM_GRAYSCALE
1031 #if GDISP_HARDWARE_USE_EXACT_COLOR
1032 #define gdispColor2Native(c) LLDLUMA2COLOR(EXACT_LUMA_OF(c))
1033 #define gdispNative2Color(c) LUMA2COLOR(LLDEXACT_LUMA_OF(c))
1035 #define gdispColor2Native(c) LLDLUMA2COLOR(LUMA_OF(c))
1036 #define gdispNative2Color(c) LUMA2COLOR(LLDLUMA_OF(c))
1038 #elif COLOR_SYSTEM == GDISP_COLORSYSTEM_TRUECOLOR && LLDCOLOR_SYSTEM == GDISP_COLORSYSTEM_TRUECOLOR
1039 #if GDISP_HARDWARE_USE_EXACT_COLOR
1040 #define gdispColor2Native(c) LLDRGB2COLOR(EXACT_RED_OF(c), EXACT_GREEN_OF(c), EXACT_BLUE_OF(c))
1041 #define gdispNative2Color(c) RGB2COLOR(LLDEXACT_RED_OF(c), LLDEXACT_GREEN_OF(c), LLDEXACT_BLUE_OF(c))
1043 #define gdispColor2Native(c) LLDRGB2COLOR(RED_OF(c), GREEN_OF(c), BLUE_OF(c))
1044 #define gdispNative2Color(c) RGB2COLOR(LLDRED_OF(c), LLDGREEN_OF(c), LLDBLUE_OF(c))
1047 #error "GDISP: This pixel format conversion is not supported yet"
1054 #undef IN_PIXMAP_DRIVER
COLOR_TYPE gColor
The color type definition.
const struct mf_font_s * gFont
The type of a font.
gColor gPixel
The pixel format.
gJustify
Type for the text justification.
gOrientation
Type for the screen orientation.
gPowermode
Type for the available power modes for the screen.
gI16 gCoord
The type for a coordinate or length on the screen.
#define GDISP_LINEBUF_SIZE
Define the default orientation for all displays in the system.
All runtime driver structures start with this structure.
All driver VMT's start with this structure.