Changeset 68a552f in mainline for uspace/lib/congfx/src/console.c
- Timestamp:
- 2021-02-22T19:52:08Z (3 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 26853ebc
- Parents:
- 2ab8ab3
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/congfx/src/console.c
r2ab8ab3 r68a552f 1 1 /* 2 * Copyright (c) 20 19Jiri Svoboda2 * Copyright (c) 2021 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 92 92 { 93 93 console_gc_t *cgc = (console_gc_t *) arg; 94 int rv;95 94 gfx_coord_t x, y; 96 97 // XXX We should handle p0.x > p1.x and p0.y > p1.y 98 99 console_set_rgb_color(cgc->con, cgc->clr, cgc->clr); 100 101 for (y = rect->p0.y; y < rect->p1.y; y++) { 102 console_set_pos(cgc->con, rect->p0.x, y); 103 104 for (x = rect->p0.x; x < rect->p1.x; x++) { 105 rv = fputc('X', cgc->fout); 106 if (rv < 0) 107 return EIO; 108 } 109 110 console_flush(cgc->con); 111 } 95 gfx_coord_t cols; 96 gfx_rect_t crect; 97 charfield_t ch; 98 99 /* Make sure rectangle is clipped and sorted */ 100 gfx_rect_clip(rect, &cgc->rect, &crect); 101 102 cols = cgc->rect.p1.x - cgc->rect.p0.x; 103 104 ch.ch = 0; 105 ch.flags = CHAR_FLAG_DIRTY; 106 ch.attrs.type = CHAR_ATTR_RGB; 107 ch.attrs.val.rgb.fgcolor = cgc->clr; 108 ch.attrs.val.rgb.bgcolor = cgc->clr; 109 110 for (y = crect.p0.y; y < crect.p1.y; y++) { 111 for (x = crect.p0.x; x < crect.p1.x; x++) { 112 cgc->buf[y * cols + x] = ch; 113 } 114 } 115 116 console_update(cgc->con, crect.p0.x, crect.p0.y, 117 crect.p1.x, crect.p1.y); 112 118 113 119 return EOK; … … 131 137 sysarg_t rows; 132 138 sysarg_t cols; 139 charfield_t *buf; 133 140 errno_t rc; 134 141 … … 140 147 141 148 rc = console_get_size(con, &cols, &rows); 149 if (rc != EOK) 150 goto error; 151 152 rc = console_map(con, cols, rows, &buf); 142 153 if (rc != EOK) 143 154 goto error; … … 154 165 cgc->rect.p1.x = cols; 155 166 cgc->rect.p1.y = rows - 1; /* make sure we avoid bottom-right corner */ 167 cgc->buf = buf; 156 168 157 169 *rgc = cgc; … … 268 280 console_gc_bitmap_t *cbm = (console_gc_bitmap_t *)bm; 269 281 gfx_coord_t x, y; 270 int rv;271 282 pixel_t clr; 283 charfield_t ch; 272 284 pixelmap_t pixelmap; 273 285 gfx_rect_t srect; … … 275 287 gfx_rect_t crect; 276 288 gfx_coord2_t offs; 289 gfx_coord_t cols; 277 290 278 291 if (srect0 != NULL) … … 295 308 pixelmap.data = cbm->alloc.pixels; 296 309 310 cols = cbm->cgc->rect.p1.x - cbm->cgc->rect.p0.x; 311 297 312 if ((cbm->flags & bmpf_color_key) == 0) { 298 313 /* Simple copy */ … … 304 319 x - offs.x - cbm->rect.p0.x, 305 320 y - offs.y - cbm->rect.p0.y); 306 console_set_rgb_color(cbm->cgc->con, clr, clr); 307 308 rv = fputc('X', cbm->cgc->fout); 309 if (rv < 0) 310 return EIO; 311 312 console_flush(cbm->cgc->con); 321 322 ch.ch = 0; 323 ch.flags = CHAR_FLAG_DIRTY; 324 ch.attrs.type = CHAR_ATTR_RGB; 325 ch.attrs.val.rgb.fgcolor = clr; 326 ch.attrs.val.rgb.bgcolor = clr; 327 328 cbm->cgc->buf[y * cols + x] = ch; 313 329 } 314 330 } … … 321 337 x - offs.x - cbm->rect.p0.x, 322 338 y - offs.y - cbm->rect.p0.y); 323 console_set_rgb_color(cbm->cgc->con, clr, clr); 324 325 if (clr != cbm->key_color) { 326 console_set_pos(cbm->cgc->con, x, y); 327 rv = fputc('X', cbm->cgc->fout); 328 if (rv < 0) 329 return EIO; 330 331 console_flush(cbm->cgc->con); 332 } 333 339 340 ch.ch = 0; 341 ch.flags = CHAR_FLAG_DIRTY; 342 ch.attrs.type = CHAR_ATTR_RGB; 343 ch.attrs.val.rgb.fgcolor = clr; 344 ch.attrs.val.rgb.bgcolor = clr; 345 346 if (clr != cbm->key_color) 347 cbm->cgc->buf[y * cols + x] = ch; 334 348 } 335 349 } … … 338 352 console_set_rgb_color(cbm->cgc->con, cbm->cgc->clr, 339 353 cbm->cgc->clr); 354 ch.ch = 0; 355 ch.flags = CHAR_FLAG_DIRTY; 356 ch.attrs.type = CHAR_ATTR_RGB; 357 ch.attrs.val.rgb.fgcolor = cbm->cgc->clr; 358 ch.attrs.val.rgb.bgcolor = cbm->cgc->clr; 340 359 341 360 for (y = crect.p0.y; y < crect.p1.y; y++) { 342 361 for (x = crect.p0.x; x < crect.p1.x; x++) { 343 344 362 clr = pixelmap_get_pixel(&pixelmap, 345 363 x - offs.x - cbm->rect.p0.x, 346 364 y - offs.y - cbm->rect.p0.y); 347 365 348 if (clr != cbm->key_color) { 349 console_set_pos(cbm->cgc->con, x, y); 350 rv = fputc('X', cbm->cgc->fout); 351 if (rv < 0) 352 return EIO; 353 354 console_flush(cbm->cgc->con); 355 } 356 366 if (clr != cbm->key_color) 367 cbm->cgc->buf[y * cols + x] = ch; 357 368 } 358 369 } 359 370 } 371 372 console_update(cbm->cgc->con, crect.p0.x, crect.p0.y, crect.p1.x, 373 crect.p1.y); 360 374 361 375 return EOK;
Note:
See TracChangeset
for help on using the changeset viewer.