Changes in uspace/srv/hid/rfb/main.c [0d62c10:4c6fd56] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/rfb/main.c
r0d62c10 r4c6fd56 1 1 /* 2 * Copyright (c) 2023 Jiri Svoboda 2 3 * Copyright (c) 2013 Martin Sucha 3 4 * All rights reserved. … … 50 51 static errno_t rfb_ddev_get_info(void *, ddev_info_t *); 51 52 53 static errno_t rfb_gc_set_clip_rect(void *, gfx_rect_t *); 52 54 static errno_t rfb_gc_set_color(void *, gfx_color_t *); 53 55 static errno_t rfb_gc_fill_rect(void *, gfx_rect_t *); … … 66 68 rfb_t rfb; 67 69 pixel_t color; 70 gfx_rect_t rect; 71 gfx_rect_t clip_rect; 68 72 } rfb_gc_t; 69 73 … … 78 82 79 83 static gfx_context_ops_t rfb_gc_ops = { 84 .set_clip_rect = rfb_gc_set_clip_rect, 80 85 .set_color = rfb_gc_set_color, 81 86 .fill_rect = rfb_gc_fill_rect, … … 134 139 } 135 140 141 /** Create RFB GC. 142 * 143 * @param rrgb Place to store pointer to new RFB GC 144 * @return EOK on success, ENOMEM if out of memory 145 */ 146 static errno_t rgb_gc_create(rfb_gc_t **rrfb) 147 { 148 rfb_gc_t *rfb; 149 150 rfb = calloc(1, sizeof(rfb_gc_t)); 151 if (rfb == NULL) 152 return ENOMEM; 153 154 *rrfb = rfb; 155 return EOK; 156 } 157 158 /** Destroy RFB GC. 159 * 160 * @param rfb RFB GC 161 */ 162 static void rfb_gc_destroy(rfb_gc_t *rfb) 163 { 164 free(rfb); 165 } 166 167 /** Set clipping rectangle on RFB. 168 * 169 * @param arg RFB 170 * @param rect Rectangle or @c NULL 171 * 172 * @return EOK on success or an error code 173 */ 174 static errno_t rfb_gc_set_clip_rect(void *arg, gfx_rect_t *rect) 175 { 176 rfb_gc_t *rfb = (rfb_gc_t *) arg; 177 178 if (rect != NULL) 179 gfx_rect_clip(rect, &rfb->rect, &rfb->clip_rect); 180 else 181 rfb->clip_rect = rfb->rect; 182 183 return EOK; 184 } 185 136 186 /** Set color on RFB. 137 187 * … … 163 213 { 164 214 rfb_gc_t *rfb = (rfb_gc_t *) arg; 215 gfx_rect_t crect; 165 216 gfx_coord_t x, y; 166 217 167 // XXX We should handle p0.x > p1.x and p0.y > p1.y168 169 for (y = rect->p0.y; y < rect->p1.y; y++) {170 for (x = rect->p0.x; x < rect->p1.x; x++) {218 gfx_rect_clip(rect, &rfb->clip_rect, &crect); 219 220 for (y = crect.p0.y; y < crect.p1.y; y++) { 221 for (x = crect.p0.x; x < crect.p1.x; x++) { 171 222 pixelmap_put_pixel(&rfb->rfb.framebuffer, x, y, 172 223 rfb->color); … … 174 225 } 175 226 176 rfb_gc_invalidate_rect(rfb, rect);227 rfb_gc_invalidate_rect(rfb, &crect); 177 228 178 229 return EOK; … … 258 309 gfx_rect_t srect; 259 310 gfx_rect_t drect; 311 gfx_rect_t crect; 260 312 gfx_coord2_t offs; 261 313 gfx_coord2_t bmdim; … … 279 331 /* Destination rectangle */ 280 332 gfx_rect_translate(&offs, &srect, &drect); 281 gfx_coord2_subtract(&drect.p1, &drect.p0, &dim); 333 gfx_rect_clip(&drect, &rfbbm->rfb->clip_rect, &crect); 334 gfx_coord2_subtract(&crect.p1, &crect.p0, &dim); 282 335 gfx_coord2_subtract(&rfbbm->rect.p1, &rfbbm->rect.p0, &bmdim); 283 336 … … 320 373 } 321 374 322 rfb_gc_invalidate_rect(rfbbm->rfb, & drect);375 rfb_gc_invalidate_rect(rfbbm->rfb, &crect); 323 376 324 377 return EOK; … … 346 399 { 347 400 rfb_t *rfb = (rfb_t *) arg; 401 rfb_gc_t *rfbgc; 348 402 ddev_srv_t srv; 349 403 sysarg_t svc_id; … … 362 416 ddev_conn(icall, &srv); 363 417 } else { 364 rc = gfx_context_new(&rfb_gc_ops, (void *) rfb, &gc);418 rc = rgb_gc_create(&rfbgc); 365 419 if (rc != EOK) { 366 420 async_answer_0(icall, ENOMEM); … … 368 422 } 369 423 424 rfbgc->rect.p0.x = 0; 425 rfbgc->rect.p0.y = 0; 426 rfbgc->rect.p1.x = rfb->width; 427 rfbgc->rect.p1.y = rfb->height; 428 rfbgc->clip_rect = rfbgc->rect; 429 430 rc = gfx_context_new(&rfb_gc_ops, (void *) rfbgc, &gc); 431 if (rc != EOK) { 432 rfb_gc_destroy(rfbgc); 433 async_answer_0(icall, ENOMEM); 434 return; 435 } 436 370 437 /* GC connection */ 371 438 gc_conn(icall, gc); … … 376 443 { 377 444 rfb_t rfb; 445 loc_srv_t *srv; 378 446 379 447 log_init(NAME); … … 415 483 async_set_fallback_port_handler(client_connection, &rfb); 416 484 417 errno_t rc = loc_server_register(NAME );485 errno_t rc = loc_server_register(NAME, &srv); 418 486 if (rc != EOK) { 419 487 printf("%s: Unable to register server.\n", NAME); … … 430 498 service_id_t service_id; 431 499 432 rc = loc_service_register(s ervice_name, &service_id);500 rc = loc_service_register(srv, service_name, &service_id); 433 501 if (rc != EOK) { 434 502 printf(NAME ": Unable to register service %s.\n", service_name); … … 445 513 } 446 514 447 rc = loc_service_add_to_cat(s ervice_id, ddev_cid);515 rc = loc_service_add_to_cat(srv, service_id, ddev_cid); 448 516 if (rc != EOK) { 449 517 fprintf(stderr, NAME ": Unable to add service to display device category.\n");
Note:
See TracChangeset
for help on using the changeset viewer.