Changes in uspace/lib/memgfx/src/memgc.c [bc52b5b:0d62c10] in mainline
- File:
-
- 1 edited
-
uspace/lib/memgfx/src/memgc.c (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/memgfx/src/memgc.c
rbc52b5b r0d62c10 1 1 /* 2 * Copyright (c) 202 1Jiri Svoboda2 * Copyright (c) 2020 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 *);51 50 static errno_t mem_gc_set_color(void *, gfx_color_t *); 52 51 static errno_t mem_gc_fill_rect(void *, gfx_rect_t *); 53 static errno_t mem_gc_update(void *);54 52 static errno_t mem_gc_bitmap_create(void *, gfx_bitmap_params_t *, 55 53 gfx_bitmap_alloc_t *, void **); … … 57 55 static errno_t mem_gc_bitmap_render(void *, gfx_rect_t *, gfx_coord2_t *); 58 56 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);62 57 static void mem_gc_invalidate_rect(mem_gc_t *, gfx_rect_t *); 63 58 64 59 gfx_context_ops_t mem_gc_ops = { 65 .set_clip_rect = mem_gc_set_clip_rect,66 60 .set_color = mem_gc_set_color, 67 61 .fill_rect = mem_gc_fill_rect, 68 .update = mem_gc_update,69 62 .bitmap_create = mem_gc_bitmap_create, 70 63 .bitmap_destroy = mem_gc_bitmap_destroy, 71 64 .bitmap_render = mem_gc_bitmap_render, 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 65 .bitmap_get_alloc = mem_gc_bitmap_get_alloc 76 66 }; 77 78 /** Set clipping rectangle on memory GC.79 *80 * @param arg Memory GC81 * @param rect Rectangle82 *83 * @return EOK on success or an error code84 */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 else92 mgc->clip_rect = mgc->rect;93 94 return EOK;95 }96 67 97 68 /** Set color on memory GC. … … 108 79 mem_gc_t *mgc = (mem_gc_t *) arg; 109 80 uint16_t r, g, b; 110 uint8_t attr;111 81 112 82 gfx_color_get_rgb_i16(color, &r, &g, &b); 113 gfx_color_get_ega(color, &attr); 114 mgc->color = PIXEL(attr, r >> 8, g >> 8, b >> 8); 83 mgc->color = PIXEL(0, r >> 8, g >> 8, b >> 8); 115 84 return EOK; 116 85 } … … 131 100 132 101 /* Make sure we have a sorted, clipped rectangle */ 133 gfx_rect_clip(rect, &mgc-> clip_rect, &crect);102 gfx_rect_clip(rect, &mgc->rect, &crect); 134 103 135 104 assert(mgc->rect.p0.x == 0); … … 150 119 } 151 120 152 /** Update memory GC.153 *154 * @param arg Memory GC155 *156 * @return EOK on success or an error code157 */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 166 121 /** Create memory GC. 167 122 * … … 170 125 * @param rect Bounding rectangle 171 126 * @param alloc Allocation info 172 * @param cb Pointer to memory GC callbacks173 * @param cb_arg Argument to callback function s127 * @param update_cb Function called to update a rectangle 128 * @param cb_arg Argument to callback function 174 129 * @param rgc Place to store pointer to new memory GC 175 130 * … … 177 132 */ 178 133 errno_t mem_gc_create(gfx_rect_t *rect, gfx_bitmap_alloc_t *alloc, 179 mem_gc_ cb_t *cb, void *cb_arg, mem_gc_t **rgc)134 mem_gc_update_cb_t update_cb, void *cb_arg, mem_gc_t **rgc) 180 135 { 181 136 mem_gc_t *mgc = NULL; … … 195 150 mgc->gc = gc; 196 151 mgc->rect = *rect; 197 mgc->clip_rect = *rect;198 152 mgc->alloc = *alloc; 199 153 200 mgc-> cb =cb;154 mgc->update = update_cb; 201 155 mgc->cb_arg = cb_arg; 202 156 … … 236 190 { 237 191 mgc->rect = *rect; 238 mgc->clip_rect = *rect;239 192 mgc->alloc = *alloc; 240 193 } … … 252 205 static void mem_gc_invalidate_rect(mem_gc_t *mgc, gfx_rect_t *rect) 253 206 { 254 mgc-> cb->invalidate(mgc->cb_arg, rect);207 mgc->update(mgc->cb_arg, rect); 255 208 } 256 209 … … 378 331 gfx_rect_t srect; 379 332 gfx_rect_t drect; 380 gfx_rect_t crect;381 333 gfx_coord2_t offs; 382 334 gfx_coord_t x, y; … … 399 351 /* Destination rectangle */ 400 352 gfx_rect_translate(&offs, &srect, &drect); 401 402 /* Clip destination rectangle */403 gfx_rect_clip(&drect, &mbm->mgc->clip_rect, &crect);404 353 405 354 assert(mbm->alloc.pitch == (mbm->rect.p1.x - mbm->rect.p0.x) * … … 420 369 } else if ((mbm->flags & bmpf_color_key) == 0) { 421 370 /* Simple copy */ 422 for (y = crect.p0.y; y < crect.p1.y; y++) {423 for (x = crect.p0.x; x < crect.p1.x; x++) {371 for (y = drect.p0.y; y < drect.p1.y; y++) { 372 for (x = drect.p0.x; x < drect.p1.x; x++) { 424 373 pixel = pixelmap_get_pixel(&smap, 425 374 x - mbm->rect.p0.x - offs.x, … … 430 379 } else if ((mbm->flags & bmpf_colorize) == 0) { 431 380 /* Color key */ 432 for (y = crect.p0.y; y < crect.p1.y; y++) {433 for (x = crect.p0.x; x < crect.p1.x; x++) {381 for (y = drect.p0.y; y < drect.p1.y; y++) { 382 for (x = drect.p0.x; x < drect.p1.x; x++) { 434 383 pixel = pixelmap_get_pixel(&smap, 435 384 x - mbm->rect.p0.x - offs.x, … … 441 390 } else { 442 391 /* Color key & colorization */ 443 for (y = crect.p0.y; y < crect.p1.y; y++) {444 for (x = crect.p0.x; x < crect.p1.x; x++) {392 for (y = drect.p0.y; y < drect.p1.y; y++) { 393 for (x = drect.p0.x; x < drect.p1.x; x++) { 445 394 pixel = pixelmap_get_pixel(&smap, 446 395 x - mbm->rect.p0.x - offs.x, … … 453 402 } 454 403 455 mem_gc_invalidate_rect(mbm->mgc, & crect);404 mem_gc_invalidate_rect(mbm->mgc, &drect); 456 405 return EOK; 457 406 } … … 470 419 } 471 420 472 /** Get cursor position on memory GC.473 *474 * @param arg Memory GC475 * @param pos Place to store position476 *477 * @return EOK on success or an error code478 */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 else486 return ENOTSUP;487 }488 489 /** Set cursor position on memory GC.490 *491 * @param arg Memory GC492 * @param pos New position493 *494 * @return EOK on success or an error code495 */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 else503 return ENOTSUP;504 }505 506 /** Set cursor visibility on memory GC.507 *508 * @param arg Memory GC509 * @param visible @c true iff cursor should be made visible510 *511 * @return EOK on success or an error code512 */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 else520 return ENOTSUP;521 }522 523 421 /** @} 524 422 */
Note:
See TracChangeset
for help on using the changeset viewer.
