Changes in uspace/lib/memgfx/src/memgc.c [0d62c10:bc52b5b] in mainline
- File:
-
- 1 edited
-
uspace/lib/memgfx/src/memgc.c (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/memgfx/src/memgc.c
r0d62c10 rbc52b5b 1 1 /* 2 * Copyright (c) 202 0Jiri Svoboda2 * Copyright (c) 2021 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 48 48 #include "../private/memgc.h" 49 49 50 static errno_t mem_gc_set_clip_rect(void *, gfx_rect_t *); 50 51 static errno_t mem_gc_set_color(void *, gfx_color_t *); 51 52 static errno_t mem_gc_fill_rect(void *, gfx_rect_t *); 53 static errno_t mem_gc_update(void *); 52 54 static errno_t mem_gc_bitmap_create(void *, gfx_bitmap_params_t *, 53 55 gfx_bitmap_alloc_t *, void **); … … 55 57 static errno_t mem_gc_bitmap_render(void *, gfx_rect_t *, gfx_coord2_t *); 56 58 static errno_t mem_gc_bitmap_get_alloc(void *, gfx_bitmap_alloc_t *); 59 static errno_t mem_gc_cursor_get_pos(void *, gfx_coord2_t *); 60 static errno_t mem_gc_cursor_set_pos(void *, gfx_coord2_t *); 61 static errno_t mem_gc_cursor_set_visible(void *, bool); 57 62 static void mem_gc_invalidate_rect(mem_gc_t *, gfx_rect_t *); 58 63 59 64 gfx_context_ops_t mem_gc_ops = { 65 .set_clip_rect = mem_gc_set_clip_rect, 60 66 .set_color = mem_gc_set_color, 61 67 .fill_rect = mem_gc_fill_rect, 68 .update = mem_gc_update, 62 69 .bitmap_create = mem_gc_bitmap_create, 63 70 .bitmap_destroy = mem_gc_bitmap_destroy, 64 71 .bitmap_render = mem_gc_bitmap_render, 65 .bitmap_get_alloc = mem_gc_bitmap_get_alloc 72 .bitmap_get_alloc = mem_gc_bitmap_get_alloc, 73 .cursor_get_pos = mem_gc_cursor_get_pos, 74 .cursor_set_pos = mem_gc_cursor_set_pos, 75 .cursor_set_visible = mem_gc_cursor_set_visible 66 76 }; 67 77 78 /** Set clipping rectangle on memory GC. 79 * 80 * @param arg Memory GC 81 * @param rect Rectangle 82 * 83 * @return EOK on success or an error code 84 */ 85 static errno_t mem_gc_set_clip_rect(void *arg, gfx_rect_t *rect) 86 { 87 mem_gc_t *mgc = (mem_gc_t *) arg; 88 89 if (rect != NULL) 90 gfx_rect_clip(rect, &mgc->rect, &mgc->clip_rect); 91 else 92 mgc->clip_rect = mgc->rect; 93 94 return EOK; 95 } 96 68 97 /** Set color on memory GC. 69 98 * … … 79 108 mem_gc_t *mgc = (mem_gc_t *) arg; 80 109 uint16_t r, g, b; 110 uint8_t attr; 81 111 82 112 gfx_color_get_rgb_i16(color, &r, &g, &b); 83 mgc->color = PIXEL(0, r >> 8, g >> 8, b >> 8); 113 gfx_color_get_ega(color, &attr); 114 mgc->color = PIXEL(attr, r >> 8, g >> 8, b >> 8); 84 115 return EOK; 85 116 } … … 100 131 101 132 /* Make sure we have a sorted, clipped rectangle */ 102 gfx_rect_clip(rect, &mgc-> rect, &crect);133 gfx_rect_clip(rect, &mgc->clip_rect, &crect); 103 134 104 135 assert(mgc->rect.p0.x == 0); … … 119 150 } 120 151 152 /** Update memory GC. 153 * 154 * @param arg Memory GC 155 * 156 * @return EOK on success or an error code 157 */ 158 static errno_t mem_gc_update(void *arg) 159 { 160 mem_gc_t *mgc = (mem_gc_t *) arg; 161 162 mgc->cb->update(mgc->cb_arg); 163 return EOK; 164 } 165 121 166 /** Create memory GC. 122 167 * … … 125 170 * @param rect Bounding rectangle 126 171 * @param alloc Allocation info 127 * @param update_cb Function called to update a rectangle128 * @param cb_arg Argument to callback function 172 * @param cb Pointer to memory GC callbacks 173 * @param cb_arg Argument to callback functions 129 174 * @param rgc Place to store pointer to new memory GC 130 175 * … … 132 177 */ 133 178 errno_t mem_gc_create(gfx_rect_t *rect, gfx_bitmap_alloc_t *alloc, 134 mem_gc_ update_cb_t update_cb, void *cb_arg, mem_gc_t **rgc)179 mem_gc_cb_t *cb, void *cb_arg, mem_gc_t **rgc) 135 180 { 136 181 mem_gc_t *mgc = NULL; … … 150 195 mgc->gc = gc; 151 196 mgc->rect = *rect; 197 mgc->clip_rect = *rect; 152 198 mgc->alloc = *alloc; 153 199 154 mgc-> update = update_cb;200 mgc->cb = cb; 155 201 mgc->cb_arg = cb_arg; 156 202 … … 190 236 { 191 237 mgc->rect = *rect; 238 mgc->clip_rect = *rect; 192 239 mgc->alloc = *alloc; 193 240 } … … 205 252 static void mem_gc_invalidate_rect(mem_gc_t *mgc, gfx_rect_t *rect) 206 253 { 207 mgc-> update(mgc->cb_arg, rect);254 mgc->cb->invalidate(mgc->cb_arg, rect); 208 255 } 209 256 … … 331 378 gfx_rect_t srect; 332 379 gfx_rect_t drect; 380 gfx_rect_t crect; 333 381 gfx_coord2_t offs; 334 382 gfx_coord_t x, y; … … 352 400 gfx_rect_translate(&offs, &srect, &drect); 353 401 402 /* Clip destination rectangle */ 403 gfx_rect_clip(&drect, &mbm->mgc->clip_rect, &crect); 404 354 405 assert(mbm->alloc.pitch == (mbm->rect.p1.x - mbm->rect.p0.x) * 355 406 (int)sizeof(uint32_t)); … … 369 420 } else if ((mbm->flags & bmpf_color_key) == 0) { 370 421 /* Simple copy */ 371 for (y = drect.p0.y; y < drect.p1.y; y++) {372 for (x = drect.p0.x; x < drect.p1.x; x++) {422 for (y = crect.p0.y; y < crect.p1.y; y++) { 423 for (x = crect.p0.x; x < crect.p1.x; x++) { 373 424 pixel = pixelmap_get_pixel(&smap, 374 425 x - mbm->rect.p0.x - offs.x, … … 379 430 } else if ((mbm->flags & bmpf_colorize) == 0) { 380 431 /* Color key */ 381 for (y = drect.p0.y; y < drect.p1.y; y++) {382 for (x = drect.p0.x; x < drect.p1.x; x++) {432 for (y = crect.p0.y; y < crect.p1.y; y++) { 433 for (x = crect.p0.x; x < crect.p1.x; x++) { 383 434 pixel = pixelmap_get_pixel(&smap, 384 435 x - mbm->rect.p0.x - offs.x, … … 390 441 } else { 391 442 /* Color key & colorization */ 392 for (y = drect.p0.y; y < drect.p1.y; y++) {393 for (x = drect.p0.x; x < drect.p1.x; x++) {443 for (y = crect.p0.y; y < crect.p1.y; y++) { 444 for (x = crect.p0.x; x < crect.p1.x; x++) { 394 445 pixel = pixelmap_get_pixel(&smap, 395 446 x - mbm->rect.p0.x - offs.x, … … 402 453 } 403 454 404 mem_gc_invalidate_rect(mbm->mgc, & drect);455 mem_gc_invalidate_rect(mbm->mgc, &crect); 405 456 return EOK; 406 457 } … … 419 470 } 420 471 472 /** Get cursor position on memory GC. 473 * 474 * @param arg Memory GC 475 * @param pos Place to store position 476 * 477 * @return EOK on success or an error code 478 */ 479 static errno_t mem_gc_cursor_get_pos(void *arg, gfx_coord2_t *pos) 480 { 481 mem_gc_t *mgc = (mem_gc_t *) arg; 482 483 if (mgc->cb->cursor_get_pos != NULL) 484 return mgc->cb->cursor_get_pos(mgc->cb_arg, pos); 485 else 486 return ENOTSUP; 487 } 488 489 /** Set cursor position on memory GC. 490 * 491 * @param arg Memory GC 492 * @param pos New position 493 * 494 * @return EOK on success or an error code 495 */ 496 static errno_t mem_gc_cursor_set_pos(void *arg, gfx_coord2_t *pos) 497 { 498 mem_gc_t *mgc = (mem_gc_t *) arg; 499 500 if (mgc->cb->cursor_set_pos != NULL) 501 return mgc->cb->cursor_set_pos(mgc->cb_arg, pos); 502 else 503 return ENOTSUP; 504 } 505 506 /** Set cursor visibility on memory GC. 507 * 508 * @param arg Memory GC 509 * @param visible @c true iff cursor should be made visible 510 * 511 * @return EOK on success or an error code 512 */ 513 static errno_t mem_gc_cursor_set_visible(void *arg, bool visible) 514 { 515 mem_gc_t *mgc = (mem_gc_t *) arg; 516 517 if (mgc->cb->cursor_set_visible != NULL) 518 return mgc->cb->cursor_set_visible(mgc->cb_arg, visible); 519 else 520 return ENOTSUP; 521 } 522 421 523 /** @} 422 524 */
Note:
See TracChangeset
for help on using the changeset viewer.
