FreeBASIC  0.91.0
gfx_color.c
Go to the documentation of this file.
1 /* color statement */
2 
3 #include "fb_gfx.h"
4 
5 
6 /*:::::*/
7 int fb_GfxColor(int fg, int bg, int flags)
8 {
10  int cur;
11  if (__fb_gfx->depth <= 8) {
12  cur = context->fg_color | (context->bg_color << 16);
13  } else if (__fb_gfx->depth == 16) {
14  unsigned c = context->fg_color;
15  cur = (((c & 0x001F) << 3) | ((c >> 2) & 0x7) |
16  ((c & 0x07E0) << 5) | ((c >> 1) & 0x300) |
17  ((c & 0xF800) << 8) | ((c << 3) & 0x70000) | 0xff000000);
18  } else {
19  cur = context->fg_color;
20  }
21 
22  switch (__fb_gfx->mode_num) {
23 
24  case 1:
25  if (!(flags & FB_COLOR_BG_DEFAULT))
26  fb_GfxPalette(-(4 - (bg & 0x3)), 0, 0, 0);
27  if (!(flags & FB_COLOR_FG_DEFAULT))
28  fb_GfxPalette(0, fg, -1, -1);
29  break;
30 
31  case 7:
32  case 8:
33  case 9:
34  if (!(flags & FB_COLOR_FG_DEFAULT))
35  context->fg_color = (fg & 0xF);
36  if (!(flags & FB_COLOR_BG_DEFAULT))
37  fb_GfxPalette(0, bg, -1, -1);
38  break;
39 
40  default:
41  if (!(flags & FB_COLOR_FG_DEFAULT)) {
42  if (__fb_gfx->depth > 8)
43  context->fg_color = fb_hMakeColor(__fb_gfx->bpp, fg, (fg >> 16) & 0xFF, (fg >> 8) & 0xFF, fg & 0xFF);
44  else
45  context->fg_color = (fg & BPP_MASK(context->target_bpp));
46  }
47  if (!(flags & FB_COLOR_BG_DEFAULT)) {
48  if (__fb_gfx->depth > 8)
49  context->bg_color = fb_hMakeColor(__fb_gfx->bpp, bg, (bg >> 16) & 0xFF, (bg >> 8) & 0xFF, bg & 0xFF);
50  else
51  context->bg_color = (bg & BPP_MASK(context->target_bpp));
52  }
53  break;
54  }
55 
56  return cur;
57 }