Changes in uspace/lib/memgfx/src/memgc.c [0d62c10:1215db9] in mainline
- File:
-
- 1 edited
-
uspace/lib/memgfx/src/memgc.c (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/memgfx/src/memgc.c
r0d62c10 r1215db9 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 }; 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 } 67 96 68 97 /** Set color on memory GC. … … 100 129 101 130 /* Make sure we have a sorted, clipped rectangle */ 102 gfx_rect_clip(rect, &mgc-> rect, &crect);131 gfx_rect_clip(rect, &mgc->clip_rect, &crect); 103 132 104 133 assert(mgc->rect.p0.x == 0); … … 119 148 } 120 149 150 /** Update memory GC. 151 * 152 * @param arg Memory GC 153 * 154 * @return EOK on success or an error code 155 */ 156 static errno_t mem_gc_update(void *arg) 157 { 158 mem_gc_t *mgc = (mem_gc_t *) arg; 159 160 mgc->cb->update(mgc->cb_arg); 161 return EOK; 162 } 163 121 164 /** Create memory GC. 122 165 * … … 125 168 * @param rect Bounding rectangle 126 169 * @param alloc Allocation info 127 * @param update_cb Function called to update a rectangle128 * @param cb_arg Argument to callback function 170 * @param cb Pointer to memory GC callbacks 171 * @param cb_arg Argument to callback functions 129 172 * @param rgc Place to store pointer to new memory GC 130 173 * … … 132 175 */ 133 176 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)177 mem_gc_cb_t *cb, void *cb_arg, mem_gc_t **rgc) 135 178 { 136 179 mem_gc_t *mgc = NULL; … … 150 193 mgc->gc = gc; 151 194 mgc->rect = *rect; 195 mgc->clip_rect = *rect; 152 196 mgc->alloc = *alloc; 153 197 154 mgc-> update = update_cb;198 mgc->cb = cb; 155 199 mgc->cb_arg = cb_arg; 156 200 … … 190 234 { 191 235 mgc->rect = *rect; 236 mgc->clip_rect = *rect; 192 237 mgc->alloc = *alloc; 193 238 } … … 205 250 static void mem_gc_invalidate_rect(mem_gc_t *mgc, gfx_rect_t *rect) 206 251 { 207 mgc-> update(mgc->cb_arg, rect);252 mgc->cb->invalidate(mgc->cb_arg, rect); 208 253 } 209 254 … … 331 376 gfx_rect_t srect; 332 377 gfx_rect_t drect; 378 gfx_rect_t crect; 333 379 gfx_coord2_t offs; 334 380 gfx_coord_t x, y; … … 352 398 gfx_rect_translate(&offs, &srect, &drect); 353 399 400 /* Clip destination rectangle */ 401 gfx_rect_clip(&drect, &mbm->mgc->clip_rect, &crect); 402 354 403 assert(mbm->alloc.pitch == (mbm->rect.p1.x - mbm->rect.p0.x) * 355 404 (int)sizeof(uint32_t)); … … 369 418 } else if ((mbm->flags & bmpf_color_key) == 0) { 370 419 /* Simple copy */ 371 for (y = drect.p0.y; y < drect.p1.y; y++) {372 for (x = drect.p0.x; x < drect.p1.x; x++) {420 for (y = crect.p0.y; y < crect.p1.y; y++) { 421 for (x = crect.p0.x; x < crect.p1.x; x++) { 373 422 pixel = pixelmap_get_pixel(&smap, 374 423 x - mbm->rect.p0.x - offs.x, … … 379 428 } else if ((mbm->flags & bmpf_colorize) == 0) { 380 429 /* Color key */ 381 for (y = drect.p0.y; y < drect.p1.y; y++) {382 for (x = drect.p0.x; x < drect.p1.x; x++) {430 for (y = crect.p0.y; y < crect.p1.y; y++) { 431 for (x = crect.p0.x; x < crect.p1.x; x++) { 383 432 pixel = pixelmap_get_pixel(&smap, 384 433 x - mbm->rect.p0.x - offs.x, … … 390 439 } else { 391 440 /* 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++) {441 for (y = crect.p0.y; y < crect.p1.y; y++) { 442 for (x = crect.p0.x; x < crect.p1.x; x++) { 394 443 pixel = pixelmap_get_pixel(&smap, 395 444 x - mbm->rect.p0.x - offs.x, … … 402 451 } 403 452 404 mem_gc_invalidate_rect(mbm->mgc, & drect);453 mem_gc_invalidate_rect(mbm->mgc, &crect); 405 454 return EOK; 406 455 } … … 419 468 } 420 469 470 /** Get cursor position on memory GC. 471 * 472 * @param arg Memory GC 473 * @param pos Place to store position 474 * 475 * @return EOK on success or an error code 476 */ 477 static errno_t mem_gc_cursor_get_pos(void *arg, gfx_coord2_t *pos) 478 { 479 mem_gc_t *mgc = (mem_gc_t *) arg; 480 481 if (mgc->cb->cursor_get_pos != NULL) 482 return mgc->cb->cursor_get_pos(mgc->cb_arg, pos); 483 else 484 return ENOTSUP; 485 } 486 487 /** Set cursor position on memory GC. 488 * 489 * @param arg Memory GC 490 * @param pos New position 491 * 492 * @return EOK on success or an error code 493 */ 494 static errno_t mem_gc_cursor_set_pos(void *arg, gfx_coord2_t *pos) 495 { 496 mem_gc_t *mgc = (mem_gc_t *) arg; 497 498 if (mgc->cb->cursor_set_pos != NULL) 499 return mgc->cb->cursor_set_pos(mgc->cb_arg, pos); 500 else 501 return ENOTSUP; 502 } 503 504 /** Set cursor visibility on memory GC. 505 * 506 * @param arg Memory GC 507 * @param visible @c true iff cursor should be made visible 508 * 509 * @return EOK on success or an error code 510 */ 511 static errno_t mem_gc_cursor_set_visible(void *arg, bool visible) 512 { 513 mem_gc_t *mgc = (mem_gc_t *) arg; 514 515 if (mgc->cb->cursor_set_visible != NULL) 516 return mgc->cb->cursor_set_visible(mgc->cb_arg, visible); 517 else 518 return ENOTSUP; 519 } 520 421 521 /** @} 422 522 */
Note:
See TracChangeset
for help on using the changeset viewer.
