Changes in uspace/lib/congfx/src/console.c [211fd68:bb14312] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/congfx/src/console.c
r211fd68 rbb14312 1 1 /* 2 * Copyright (c) 202 4Jiri Svoboda2 * Copyright (c) 2021 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 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 absence80 * of support for different color formats (FIX ME!), here's a single81 * format that can represent both 3x8bit RGB and 24-bit characters82 * with 8-bit EGA attributes (i.e. we can specify the foreground and83 * background colors individually).84 *85 * A R G B86 * 0 red grn blu 24-bit color87 * attr c2 c1 c0 attribute + 24-bit character88 */89 static void console_gc_pix_to_charfield(pixel_t clr, charfield_t *ch)90 {91 uint8_t attr;92 93 if ((clr >> 24) == 0xff) {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;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 114 77 /** Set clipping rectangle on console GC. 115 78 * … … 144 107 console_gc_t *cgc = (console_gc_t *) arg; 145 108 146 cgc->clr = PIXEL( color->attr, color->r >> 8, color->g >> 8, color->b >> 8);109 cgc->clr = PIXEL(0, color->r >> 8, color->g >> 8, color->b >> 8); 147 110 return EOK; 148 111 } … … 168 131 cols = cgc->rect.p1.x - cgc->rect.p0.x; 169 132 170 console_gc_pix_to_charfield(cgc->clr, &ch); 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; 171 138 172 139 for (y = crect.p0.y; y < crect.p1.y; y++) { … … 278 245 279 246 free(cgc); 280 return EOK;281 }282 283 /** Free up console for other users, suspending GC operation.284 *285 * @param cgc Console GC286 * @return EOK on success or an error code287 */288 errno_t console_gc_suspend(console_gc_t *cgc)289 {290 console_unmap(cgc->con, cgc->buf);291 cgc->buf = NULL;292 293 console_clear(cgc->con);294 console_cursor_visibility(cgc->con, true);295 return EOK;296 }297 298 /** Resume GC operation after suspend.299 *300 * @param cgc Console GC301 * @return EOK on success or an error code302 */303 errno_t console_gc_resume(console_gc_t *cgc)304 {305 errno_t rc;306 307 console_clear(cgc->con);308 309 rc = console_map(cgc->con, cgc->rect.p1.x, cgc->rect.p1.y, &cgc->buf);310 if (rc != EOK)311 return rc;312 313 247 return EOK; 314 248 } … … 440 374 y - offs.y - cbm->rect.p0.y); 441 375 442 console_gc_pix_to_charfield(clr, &ch); 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 443 382 cbm->cgc->buf[y * cols + x] = ch; 444 383 } … … 453 392 y - offs.y - cbm->rect.p0.y); 454 393 455 console_gc_pix_to_charfield(clr, &ch); 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; 456 399 457 400 if (clr != cbm->key_color) … … 461 404 } else { 462 405 /* Color key & colorize */ 463 console_gc_pix_to_charfield(cbm->cgc->clr, &ch); 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; 464 411 465 412 for (y = crect.p0.y; y < crect.p1.y; y++) {
Note:
See TracChangeset
for help on using the changeset viewer.