Changeset f8375f7 in mainline for uspace/lib/guigfx/src/canvas.c
- Timestamp:
- 2020-05-30T17:16:39Z (5 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- dbef30f
- Parents:
- cea9f0c
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/guigfx/src/canvas.c
rcea9f0c rf8375f7 49 49 //#include "../../private/color.h" 50 50 51 static errno_t canvas_gc_set_color(void *, gfx_color_t *); 52 static errno_t canvas_gc_fill_rect(void *, gfx_rect_t *); 53 static errno_t canvas_gc_bitmap_create(void *, gfx_bitmap_params_t *, 54 gfx_bitmap_alloc_t *, void **); 55 static errno_t canvas_gc_bitmap_destroy(void *); 56 static errno_t canvas_gc_bitmap_render(void *, gfx_rect_t *, gfx_coord2_t *); 57 static errno_t canvas_gc_bitmap_get_alloc(void *, gfx_bitmap_alloc_t *); 58 59 gfx_context_ops_t canvas_gc_ops = { 60 .set_color = canvas_gc_set_color, 61 .fill_rect = canvas_gc_fill_rect, 62 .bitmap_create = canvas_gc_bitmap_create, 63 .bitmap_destroy = canvas_gc_bitmap_destroy, 64 .bitmap_render = canvas_gc_bitmap_render, 65 .bitmap_get_alloc = canvas_gc_bitmap_get_alloc 66 }; 67 68 /** Set color on canvas GC. 69 * 70 * Set drawing color on canvas GC. 71 * 72 * @param arg Canvas GC 73 * @param color Color 74 * 75 * @return EOK on success or an error code 76 */ 77 static errno_t canvas_gc_set_color(void *arg, gfx_color_t *color) 78 { 79 canvas_gc_t *cgc = (canvas_gc_t *) arg; 80 81 return gfx_set_color(cgc->mbgc, color); 82 } 83 84 /** Fill rectangle on canvas GC. 85 * 86 * @param arg Canvas GC 87 * @param rect Rectangle 88 * 89 * @return EOK on success or an error code 90 */ 91 static errno_t canvas_gc_fill_rect(void *arg, gfx_rect_t *rect) 92 { 93 canvas_gc_t *cgc = (canvas_gc_t *) arg; 94 errno_t rc; 95 96 rc = gfx_fill_rect(cgc->mbgc, rect); 97 if (rc == EOK) 98 update_canvas(cgc->canvas, cgc->surface); 99 100 return rc; 101 } 51 static void canvas_gc_update_cb(void *, gfx_rect_t *); 102 52 103 53 /** Create canvas GC. … … 115 65 { 116 66 canvas_gc_t *cgc = NULL; 117 gfx_context_t *gc = NULL;118 67 surface_coord_t w, h; 119 68 gfx_rect_t rect; … … 129 78 } 130 79 131 rc = gfx_context_new(&canvas_gc_ops, cgc, &gc);132 if (rc != EOK)133 goto error;134 135 80 rect.p0.x = 0; 136 81 rect.p0.y = 0; … … 142 87 alloc.pixels = surface_direct_access(surface); 143 88 144 rc = mem_gc_create(&rect, &alloc, &cgc->mgc); 89 rc = mem_gc_create(&rect, &alloc, canvas_gc_update_cb, 90 (void *)cgc, &cgc->mgc); 145 91 if (rc != EOK) 146 92 goto error; 147 93 148 cgc-> mbgc = mem_gc_get_ctx(cgc->mgc);94 cgc->gc = mem_gc_get_ctx(cgc->mgc); 149 95 150 cgc->gc = gc;151 96 cgc->canvas = canvas; 152 97 cgc->surface = surface; … … 154 99 return EOK; 155 100 error: 156 if (gc != NULL)157 gfx_context_delete(gc);158 101 if (cgc != NULL) 159 102 free(cgc); … … 189 132 } 190 133 191 /** C reate bitmap in canvasGC.134 /** Canvas GC update callback called by memory GC. 192 135 * 193 136 * @param arg Canvas GC 194 * @param params Bitmap params 195 * @param alloc Bitmap allocation info or @c NULL 196 * @param rbm Place to store pointer to new bitmap 197 * @return EOK on success or an error code 137 * @param rect Rectangle to update 198 138 */ 199 errno_t canvas_gc_bitmap_create(void *arg, gfx_bitmap_params_t *params, 200 gfx_bitmap_alloc_t *alloc, void **rbm) 139 static void canvas_gc_update_cb(void *arg, gfx_rect_t *rect) 201 140 { 202 canvas_gc_t *cgc = (canvas_gc_t *) arg; 203 canvas_gc_bitmap_t *cbm = NULL; 204 errno_t rc; 141 canvas_gc_t *cgc = (canvas_gc_t *)arg; 205 142 206 cbm = calloc(1, sizeof(canvas_gc_bitmap_t)); 207 if (cbm == NULL) 208 return ENOMEM; 209 210 rc = gfx_bitmap_create(cgc->mbgc, params, alloc, &cbm->mbitmap); 211 if (rc != EOK) 212 goto error; 213 214 cbm->cgc = cgc; 215 *rbm = (void *)cbm; 216 return EOK; 217 error: 218 if (cbm != NULL) 219 free(cbm); 220 return rc; 221 } 222 223 /** Destroy bitmap in canvas GC. 224 * 225 * @param bm Bitmap 226 * @return EOK on success or an error code 227 */ 228 static errno_t canvas_gc_bitmap_destroy(void *bm) 229 { 230 canvas_gc_bitmap_t *cbm = (canvas_gc_bitmap_t *)bm; 231 errno_t rc; 232 233 rc = gfx_bitmap_destroy(cbm->mbitmap); 234 if (rc != EOK) 235 return rc; 236 237 free(cbm); 238 return EOK; 239 } 240 241 /** Render bitmap in canvas GC. 242 * 243 * @param bm Bitmap 244 * @param srect0 Source rectangle or @c NULL 245 * @param offs0 Offset or @c NULL 246 * @return EOK on success or an error code 247 */ 248 static errno_t canvas_gc_bitmap_render(void *bm, gfx_rect_t *srect0, 249 gfx_coord2_t *offs0) 250 { 251 canvas_gc_bitmap_t *cbm = (canvas_gc_bitmap_t *)bm; 252 errno_t rc; 253 254 rc = gfx_bitmap_render(cbm->mbitmap, srect0, offs0); 255 if (rc == EOK) 256 update_canvas(cbm->cgc->canvas, cbm->cgc->surface); 257 258 return rc; 259 } 260 261 /** Get allocation info for bitmap in canvas GC. 262 * 263 * @param bm Bitmap 264 * @param alloc Place to store allocation info 265 * @return EOK on success or an error code 266 */ 267 static errno_t canvas_gc_bitmap_get_alloc(void *bm, gfx_bitmap_alloc_t *alloc) 268 { 269 canvas_gc_bitmap_t *cbm = (canvas_gc_bitmap_t *)bm; 270 271 return gfx_bitmap_get_alloc(cbm->mbitmap, alloc); 143 update_canvas(cgc->canvas, cgc->surface); 272 144 } 273 145
Note:
See TracChangeset
for help on using the changeset viewer.