Changeset 06176e1 in mainline
- Timestamp:
- 2022-12-20T12:31:44Z (2 years ago)
- Branches:
- master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4e7b0ad
- Parents:
- d46ac73
- git-author:
- Jiri Svoboda <jiri@…> (2022-12-19 18:31:30)
- git-committer:
- Jiri Svoboda <jiri@…> (2022-12-20 12:31:44)
- Location:
- uspace
- Files:
-
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/uidemo/uidemo.c
rd46ac73 r06176e1 609 609 ui_wnd_params_init(¶ms); 610 610 params.caption = "UI Demo"; 611 params.style |= ui_wds_maximize_btn | ui_wds_resizable; 611 params.style |= ui_wds_minimize_btn | ui_wds_maximize_btn | 612 ui_wds_resizable; 612 613 613 614 /* FIXME: Auto layout */ -
uspace/lib/display/include/disp_srv.h
rd46ac73 r06176e1 64 64 errno_t (*window_get_max_rect)(void *, sysarg_t, gfx_rect_t *); 65 65 errno_t (*window_resize)(void *, sysarg_t, gfx_coord2_t *, gfx_rect_t *); 66 errno_t (*window_minimize)(void *, sysarg_t); 66 67 errno_t (*window_maximize)(void *, sysarg_t); 67 68 errno_t (*window_unmaximize)(void *, sysarg_t); -
uspace/lib/display/include/display.h
rd46ac73 r06176e1 62 62 extern errno_t display_window_resize(display_window_t *, 63 63 gfx_coord2_t *, gfx_rect_t *); 64 extern errno_t display_window_minimize(display_window_t *); 64 65 extern errno_t display_window_maximize(display_window_t *); 65 66 extern errno_t display_window_unmaximize(display_window_t *); -
uspace/lib/display/include/ipc/display.h
rd46ac73 r06176e1 42 42 DISPLAY_WINDOW_CREATE, 43 43 DISPLAY_WINDOW_DESTROY, 44 DISPLAY_WINDOW_MINIMIZE, 44 45 DISPLAY_WINDOW_MAXIMIZE, 45 46 DISPLAY_WINDOW_MOVE, -
uspace/lib/display/include/types/display/wndparams.h
rd46ac73 r06176e1 46 46 /** Set specific initial window position */ 47 47 wndf_setpos = 0x4, 48 /** Window is minimized */ 49 wndf_minimized = 0x8, 48 50 /** Window is maximized */ 49 wndf_maximized = 0x 8,51 wndf_maximized = 0x10, 50 52 /** Special system window */ 51 wndf_system = 0x 10,53 wndf_system = 0x20, 52 54 /** Maximized windows should avoid this window */ 53 wndf_avoid = 0x 2055 wndf_avoid = 0x40 54 56 } display_wnd_flags_t; 55 57 -
uspace/lib/display/src/disp_srv.c
rd46ac73 r06176e1 391 391 } 392 392 393 static void display_window_minimize_srv(display_srv_t *srv, ipc_call_t *icall) 394 { 395 sysarg_t wnd_id; 396 errno_t rc; 397 398 wnd_id = ipc_get_arg1(icall); 399 400 if (srv->ops->window_minimize == NULL) { 401 async_answer_0(icall, ENOTSUP); 402 return; 403 } 404 405 rc = srv->ops->window_minimize(srv->arg, wnd_id); 406 async_answer_0(icall, rc); 407 } 408 393 409 static void display_window_maximize_srv(display_srv_t *srv, ipc_call_t *icall) 394 410 { … … 610 626 case DISPLAY_WINDOW_RESIZE: 611 627 display_window_resize_srv(srv, &call); 628 break; 629 case DISPLAY_WINDOW_MINIMIZE: 630 display_window_minimize_srv(srv, &call); 612 631 break; 613 632 case DISPLAY_WINDOW_MAXIMIZE: -
uspace/lib/display/src/display.c
rd46ac73 r06176e1 508 508 509 509 return EOK; 510 } 511 512 /** Minimize window. 513 * 514 * @param window Window 515 * @return EOK on success or an error code 516 */ 517 errno_t display_window_minimize(display_window_t *window) 518 { 519 async_exch_t *exch; 520 errno_t rc; 521 522 exch = async_exchange_begin(window->display->sess); 523 rc = async_req_1_0(exch, DISPLAY_WINDOW_MINIMIZE, window->id); 524 async_exchange_end(exch); 525 526 return rc; 510 527 } 511 528 -
uspace/lib/display/test/display.c
rd46ac73 r06176e1 66 66 static errno_t test_window_resize(void *, sysarg_t, gfx_coord2_t *, 67 67 gfx_rect_t *); 68 static errno_t test_window_minimize(void *, sysarg_t); 68 69 static errno_t test_window_maximize(void *, sysarg_t); 69 70 static errno_t test_window_unmaximize(void *, sysarg_t); … … 84 85 .window_resize_req = test_window_resize_req, 85 86 .window_resize = test_window_resize, 87 .window_minimize = test_window_minimize, 86 88 .window_maximize = test_window_maximize, 87 89 .window_unmaximize = test_window_unmaximize, … … 145 147 sysarg_t resize_wnd_id; 146 148 149 bool window_minimize_called; 147 150 bool window_maximize_called; 148 151 bool window_unmaximize_called; … … 1050 1053 PCUT_ASSERT_INT_EQUALS(nrect.p1.x, resp.resize_nbound.p1.x); 1051 1054 PCUT_ASSERT_INT_EQUALS(nrect.p1.y, resp.resize_nbound.p1.y); 1055 1056 display_window_destroy(wnd); 1057 display_close(disp); 1058 rc = loc_service_unregister(sid); 1059 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 1060 } 1061 1062 /** display_window_minimize() with server returning error response works. */ 1063 PCUT_TEST(window_minimize_failure) 1064 { 1065 errno_t rc; 1066 service_id_t sid; 1067 display_t *disp = NULL; 1068 display_wnd_params_t params; 1069 display_window_t *wnd; 1070 test_response_t resp; 1071 1072 async_set_fallback_port_handler(test_display_conn, &resp); 1073 1074 // FIXME This causes this test to be non-reentrant! 1075 rc = loc_server_register(test_display_server); 1076 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 1077 1078 rc = loc_service_register(test_display_svc, &sid); 1079 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 1080 1081 rc = display_open(test_display_svc, &disp); 1082 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 1083 PCUT_ASSERT_NOT_NULL(disp); 1084 1085 resp.rc = EOK; 1086 display_wnd_params_init(¶ms); 1087 params.rect.p0.x = 0; 1088 params.rect.p0.y = 0; 1089 params.rect.p0.x = 100; 1090 params.rect.p0.y = 100; 1091 1092 rc = display_window_create(disp, ¶ms, &test_display_wnd_cb, 1093 (void *) &resp, &wnd); 1094 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 1095 PCUT_ASSERT_NOT_NULL(wnd); 1096 1097 resp.rc = EIO; 1098 resp.window_minimize_called = false; 1099 1100 rc = display_window_minimize(wnd); 1101 PCUT_ASSERT_TRUE(resp.window_minimize_called); 1102 PCUT_ASSERT_ERRNO_VAL(resp.rc, rc); 1103 1104 display_window_destroy(wnd); 1105 display_close(disp); 1106 rc = loc_service_unregister(sid); 1107 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 1108 } 1109 1110 /** display_window_minimize() with server returning success response works. */ 1111 PCUT_TEST(window_minimize_success) 1112 { 1113 errno_t rc; 1114 service_id_t sid; 1115 display_t *disp = NULL; 1116 display_wnd_params_t params; 1117 display_window_t *wnd; 1118 test_response_t resp; 1119 1120 async_set_fallback_port_handler(test_display_conn, &resp); 1121 1122 // FIXME This causes this test to be non-reentrant! 1123 rc = loc_server_register(test_display_server); 1124 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 1125 1126 rc = loc_service_register(test_display_svc, &sid); 1127 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 1128 1129 rc = display_open(test_display_svc, &disp); 1130 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 1131 PCUT_ASSERT_NOT_NULL(disp); 1132 1133 resp.rc = EOK; 1134 display_wnd_params_init(¶ms); 1135 params.rect.p0.x = 0; 1136 params.rect.p0.y = 0; 1137 params.rect.p0.x = 100; 1138 params.rect.p0.y = 100; 1139 1140 rc = display_window_create(disp, ¶ms, &test_display_wnd_cb, 1141 (void *) &resp, &wnd); 1142 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 1143 PCUT_ASSERT_NOT_NULL(wnd); 1144 1145 resp.rc = EOK; 1146 resp.window_minimize_called = false; 1147 1148 rc = display_window_minimize(wnd); 1149 PCUT_ASSERT_TRUE(resp.window_minimize_called); 1150 PCUT_ASSERT_ERRNO_VAL(resp.rc, rc); 1052 1151 1053 1152 display_window_destroy(wnd); … … 2103 2202 } 2104 2203 2204 static errno_t test_window_minimize(void *arg, sysarg_t wnd_id) 2205 { 2206 test_response_t *resp = (test_response_t *) arg; 2207 2208 resp->window_minimize_called = true; 2209 resp->resize_wnd_id = wnd_id; 2210 return resp->rc; 2211 } 2212 2105 2213 static errno_t test_window_maximize(void *arg, sysarg_t wnd_id) 2106 2214 { -
uspace/lib/ui/include/types/ui/wdecor.h
rd46ac73 r06176e1 51 51 /** Window has a title bar */ 52 52 ui_wds_titlebar = 0x2, 53 /** Window has a minimize button */ 54 ui_wds_minimize_btn = 0x4, 53 55 /** Window has a maximize button */ 54 ui_wds_maximize_btn = 0x 4,56 ui_wds_maximize_btn = 0x8, 55 57 /** Window has a close button */ 56 ui_wds_close_btn = 0x 8,58 ui_wds_close_btn = 0x10, 57 59 /** Window is resizable */ 58 ui_wds_resizable = 0x 10,60 ui_wds_resizable = 0x20, 59 61 /** Window is decorated (default decoration) */ 60 62 ui_wds_decorated = ui_wds_frame | ui_wds_titlebar | ui_wds_close_btn … … 78 80 /** Window decoration callbacks */ 79 81 typedef struct ui_wdecor_cb { 82 void (*minimize)(ui_wdecor_t *, void *); 80 83 void (*maximize)(ui_wdecor_t *, void *); 81 84 void (*unmaximize)(ui_wdecor_t *, void *); -
uspace/lib/ui/include/types/ui/window.h
rd46ac73 r06176e1 93 93 /** Window callbacks */ 94 94 typedef struct ui_window_cb { 95 void (*minimize)(ui_window_t *, void *); 95 96 void (*maximize)(ui_window_t *, void *); 96 97 void (*unmaximize)(ui_window_t *, void *); -
uspace/lib/ui/include/ui/paint.h
rd46ac73 r06176e1 65 65 extern errno_t ui_paint_cross(gfx_context_t *, gfx_coord2_t *, gfx_coord_t, 66 66 gfx_coord_t, gfx_coord_t); 67 extern errno_t ui_paint_minicon(ui_resource_t *, gfx_coord2_t *, gfx_coord_t, 68 gfx_coord_t); 67 69 extern errno_t ui_paint_maxicon(ui_resource_t *, gfx_coord2_t *, gfx_coord_t, 68 70 gfx_coord_t); -
uspace/lib/ui/include/ui/window.h
rd46ac73 r06176e1 65 65 extern void ui_window_set_ctl_cursor(ui_window_t *, ui_stock_cursor_t); 66 66 extern errno_t ui_window_paint(ui_window_t *); 67 extern errno_t ui_window_def_minimize(ui_window_t *); 67 68 extern errno_t ui_window_def_maximize(ui_window_t *); 68 69 extern errno_t ui_window_def_unmaximize(ui_window_t *); -
uspace/lib/ui/private/wdecor.h
rd46ac73 r06176e1 65 65 /** Window is maximized */ 66 66 bool maximized; 67 /** Minimize button */ 68 struct ui_pbutton *btn_min; 67 69 /** Maximize button */ 68 70 struct ui_pbutton *btn_max; … … 82 84 /** Window caption rectangle */ 83 85 gfx_rect_t caption_rect; 86 /** Minimize button rectangle */ 87 gfx_rect_t btn_min_rect; 84 88 /** Maximize button rectangle */ 85 89 gfx_rect_t btn_max_rect; … … 90 94 } ui_wdecor_geom_t; 91 95 96 extern void ui_wdecor_minimize(ui_wdecor_t *); 92 97 extern void ui_wdecor_maximize(ui_wdecor_t *); 93 98 extern void ui_wdecor_unmaximize(ui_wdecor_t *); -
uspace/lib/ui/private/window.h
rd46ac73 r06176e1 112 112 113 113 extern display_stock_cursor_t wnd_dcursor_from_cursor(ui_stock_cursor_t); 114 extern void ui_window_send_minimize(ui_window_t *); 114 115 extern void ui_window_send_maximize(ui_window_t *); 115 116 extern void ui_window_send_unmaximize(ui_window_t *); -
uspace/lib/ui/src/paint.c
rd46ac73 r06176e1 529 529 } 530 530 531 /** Paint minimize icon. 532 * 533 * @param resource UI resource 534 * @param pos Center position 535 * @param w Icon width 536 * @param h Icon height 537 * @return EOK on success or an error code 538 */ 539 errno_t ui_paint_minicon(ui_resource_t *resource, gfx_coord2_t *pos, 540 gfx_coord_t w, gfx_coord_t h) 541 { 542 gfx_rect_t rect; 543 errno_t rc; 544 545 rc = gfx_set_color(resource->gc, resource->btn_text_color); 546 if (rc != EOK) 547 return rc; 548 549 rect.p0.x = pos->x - w / 2; 550 rect.p0.y = pos->y + h / 2 - 2; 551 rect.p1.x = rect.p0.x + w; 552 rect.p1.y = rect.p0.y + 2; 553 rc = gfx_fill_rect(resource->gc, &rect); 554 if (rc != EOK) 555 return rc; 556 557 return EOK; 558 } 559 531 560 /** Paint maximize icon. 532 561 * -
uspace/lib/ui/src/wdecor.c
rd46ac73 r06176e1 49 49 #include "../private/wdecor.h" 50 50 51 static void ui_wdecor_btn_min_clicked(ui_pbutton_t *, void *); 52 static errno_t ui_wdecor_btn_min_paint(ui_pbutton_t *, void *, 53 gfx_coord2_t *); 54 51 55 static void ui_wdecor_btn_max_clicked(ui_pbutton_t *, void *); 52 56 static errno_t ui_wdecor_btn_max_paint(ui_pbutton_t *, void *, … … 56 60 static errno_t ui_wdecor_btn_close_paint(ui_pbutton_t *, void *, 57 61 gfx_coord2_t *); 62 63 static ui_pbutton_cb_t ui_wdecor_btn_min_cb = { 64 .clicked = ui_wdecor_btn_min_clicked 65 }; 66 67 static ui_pbutton_decor_ops_t ui_wdecor_btn_min_decor_ops = { 68 .paint = ui_wdecor_btn_min_paint 69 }; 58 70 59 71 static ui_pbutton_cb_t ui_wdecor_btn_max_cb = { … … 98 110 /** Close button cross pen height */ 99 111 wdecor_close_cross_h = 1, 112 /** Minimize icon width */ 113 wdecor_min_w = 10, 114 /** Minimize icon height */ 115 wdecor_min_h = 10, 100 116 /** Maximize icon width */ 101 117 wdecor_max_w = 10, … … 136 152 } 137 153 154 if ((style & ui_wds_minimize_btn) != 0) { 155 rc = ui_pbutton_create(resource, "_", &wdecor->btn_min); 156 if (rc != EOK) { 157 ui_wdecor_destroy(wdecor); 158 return rc; 159 } 160 161 ui_pbutton_set_cb(wdecor->btn_min, &ui_wdecor_btn_min_cb, 162 (void *)wdecor); 163 164 ui_pbutton_set_decor_ops(wdecor->btn_min, 165 &ui_wdecor_btn_min_decor_ops, (void *)wdecor); 166 } 167 138 168 if ((style & ui_wds_maximize_btn) != 0) { 139 169 rc = ui_pbutton_create(resource, "^", &wdecor->btn_max); … … 180 210 return; 181 211 212 ui_pbutton_destroy(wdecor->btn_min); 182 213 ui_pbutton_destroy(wdecor->btn_max); 183 214 ui_pbutton_destroy(wdecor->btn_close); … … 211 242 ui_wdecor_get_geom(wdecor, &geom); 212 243 244 if (wdecor->btn_min != NULL) 245 ui_pbutton_set_rect(wdecor->btn_min, &geom.btn_min_rect); 213 246 if (wdecor->btn_max != NULL) 214 247 ui_pbutton_set_rect(wdecor->btn_max, &geom.btn_max_rect); … … 362 395 return rc; 363 396 397 if (wdecor->btn_min != NULL) { 398 rc = ui_pbutton_paint(wdecor->btn_min); 399 if (rc != EOK) 400 return rc; 401 } 402 364 403 if (wdecor->btn_max != NULL) { 365 404 rc = ui_pbutton_paint(wdecor->btn_max); … … 380 419 381 420 return EOK; 421 } 422 423 /** Send decoration minimize event. 424 * 425 * @param wdecor Window decoration 426 */ 427 void ui_wdecor_minimize(ui_wdecor_t *wdecor) 428 { 429 if (wdecor->cb != NULL && wdecor->cb->minimize != NULL) 430 wdecor->cb->minimize(wdecor, wdecor->arg); 382 431 } 383 432 … … 554 603 } 555 604 605 /* Does window have a minimize button? */ 606 if ((wdecor->style & ui_wds_minimize_btn) != 0) { 607 if (wdecor->res->textmode == false) { 608 geom->btn_min_rect.p0.x = btn_x - 20; 609 geom->btn_min_rect.p0.y = btn_y; 610 geom->btn_min_rect.p1.x = btn_x; 611 geom->btn_min_rect.p1.y = btn_y + 20; 612 613 btn_x -= 20; 614 } else { 615 geom->btn_min_rect.p0.x = btn_x - 3; 616 geom->btn_min_rect.p0.y = btn_y; 617 geom->btn_min_rect.p1.x = btn_x; 618 geom->btn_min_rect.p1.y = btn_y + 1; 619 620 btn_x -= 3; 621 } 622 } else { 623 geom->btn_min_rect.p0.x = 0; 624 geom->btn_min_rect.p0.y = 0; 625 geom->btn_min_rect.p1.x = 0; 626 geom->btn_min_rect.p1.y = 0; 627 } 628 556 629 if (wdecor->res->textmode == false) 557 630 cap_hmargin = wdecor_cap_hmargin; … … 773 846 ui_wdecor_get_geom(wdecor, &geom); 774 847 848 if (wdecor->btn_min != NULL) { 849 claim = ui_pbutton_pos_event(wdecor->btn_min, event); 850 if (claim == ui_claimed) 851 return ui_claimed; 852 } 853 775 854 if (wdecor->btn_max != NULL) { 776 855 claim = ui_pbutton_pos_event(wdecor->btn_max, event); … … 798 877 } 799 878 879 /** Window decoration minimize button was clicked. 880 * 881 * @param pbutton Minimize button 882 * @param arg Argument (ui_wdecor_t) 883 */ 884 static void ui_wdecor_btn_min_clicked(ui_pbutton_t *pbutton, void *arg) 885 { 886 ui_wdecor_t *wdecor = (ui_wdecor_t *) arg; 887 888 (void) pbutton; 889 890 ui_wdecor_minimize(wdecor); 891 } 892 800 893 /** Window decoration (un)maximize button was clicked. 801 894 * 802 * @param pbutton Close button895 * @param pbutton (Un)maximize button 803 896 * @param arg Argument (ui_wdecor_t) 804 897 */ … … 813 906 else 814 907 ui_wdecor_maximize(wdecor); 908 } 909 910 /** Paint minimize button decoration. 911 * 912 * @param pbutton Push button 913 * @param arg Argument (ui_wdecor_t *) 914 * @param pos Center position 915 */ 916 static errno_t ui_wdecor_btn_min_paint(ui_pbutton_t *pbutton, 917 void *arg, gfx_coord2_t *pos) 918 { 919 ui_wdecor_t *wdecor = (ui_wdecor_t *)arg; 920 errno_t rc; 921 922 rc = ui_paint_minicon(wdecor->res, pos, wdecor_min_w, 923 wdecor_min_h); 924 925 return rc; 815 926 } 816 927 -
uspace/lib/ui/src/window.c
rd46ac73 r06176e1 74 74 }; 75 75 76 static void wd_minimize(ui_wdecor_t *, void *); 76 77 static void wd_maximize(ui_wdecor_t *, void *); 77 78 static void wd_unmaximize(ui_wdecor_t *, void *); … … 83 84 84 85 static ui_wdecor_cb_t wdecor_cb = { 86 .minimize = wd_minimize, 85 87 .maximize = wd_maximize, 86 88 .unmaximize = wd_unmaximize, … … 917 919 } 918 920 921 /** Window decoration requested window minimization. 922 * 923 * @param wdecor Window decoration 924 * @param arg Argument (window) 925 */ 926 static void wd_minimize(ui_wdecor_t *wdecor, void *arg) 927 { 928 ui_window_t *window = (ui_window_t *) arg; 929 930 ui_window_send_minimize(window); 931 } 932 919 933 /** Window decoration requested window maximization. 920 934 * … … 1041 1055 } 1042 1056 1057 /** Send window minimize event. 1058 * 1059 * @param window Window 1060 */ 1061 void ui_window_send_minimize(ui_window_t *window) 1062 { 1063 if (window->cb != NULL && window->cb->maximize != NULL) 1064 window->cb->minimize(window, window->arg); 1065 else 1066 ui_window_def_minimize(window); 1067 } 1068 1043 1069 /** Send window maximize event. 1044 1070 * … … 1131 1157 else 1132 1158 return ui_window_def_unfocus(window); 1159 } 1160 1161 /** Default window minimize routine. 1162 * 1163 * @param window Window 1164 * @return EOK on success or an error code 1165 */ 1166 errno_t ui_window_def_minimize(ui_window_t *window) 1167 { 1168 errno_t rc; 1169 1170 if (window->dwindow != NULL) { 1171 rc = display_window_minimize(window->dwindow); 1172 if (rc != EOK) 1173 goto error; 1174 } 1175 1176 return EOK; 1177 error: 1178 return rc; 1133 1179 } 1134 1180 -
uspace/lib/ui/test/paint.c
rd46ac73 r06176e1 354 354 } 355 355 356 /** Paint mimimize icon */ 357 PCUT_TEST(minicon) 358 { 359 errno_t rc; 360 gfx_context_t *gc = NULL; 361 ui_resource_t *resource = NULL; 362 test_gc_t tgc; 363 gfx_coord2_t center; 364 365 memset(&tgc, 0, sizeof(tgc)); 366 rc = gfx_context_new(&ops, &tgc, &gc); 367 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 368 369 rc = ui_resource_create(gc, false, &resource); 370 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 371 PCUT_ASSERT_NOT_NULL(resource); 372 373 center.x = 0; 374 center.y = 0; 375 376 rc = ui_paint_minicon(resource, ¢er, 8, 6); 377 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 378 379 ui_resource_destroy(resource); 380 rc = gfx_context_delete(gc); 381 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 382 } 383 356 384 /** Paint maximize icon */ 357 385 PCUT_TEST(maxicon) -
uspace/lib/ui/test/wdecor.c
rd46ac73 r06176e1 62 62 }; 63 63 64 static void test_wdecor_minimize(ui_wdecor_t *, void *); 64 65 static void test_wdecor_maximize(ui_wdecor_t *, void *); 65 66 static void test_wdecor_unmaximize(ui_wdecor_t *, void *); … … 71 72 72 73 static ui_wdecor_cb_t test_wdecor_cb = { 74 .minimize = test_wdecor_minimize, 73 75 .maximize = test_wdecor_maximize, 74 76 .unmaximize = test_wdecor_unmaximize, … … 100 102 101 103 typedef struct { 104 bool minimize; 102 105 bool maximize; 103 106 bool unmaximize; … … 222 225 rc = gfx_context_delete(gc); 223 226 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 227 } 228 229 /** Test ui_wdecor_minimize() */ 230 PCUT_TEST(minimize) 231 { 232 errno_t rc; 233 ui_wdecor_t *wdecor; 234 test_cb_resp_t resp; 235 236 rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor); 237 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 238 239 /* Minimize callback with no callbacks set */ 240 ui_wdecor_minimize(wdecor); 241 242 /* Minimize callback with minimize callback not implemented */ 243 ui_wdecor_set_cb(wdecor, &dummy_wdecor_cb, NULL); 244 ui_wdecor_minimize(wdecor); 245 246 /* Minimize callback with real callback set */ 247 resp.minimize = false; 248 ui_wdecor_set_cb(wdecor, &test_wdecor_cb, &resp); 249 ui_wdecor_minimize(wdecor); 250 PCUT_ASSERT_TRUE(resp.minimize); 251 252 ui_wdecor_destroy(wdecor); 224 253 } 225 254 … … 1014 1043 } 1015 1044 1045 static void test_wdecor_minimize(ui_wdecor_t *wdecor, void *arg) 1046 { 1047 test_cb_resp_t *resp = (test_cb_resp_t *) arg; 1048 1049 resp->minimize = true; 1050 } 1051 1016 1052 static void test_wdecor_maximize(ui_wdecor_t *wdecor, void *arg) 1017 1053 { -
uspace/lib/ui/test/window.c
rd46ac73 r06176e1 45 45 PCUT_TEST_SUITE(window); 46 46 47 static void test_window_minimize(ui_window_t *, void *); 47 48 static void test_window_maximize(ui_window_t *, void *); 48 49 static void test_window_unmaximize(ui_window_t *, void *); … … 55 56 56 57 static ui_window_cb_t test_window_cb = { 58 .minimize = test_window_minimize, 57 59 .maximize = test_window_maximize, 58 60 .unmaximize = test_window_unmaximize, … … 80 82 typedef struct { 81 83 errno_t rc; 84 bool minimize; 82 85 bool maximize; 83 86 bool unmaximize; … … 537 540 } 538 541 542 /** ui_window_send_minimize() calls minimize callback set via ui_window_set_cb() */ 543 PCUT_TEST(send_minimize) 544 { 545 errno_t rc; 546 ui_t *ui = NULL; 547 ui_wnd_params_t params; 548 ui_window_t *window = NULL; 549 test_cb_resp_t resp; 550 551 rc = ui_create_disp(NULL, &ui); 552 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 553 554 ui_wnd_params_init(¶ms); 555 params.caption = "Hello"; 556 557 rc = ui_window_create(ui, ¶ms, &window); 558 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 559 PCUT_ASSERT_NOT_NULL(window); 560 561 /* Minimize callback with no callbacks set */ 562 ui_window_send_minimize(window); 563 564 /* Minimize callback with minimize callback not implemented */ 565 ui_window_set_cb(window, &dummy_window_cb, NULL); 566 ui_window_send_minimize(window); 567 568 /* Minimize callback with real callback set */ 569 resp.minimize = false; 570 ui_window_set_cb(window, &test_window_cb, &resp); 571 ui_window_send_minimize(window); 572 PCUT_ASSERT_TRUE(resp.minimize); 573 574 ui_window_destroy(window); 575 ui_destroy(ui); 576 } 577 539 578 /** ui_window_send_maximize() calls maximize callback set via ui_window_set_cb() */ 540 579 PCUT_TEST(send_maximize) … … 849 888 } 850 889 890 static void test_window_minimize(ui_window_t *window, void *arg) 891 { 892 test_cb_resp_t *resp = (test_cb_resp_t *) arg; 893 894 resp->minimize = true; 895 } 896 851 897 static void test_window_maximize(ui_window_t *window, void *arg) 852 898 { -
uspace/srv/hid/display/display.c
rd46ac73 r06176e1 304 304 gfx_rect_translate(&wnd->dpos, &wnd->rect, &drect); 305 305 306 if (gfx_pix_inside_rect(pos, &drect)) 306 if (gfx_pix_inside_rect(pos, &drect) && 307 ds_window_is_visible(wnd)) 307 308 return wnd; 308 309 -
uspace/srv/hid/display/dsops.c
rd46ac73 r06176e1 54 54 static errno_t disp_window_resize(void *, sysarg_t, gfx_coord2_t *, 55 55 gfx_rect_t *); 56 static errno_t disp_window_minimize(void *, sysarg_t); 56 57 static errno_t disp_window_maximize(void *, sysarg_t); 57 58 static errno_t disp_window_unmaximize(void *, sysarg_t); … … 70 71 .window_resize_req = disp_window_resize_req, 71 72 .window_resize = disp_window_resize, 73 .window_minimize = disp_window_minimize, 72 74 .window_maximize = disp_window_maximize, 73 75 .window_unmaximize = disp_window_unmaximize, … … 247 249 } 248 250 251 static errno_t disp_window_minimize(void *arg, sysarg_t wnd_id) 252 { 253 ds_client_t *client = (ds_client_t *) arg; 254 ds_window_t *wnd; 255 errno_t rc; 256 257 ds_display_lock(client->display); 258 259 wnd = ds_client_find_window(client, wnd_id); 260 if (wnd == NULL) { 261 ds_display_unlock(client->display); 262 return ENOENT; 263 } 264 265 log_msg(LOG_DEFAULT, LVL_DEBUG, "disp_window_maximize()"); 266 rc = ds_window_minimize(wnd); 267 ds_display_unlock(client->display); 268 return rc; 269 } 270 249 271 static errno_t disp_window_maximize(void *arg, sysarg_t wnd_id) 250 272 { -
uspace/srv/hid/display/seat.c
rd46ac73 r06176e1 90 90 void ds_seat_set_focus(ds_seat_t *seat, ds_window_t *wnd) 91 91 { 92 errno_t rc; 93 92 94 if (wnd == seat->focus) { 93 95 /* Focus is not changing */ 94 96 return; 97 } 98 99 if (wnd != NULL) { 100 rc = ds_window_unminimize(wnd); 101 if (rc != EOK) 102 return; 95 103 } 96 104 -
uspace/srv/hid/display/test/window.c
rd46ac73 r06176e1 261 261 } 262 262 263 /** Test ds_window_minimize(). */ 264 PCUT_TEST(window_minimize) 265 { 266 ds_display_t *disp; 267 ds_client_t *client; 268 ds_seat_t *seat; 269 ds_window_t *wnd; 270 display_wnd_params_t params; 271 errno_t rc; 272 273 rc = ds_display_create(NULL, df_none, &disp); 274 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 275 276 rc = ds_client_create(disp, NULL, NULL, &client); 277 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 278 279 rc = ds_seat_create(disp, &seat); 280 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 281 282 display_wnd_params_init(¶ms); 283 params.rect.p0.x = params.rect.p0.y = 0; 284 params.rect.p1.x = params.rect.p1.y = 10; 285 286 rc = ds_window_create(client, ¶ms, &wnd); 287 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 288 289 rc = ds_window_minimize(wnd); 290 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 291 292 PCUT_ASSERT_INT_EQUALS(wndf_minimized, wnd->flags & wndf_minimized); 293 294 ds_window_destroy(wnd); 295 ds_seat_destroy(seat); 296 ds_client_destroy(client); 297 ds_display_destroy(disp); 298 } 299 300 /** Test ds_window_unminimize(). */ 301 PCUT_TEST(window_unminimize) 302 { 303 ds_display_t *disp; 304 ds_client_t *client; 305 ds_seat_t *seat; 306 ds_window_t *wnd; 307 display_wnd_params_t params; 308 errno_t rc; 309 310 rc = ds_display_create(NULL, df_none, &disp); 311 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 312 313 rc = ds_client_create(disp, NULL, NULL, &client); 314 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 315 316 rc = ds_seat_create(disp, &seat); 317 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 318 319 display_wnd_params_init(¶ms); 320 params.flags |= wndf_minimized; 321 params.rect.p0.x = params.rect.p0.y = 0; 322 params.rect.p1.x = params.rect.p1.y = 10; 323 324 rc = ds_window_create(client, ¶ms, &wnd); 325 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 326 327 rc = ds_window_unminimize(wnd); 328 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 329 330 PCUT_ASSERT_INT_EQUALS(0, wnd->flags & wndf_minimized); 331 332 ds_window_destroy(wnd); 333 ds_seat_destroy(seat); 334 ds_client_destroy(client); 335 ds_display_destroy(disp); 336 } 337 263 338 /** Test ds_window_maximize(). */ 264 339 PCUT_TEST(window_maximize) … … 373 448 gc = ds_window_get_ctx(wnd); 374 449 PCUT_ASSERT_NOT_NULL(gc); 450 451 ds_window_destroy(wnd); 452 ds_seat_destroy(seat); 453 ds_client_destroy(client); 454 ds_display_destroy(disp); 455 } 456 457 /** Test ds_window_is_visible() */ 458 PCUT_TEST(is_visible) 459 { 460 ds_display_t *disp; 461 ds_client_t *client; 462 ds_seat_t *seat; 463 ds_window_t *wnd; 464 display_wnd_params_t params; 465 errno_t rc; 466 467 rc = ds_display_create(NULL, df_none, &disp); 468 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 469 470 rc = ds_client_create(disp, NULL, NULL, &client); 471 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 472 473 rc = ds_seat_create(disp, &seat); 474 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 475 476 display_wnd_params_init(¶ms); 477 params.rect.p0.x = params.rect.p0.y = 0; 478 params.rect.p1.x = params.rect.p1.y = 10; 479 480 rc = ds_window_create(client, ¶ms, &wnd); 481 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 482 483 PCUT_ASSERT_TRUE(ds_window_is_visible(wnd)); 484 485 wnd->flags |= wndf_minimized; 486 487 PCUT_ASSERT_FALSE(ds_window_is_visible(wnd)); 375 488 376 489 ds_window_destroy(wnd); -
uspace/srv/hid/display/window.c
rd46ac73 r06176e1 220 220 } 221 221 222 /** Determine if window is visible. 223 * 224 * @param wnd Window 225 * @return @c true iff window is visible 226 */ 227 bool ds_window_is_visible(ds_window_t *wnd) 228 { 229 return (wnd->flags & wndf_minimized) == 0; 230 } 231 222 232 /** Paint a window using its backing bitmap. 223 233 * … … 233 243 234 244 log_msg(LOG_DEFAULT, LVL_DEBUG2, "ds_window_paint"); 245 246 /* Skip painting the window if not visible */ 247 if (!ds_window_is_visible(wnd)) 248 return EOK; 235 249 236 250 if (rect != NULL) { … … 808 822 } 809 823 824 /** Minimize window. 825 * 826 * @param wnd Window 827 * @return EOK on success or an error code 828 */ 829 errno_t ds_window_minimize(ds_window_t *wnd) 830 { 831 /* If already minimized, do nothing and return success. */ 832 if ((wnd->flags & wndf_minimized) != 0) 833 return EOK; 834 835 wnd->flags |= wndf_minimized; 836 (void) ds_display_paint(wnd->display, NULL); 837 return EOK; 838 } 839 840 /** Unminimize window. 841 * 842 * @param wnd Window 843 * @return EOK on success or an error code 844 */ 845 errno_t ds_window_unminimize(ds_window_t *wnd) 846 { 847 /* If not minimized, do nothing and return success. */ 848 if ((wnd->flags & wndf_minimized) == 0) 849 return EOK; 850 851 wnd->flags &= ~wndf_minimized; 852 (void) ds_display_paint(wnd->display, NULL); 853 return EOK; 854 } 855 810 856 /** Maximize window. 811 857 * -
uspace/srv/hid/display/window.h
rd46ac73 r06176e1 41 41 #include <errno.h> 42 42 #include <io/pos_event.h> 43 #include <stdbool.h> 43 44 #include <types/gfx/context.h> 44 45 #include <types/gfx/coord.h> … … 55 56 extern void ds_window_bring_to_top(ds_window_t *); 56 57 extern gfx_context_t *ds_window_get_ctx(ds_window_t *); 58 extern bool ds_window_is_visible(ds_window_t *); 57 59 extern errno_t ds_window_paint(ds_window_t *, gfx_rect_t *); 58 60 errno_t ds_window_paint_preview(ds_window_t *, gfx_rect_t *); … … 68 70 gfx_coord2_t *); 69 71 extern errno_t ds_window_resize(ds_window_t *, gfx_coord2_t *, gfx_rect_t *); 72 extern errno_t ds_window_minimize(ds_window_t *); 73 extern errno_t ds_window_unminimize(ds_window_t *); 70 74 extern errno_t ds_window_maximize(ds_window_t *); 71 75 extern errno_t ds_window_unmaximize(ds_window_t *); -
uspace/srv/hid/display/wmops.c
rd46ac73 r06176e1 41 41 #include "display.h" 42 42 #include "seat.h" 43 #include "window.h" 43 44 #include "wmclient.h" 44 45
Note:
See TracChangeset
for help on using the changeset viewer.