2 Acess OS Window Manager
\r
6 #define ABS(x) ((x)<0?-(x):(x))
\r
7 #define PLOT(x,y,colour) (gScreenBuffer[(y)*SCREEN_WIDTH+(x)] = (colour))
\r
9 void draw_line(int x1, int y1, int x2, int y2, Uint32 colour)
\r
21 PLOT(x1, i, colour);
\r
24 PLOT(x1, i, colour);
\r
29 step = (dy/dx); step = (y2>y1?step:-step);
\r
30 for(i=x1;i<x2;i++) PLOT(i, y1+(int)(step*i), colour);
\r
32 step = (dy/dx); step = (y2>y1?-step:step);
\r
33 for(i=x2;i<x1;i++) PLOT(i, y1+(int)(step*i), colour);
\r
37 void draw_rect(int x, int y, int w, int h, Uint32 colour)
\r
39 Uint32 *p = gScreenBuffer+y*SCREEN_WIDTH+x;
\r
43 for(i=0;i<w;i++) *(p+i) = colour;
\r
48 void draw_bmp(BITMAP *bmp, RECT *rc)
\r
58 k_printf("draw_bmp: (bmp=0x%x, rc=0x%x)\n", bmp, rc);
\r
61 buf = gScreenBuffer+rc->y1*SCREEN_WIDTH+rc->x1;
\r
62 bi = bmp->data; bi16 = bmp->data; bi8 = bmp->data;
\r
67 k_printf(" draw_bmp: bmp->bpp = %i\n", bmp->bpp);
\r
72 // === 32bit Colour ===
\r
74 for(i = 0; i < h; i++)
\r
76 for(j = 0; j < w; j++)
\r
81 case 0xFF: //Fully Visible
\r
85 r = ((*bi>>16)&0xFF) + ((*buf>>16)&0xFF);
\r
86 g = ((*bi>>8)&0xFF) + ((*buf>>8)&0xFF);
\r
87 b = ((*bi)&0xFF) + ((*buf)&0xFF);
\r
88 r >>= 1; g >>= 1; b >>= 1;
\r
89 buf[j] = (r<<16) | (g<<8) | b;
\r
91 case 0x00: // Fully Transparent
\r
93 default: // Everything else
\r
94 r = ((*bi>>16)&0xFF)*(255-a) + ((*buf>>16)&0xFF)*a;
\r
95 g = ((*bi>>8)&0xFF)*(255-a) + ((*buf>>8)&0xFF)*a;
\r
96 b = ((*bi)&0xFF)*(255-a) + ((*buf)&0xFF)*a;
\r
97 r >>= 8; g >>= 8; b >>= 8;
\r
98 buf[j] = (r<<16) | (g<<8) | b;
\r
103 buf += SCREEN_WIDTH;
\r