Changeset c9927c66 in mainline for uspace/lib/display
- Timestamp:
- 2021-06-10T13:22:33Z (4 years ago)
- Branches:
- master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9e84d2c
- Parents:
- c68c18b9
- git-author:
- Jiri Svoboda <jiri@…> (2021-05-27 17:00:30)
- git-committer:
- jxsvoboda <5887334+jxsvoboda@…> (2021-06-10 13:22:33)
- Location:
- uspace/lib/display
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/display/include/disp_srv.h
rc68c18b9 rc9927c66 1 1 /* 2 * Copyright (c) 20 19Jiri Svoboda2 * Copyright (c) 2021 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 61 61 gfx_coord2_t *); 62 62 errno_t (*window_move)(void *, sysarg_t, gfx_coord2_t *); 63 errno_t (*window_get_pos)(void *, sysarg_t, gfx_coord2_t *); 63 64 errno_t (*window_resize)(void *, sysarg_t, gfx_coord2_t *, gfx_rect_t *); 64 65 errno_t (*window_set_cursor)(void *, sysarg_t, display_stock_cursor_t); -
uspace/lib/display/include/display.h
rc68c18b9 rc9927c66 1 1 /* 2 * Copyright (c) 20 19Jiri Svoboda2 * Copyright (c) 2021 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 58 58 display_wnd_rsztype_t, gfx_coord2_t *); 59 59 extern errno_t display_window_move(display_window_t *, gfx_coord2_t *); 60 extern errno_t display_window_get_pos(display_window_t *, gfx_coord2_t *); 60 61 extern errno_t display_window_resize(display_window_t *, 61 62 gfx_coord2_t *, gfx_rect_t *); -
uspace/lib/display/include/ipc/display.h
rc68c18b9 rc9927c66 1 1 /* 2 * Copyright (c) 20 19Jiri Svoboda2 * Copyright (c) 2021 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 44 44 DISPLAY_WINDOW_MOVE, 45 45 DISPLAY_WINDOW_MOVE_REQ, 46 DISPLAY_WINDOW_GET_POS, 46 47 DISPLAY_WINDOW_RESIZE, 47 48 DISPLAY_WINDOW_RESIZE_REQ, -
uspace/lib/display/src/disp_srv.c
rc68c18b9 rc9927c66 1 1 /* 2 * Copyright (c) 20 19Jiri Svoboda2 * Copyright (c) 2021 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 187 187 } 188 188 189 static void display_window_get_pos_srv(display_srv_t *srv, ipc_call_t *icall) 190 { 191 sysarg_t wnd_id; 192 ipc_call_t call; 193 gfx_coord2_t dpos; 194 size_t size; 195 errno_t rc; 196 197 wnd_id = ipc_get_arg1(icall); 198 199 if (srv->ops->window_get_pos == NULL) { 200 async_answer_0(icall, ENOTSUP); 201 return; 202 } 203 204 if (!async_data_read_receive(&call, &size)) { 205 async_answer_0(icall, EREFUSED); 206 return; 207 } 208 209 rc = srv->ops->window_get_pos(srv->arg, wnd_id, &dpos); 210 if (rc != EOK) { 211 async_answer_0(&call, rc); 212 async_answer_0(icall, rc); 213 return; 214 } 215 216 if (size != sizeof(gfx_coord2_t)) { 217 async_answer_0(&call, EINVAL); 218 async_answer_0(icall, EINVAL); 219 return; 220 } 221 222 rc = async_data_read_finalize(&call, &dpos, size); 223 if (rc != EOK) { 224 async_answer_0(&call, rc); 225 async_answer_0(icall, rc); 226 return; 227 } 228 229 async_answer_0(icall, EOK); 230 } 231 189 232 static void display_window_resize_req_srv(display_srv_t *srv, ipc_call_t *icall) 190 233 { … … 398 441 case DISPLAY_WINDOW_MOVE: 399 442 display_window_move_srv(srv, &call); 443 break; 444 case DISPLAY_WINDOW_GET_POS: 445 display_window_get_pos_srv(srv, &call); 400 446 break; 401 447 case DISPLAY_WINDOW_RESIZE_REQ: -
uspace/lib/display/src/display.c
rc68c18b9 rc9927c66 1 1 /* 2 * Copyright (c) 20 19Jiri Svoboda2 * Copyright (c) 2021 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 319 319 } 320 320 321 /** Get display window position. 322 * 323 * Get display window position on the display. 324 * 325 * @param window Window 326 * @param dpos Place to store position 327 * @return EOK on success or an error code 328 */ 329 errno_t display_window_get_pos(display_window_t *window, gfx_coord2_t *dpos) 330 { 331 async_exch_t *exch; 332 aid_t req; 333 ipc_call_t answer; 334 errno_t rc; 335 336 exch = async_exchange_begin(window->display->sess); 337 req = async_send_1(exch, DISPLAY_WINDOW_GET_POS, window->id, &answer); 338 rc = async_data_read_start(exch, dpos, sizeof (gfx_coord2_t)); 339 async_exchange_end(exch); 340 if (rc != EOK) { 341 async_forget(req); 342 return rc; 343 } 344 345 async_wait_for(req, &rc); 346 if (rc != EOK) 347 return rc; 348 349 return EOK; 350 } 351 321 352 /** Request a window resize. 322 353 * -
uspace/lib/display/test/display.c
rc68c18b9 rc9927c66 1 1 /* 2 * Copyright (c) 20 19Jiri Svoboda2 * Copyright (c) 2021 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 59 59 static errno_t test_window_move_req(void *, sysarg_t, gfx_coord2_t *); 60 60 static errno_t test_window_move(void *, sysarg_t, gfx_coord2_t *); 61 static errno_t test_window_get_pos(void *, sysarg_t, gfx_coord2_t *); 61 62 static errno_t test_window_resize_req(void *, sysarg_t, display_wnd_rsztype_t, 62 63 gfx_coord2_t *); … … 74 75 .window_move_req = test_window_move_req, 75 76 .window_move = test_window_move, 77 .window_get_pos = test_window_get_pos, 76 78 .window_resize_req = test_window_resize_req, 77 79 .window_resize = test_window_resize, … … 115 117 sysarg_t move_wnd_id; 116 118 gfx_coord2_t move_dpos; 119 120 bool window_get_pos_called; 121 sysarg_t get_pos_wnd_id; 122 gfx_coord2_t get_pos_rpos; 117 123 118 124 bool window_resize_req_called; … … 556 562 } 557 563 564 /** display_window_get_pos() with server returning error response works. */ 565 PCUT_TEST(window_get_pos_failure) 566 { 567 errno_t rc; 568 service_id_t sid; 569 display_t *disp = NULL; 570 display_wnd_params_t params; 571 display_window_t *wnd; 572 gfx_coord2_t dpos; 573 test_response_t resp; 574 575 async_set_fallback_port_handler(test_display_conn, &resp); 576 577 // FIXME This causes this test to be non-reentrant! 578 rc = loc_server_register(test_display_server); 579 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 580 581 rc = loc_service_register(test_display_svc, &sid); 582 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 583 584 rc = display_open(test_display_svc, &disp); 585 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 586 PCUT_ASSERT_NOT_NULL(disp); 587 588 resp.rc = EOK; 589 display_wnd_params_init(¶ms); 590 params.rect.p0.x = 0; 591 params.rect.p0.y = 0; 592 params.rect.p0.x = 100; 593 params.rect.p0.y = 100; 594 595 rc = display_window_create(disp, ¶ms, &test_display_wnd_cb, 596 (void *) &resp, &wnd); 597 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 598 PCUT_ASSERT_NOT_NULL(wnd); 599 600 resp.rc = EIO; 601 resp.window_get_pos_called = false; 602 603 dpos.x = 0; 604 dpos.y = 0; 605 606 rc = display_window_get_pos(wnd, &dpos); 607 PCUT_ASSERT_TRUE(resp.window_get_pos_called); 608 PCUT_ASSERT_ERRNO_VAL(resp.rc, rc); 609 PCUT_ASSERT_INT_EQUALS(wnd->id, resp.get_pos_wnd_id); 610 PCUT_ASSERT_INT_EQUALS(0, dpos.x); 611 PCUT_ASSERT_INT_EQUALS(0, dpos.y); 612 613 display_window_destroy(wnd); 614 display_close(disp); 615 rc = loc_service_unregister(sid); 616 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 617 } 618 619 /** display_window_get_pos() with server returning success response works. */ 620 PCUT_TEST(window_get_pos_success) 621 { 622 errno_t rc; 623 service_id_t sid; 624 display_t *disp = NULL; 625 display_wnd_params_t params; 626 display_window_t *wnd; 627 gfx_coord2_t dpos; 628 test_response_t resp; 629 630 async_set_fallback_port_handler(test_display_conn, &resp); 631 632 // FIXME This causes this test to be non-reentrant! 633 rc = loc_server_register(test_display_server); 634 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 635 636 rc = loc_service_register(test_display_svc, &sid); 637 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 638 639 rc = display_open(test_display_svc, &disp); 640 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 641 PCUT_ASSERT_NOT_NULL(disp); 642 643 resp.rc = EOK; 644 display_wnd_params_init(¶ms); 645 params.rect.p0.x = 0; 646 params.rect.p0.y = 0; 647 params.rect.p0.x = 100; 648 params.rect.p0.y = 100; 649 650 rc = display_window_create(disp, ¶ms, &test_display_wnd_cb, 651 (void *) &resp, &wnd); 652 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 653 PCUT_ASSERT_NOT_NULL(wnd); 654 655 resp.rc = EOK; 656 resp.window_get_pos_called = false; 657 resp.get_pos_rpos.x = 11; 658 resp.get_pos_rpos.y = 12; 659 660 dpos.x = 0; 661 dpos.y = 0; 662 663 rc = display_window_get_pos(wnd, &dpos); 664 PCUT_ASSERT_TRUE(resp.window_get_pos_called); 665 PCUT_ASSERT_ERRNO_VAL(resp.rc, rc); 666 PCUT_ASSERT_INT_EQUALS(wnd->id, resp.get_pos_wnd_id); 667 PCUT_ASSERT_INT_EQUALS(resp.get_pos_rpos.x, dpos.x); 668 PCUT_ASSERT_INT_EQUALS(resp.get_pos_rpos.y, dpos.y); 669 670 display_window_destroy(wnd); 671 display_close(disp); 672 rc = loc_service_unregister(sid); 673 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 674 } 675 558 676 /** display_window_resize_req() with server returning error response works. */ 559 677 PCUT_TEST(window_resize_req_failure) … … 937 1055 resp.rc = ENOMEM; 938 1056 rc = display_window_get_gc(wnd, &gc); 939 /* async_connect_me_to() does not return specific error */ 940 PCUT_ASSERT_ERRNO_VAL(EIO, rc); 1057 PCUT_ASSERT_ERRNO_VAL(resp.rc, rc); 941 1058 PCUT_ASSERT_NULL(gc); 942 1059 … … 1589 1706 } 1590 1707 1708 static errno_t test_window_get_pos(void *arg, sysarg_t wnd_id, gfx_coord2_t *dpos) 1709 { 1710 test_response_t *resp = (test_response_t *) arg; 1711 1712 resp->window_get_pos_called = true; 1713 resp->get_pos_wnd_id = wnd_id; 1714 1715 if (resp->rc == EOK) 1716 *dpos = resp->get_pos_rpos; 1717 1718 return resp->rc; 1719 } 1720 1591 1721 static errno_t test_window_resize_req(void *arg, sysarg_t wnd_id, 1592 1722 display_wnd_rsztype_t rsztype, gfx_coord2_t *pos)
Note:
See TracChangeset
for help on using the changeset viewer.