Changeset bc52b5b in mainline for uspace/lib/congfx/src/console.c
- Timestamp:
- 2021-08-15T10:02:32Z (3 years ago)
- Branches:
- master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 99589a9
- Parents:
- de0c55a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/congfx/src/console.c
rde0c55a rbc52b5b 75 75 }; 76 76 77 /** Convert pixel value to charfield. 78 * 79 * On the bottom of this function lies a big big hack. In the absence 80 * of support for different color formats (FIX ME!), here's a single 81 * format that can represent both 3x8bit RGB and 24-bit characters 82 * with 8-bit EGA attributes (i.e. we can specify the foreground and 83 * background colors individually). 84 * 85 * A R G B 86 * 0 red grn blu 24-bit color 87 * attr c2 c1 c0 attribute + 24-bit character 88 */ 89 static void console_gc_pix_to_charfield(pixel_t clr, charfield_t *ch) 90 { 91 uint8_t attr; 92 93 if ((clr >> 24) == 0) { 94 /* RGB (no text) */ 95 ch->ch = 0; 96 ch->flags = CHAR_FLAG_DIRTY; 97 ch->attrs.type = CHAR_ATTR_RGB; 98 ch->attrs.val.rgb.fgcolor = clr ^ 0xffffff; 99 ch->attrs.val.rgb.bgcolor = clr; 100 } else { 101 /* EGA attributes (with text) */ 102 attr = clr >> 24; 103 ch->ch = clr & 0xffffff; 104 ch->flags = CHAR_FLAG_DIRTY; 105 ch->attrs.type = CHAR_ATTR_INDEX; 106 ch->attrs.val.index.fgcolor = attr & 0x7; 107 ch->attrs.val.index.bgcolor = (attr >> 4) & 0x7; 108 ch->attrs.val.index.attr = 109 ((attr & 0x8) ? CATTR_BRIGHT : 0) + 110 ((attr & 0x80) ? CATTR_BLINK : 0); 111 } 112 } 113 77 114 /** Set clipping rectangle on console GC. 78 115 * … … 107 144 console_gc_t *cgc = (console_gc_t *) arg; 108 145 109 cgc->clr = PIXEL( 0, color->r >> 8, color->g >> 8, color->b >> 8);146 cgc->clr = PIXEL(color->attr, color->r >> 8, color->g >> 8, color->b >> 8); 110 147 return EOK; 111 148 } … … 131 168 cols = cgc->rect.p1.x - cgc->rect.p0.x; 132 169 133 ch.ch = cgc->clr >> 24; 134 ch.flags = CHAR_FLAG_DIRTY; 135 ch.attrs.type = CHAR_ATTR_RGB; 136 ch.attrs.val.rgb.fgcolor = cgc->clr ^ 0xffffff; 137 ch.attrs.val.rgb.bgcolor = cgc->clr; 170 console_gc_pix_to_charfield(cgc->clr, &ch); 138 171 139 172 for (y = crect.p0.y; y < crect.p1.y; y++) { … … 374 407 y - offs.y - cbm->rect.p0.y); 375 408 376 ch.ch = clr >> 24; 377 ch.flags = CHAR_FLAG_DIRTY; 378 ch.attrs.type = CHAR_ATTR_RGB; 379 ch.attrs.val.rgb.fgcolor = clr ^ 0xffffff; 380 ch.attrs.val.rgb.bgcolor = clr; 381 409 console_gc_pix_to_charfield(clr, &ch); 382 410 cbm->cgc->buf[y * cols + x] = ch; 383 411 } … … 392 420 y - offs.y - cbm->rect.p0.y); 393 421 394 ch.ch = clr >> 24; 395 ch.flags = CHAR_FLAG_DIRTY; 396 ch.attrs.type = CHAR_ATTR_RGB; 397 ch.attrs.val.rgb.fgcolor = clr ^ 0xffffff; 398 ch.attrs.val.rgb.bgcolor = clr; 422 console_gc_pix_to_charfield(clr, &ch); 399 423 400 424 if (clr != cbm->key_color) … … 404 428 } else { 405 429 /* Color key & colorize */ 406 ch.ch = 0; 407 ch.flags = CHAR_FLAG_DIRTY; 408 ch.attrs.type = CHAR_ATTR_RGB; 409 ch.attrs.val.rgb.fgcolor = cbm->cgc->clr; 410 ch.attrs.val.rgb.bgcolor = cbm->cgc->clr; 430 console_gc_pix_to_charfield(cbm->cgc->clr, &ch); 411 431 412 432 for (y = crect.p0.y; y < crect.p1.y; y++) {
Note:
See TracChangeset
for help on using the changeset viewer.