Changeset 06176e1 in mainline for uspace/lib/ui
- Timestamp:
- 2022-12-20T12:31:44Z (3 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/lib/ui
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
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 {
Note:
See TracChangeset
for help on using the changeset viewer.