Changeset ebb1489 in mainline for uspace/lib/ui
- Timestamp:
- 2024-10-13T08:23:40Z (18 months ago)
- Parents:
- 2a0c827c (diff), b3b79981 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - git-author:
- boba-buba <120932204+boba-buba@…> (2024-10-13 08:23:40)
- git-committer:
- GitHub <noreply@…> (2024-10-13 08:23:40)
- Location:
- uspace/lib/ui
- Files:
-
- 11 edited
-
include/types/ui/menubar.h (modified) (2 diffs)
-
include/types/ui/testctl.h (modified) (2 diffs)
-
include/types/ui/window.h (modified) (3 diffs)
-
include/ui/menubar.h (modified) (2 diffs)
-
include/ui/window.h (modified) (2 diffs)
-
private/menubar.h (modified) (2 diffs)
-
private/window.h (modified) (2 diffs)
-
src/menubar.c (modified) (7 diffs)
-
src/ui.c (modified) (1 diff)
-
src/window.c (modified) (10 diffs)
-
test/window.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/include/types/ui/menubar.h
r2a0c827c rebb1489 1 1 /* 2 * Copyright (c) 202 1Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 40 40 typedef struct ui_menu_bar ui_menu_bar_t; 41 41 42 /** Menu bar callbacks */ 43 typedef struct ui_menu_bar_cb { 44 /** Activated */ 45 void (*activate)(ui_menu_bar_t *, void *); 46 /** Deactivated */ 47 void (*deactivate)(ui_menu_bar_t *, void *); 48 } ui_menu_bar_cb_t; 49 42 50 #endif 43 51 -
uspace/lib/ui/include/types/ui/testctl.h
r2a0c827c rebb1489 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 36 36 #ifndef _UI_TYPES_TESTCTL_H 37 37 #define _UI_TYPES_TESTCTL_H 38 39 #include <errno.h> 40 #include <io/kbd_event.h> 41 #include <io/pos_event.h> 42 #include <stdbool.h> 43 #include <types/ui/event.h> 38 44 39 45 struct ui_test_ctl; -
uspace/lib/ui/include/types/ui/window.h
r2a0c827c rebb1489 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 80 80 /** Window rectangle */ 81 81 gfx_rect_t rect; 82 /** Minimum size to which window can be resized */ 83 gfx_coord2_t min_size; 82 84 /** Window caption */ 83 85 const char *caption; … … 100 102 void (*maximize)(ui_window_t *, void *); 101 103 void (*unmaximize)(ui_window_t *, void *); 104 void (*resize)(ui_window_t *, void *); 102 105 void (*close)(ui_window_t *, void *); 103 106 void (*focus)(ui_window_t *, void *, unsigned); -
uspace/lib/ui/include/ui/menubar.h
r2a0c827c rebb1489 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 52 52 ui_menu_bar_t **); 53 53 extern void ui_menu_bar_destroy(ui_menu_bar_t *); 54 extern void ui_menu_bar_set_cb(ui_menu_bar_t *, ui_menu_bar_cb_t *, void *); 54 55 extern ui_control_t *ui_menu_bar_ctl(ui_menu_bar_t *); 55 56 extern void ui_menu_bar_set_rect(ui_menu_bar_t *, gfx_rect_t *); -
uspace/lib/ui/include/ui/window.h
r2a0c827c rebb1489 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 74 74 extern void ui_window_def_pos(ui_window_t *, pos_event_t *); 75 75 extern void ui_window_def_unfocus(ui_window_t *, unsigned); 76 extern void ui_window_def_resize(ui_window_t *); 76 77 77 78 #endif -
uspace/lib/ui/private/menubar.h
r2a0c827c rebb1489 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 64 64 /** List of menu drop-downs (ui_menu_dd_t) */ 65 65 list_t menudds; 66 /** Callbacks */ 67 struct ui_menu_bar_cb *cb; 68 /** Callback argument */ 69 void *arg; 66 70 }; 67 71 -
uspace/lib/ui/private/window.h
r2a0c827c rebb1489 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 133 133 extern void ui_window_send_pos(ui_window_t *, pos_event_t *); 134 134 extern void ui_window_send_unfocus(ui_window_t *, unsigned); 135 extern void ui_window_send_resize(ui_window_t *); 135 136 extern errno_t ui_window_size_change(ui_window_t *, gfx_rect_t *, 136 137 ui_wnd_sc_op_t); -
uspace/lib/ui/src/menubar.c
r2a0c827c rebb1489 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 66 66 static ui_evclaim_t ui_menu_bar_ctl_kbd_event(void *, kbd_event_t *); 67 67 static ui_evclaim_t ui_menu_bar_ctl_pos_event(void *, pos_event_t *); 68 static void ui_menu_bar_activate_ev(ui_menu_bar_t *); 69 static void ui_menu_bar_deactivate_ev(ui_menu_bar_t *); 68 70 69 71 /** Menu bar control ops */ … … 131 133 ui_control_delete(mbar->control); 132 134 free(mbar); 135 } 136 137 /** Set menu bar callbacks. 138 * 139 * @param mbar Menu bar 140 * @param cb Callbacks 141 * @param arg Callback argument 142 */ 143 void ui_menu_bar_set_cb(ui_menu_bar_t *mbar, ui_menu_bar_cb_t *cb, void *arg) 144 { 145 mbar->cb = cb; 146 mbar->arg = arg; 133 147 } 134 148 … … 288 302 } 289 303 304 if (!mbar->active) 305 ui_menu_bar_activate_ev(mbar); 290 306 mbar->active = true; 291 307 } else { 308 if (mbar->active) 309 ui_menu_bar_deactivate_ev(mbar); 292 310 mbar->active = false; 293 311 } … … 640 658 641 659 (void) ui_menu_bar_paint(mbar); 660 ui_menu_bar_activate_ev(mbar); 642 661 } 643 662 … … 649 668 { 650 669 ui_menu_bar_select(mbar, NULL, false, 0); 670 ui_menu_bar_deactivate_ev(mbar); 651 671 } 652 672 … … 700 720 } 701 721 722 /** Send menu bar activate event. 723 * 724 * @param mbar Menu bar 725 */ 726 static void ui_menu_bar_activate_ev(ui_menu_bar_t *mbar) 727 { 728 if (mbar->cb != NULL && mbar->cb->activate != NULL) 729 mbar->cb->activate(mbar, mbar->arg); 730 } 731 732 /** Send menu bar deactivate event. 733 * 734 * @param mbar Menu bar 735 */ 736 static void ui_menu_bar_deactivate_ev(ui_menu_bar_t *mbar) 737 { 738 if (mbar->cb != NULL && mbar->cb->deactivate != NULL) 739 mbar->cb->deactivate(mbar, mbar->arg); 740 } 741 702 742 /** @} 703 743 */ -
uspace/lib/ui/src/ui.c
r2a0c827c rebb1489 357 357 358 358 break; 359 case CEV_RESIZE: 360 ui_lock(ui); 361 ui_window_send_resize(awnd); 362 ui_unlock(ui); 363 break; 359 364 } 360 365 } -
uspace/lib/ui/src/window.c
r2a0c827c rebb1489 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 318 318 { 319 319 ui_window_t *window; 320 ui_window_t *pwindow = NULL; 320 321 display_info_t info; 321 322 gfx_coord2_t scr_dims; … … 342 343 dparams.rect = params->rect; 343 344 dparams.caption = params->caption; 344 /* Only allow making the window larger */ 345 gfx_rect_dims(¶ms->rect, &dparams.min_size); 345 dparams.min_size = params->min_size; 346 346 347 347 /* … … 505 505 *rwindow = window; 506 506 507 if (ui_is_fullscreen(ui)) 508 pwindow = ui_window_get_active(ui); 509 507 510 list_append(&window->lwindows, &ui->windows); 511 512 if (ui_is_fullscreen(ui)) { 513 /* Send unfocus event to previously active window */ 514 if (pwindow != NULL) 515 ui_window_send_unfocus(pwindow, 0); 516 } 517 508 518 return EOK; 509 519 error: … … 531 541 { 532 542 ui_t *ui; 543 ui_window_t *nwindow; 533 544 534 545 if (window == NULL) … … 558 569 if (ui_is_fullscreen(ui)) { 559 570 ui_paint(ui); 571 /* Send focus event to newly active window */ 572 nwindow = ui_window_get_active(ui); 573 if (nwindow != NULL) 574 ui_window_send_focus(nwindow, 0); 560 575 } 561 576 … … 1031 1046 ui_lock(ui); 1032 1047 (void) ui_window_resize(window, rect); 1033 (void) ui_window_paint(window);1048 ui_window_send_resize(window); 1034 1049 ui_unlock(ui); 1035 1050 } … … 1279 1294 void ui_window_send_minimize(ui_window_t *window) 1280 1295 { 1281 if (window->cb != NULL && window->cb->m aximize != NULL)1296 if (window->cb != NULL && window->cb->minimize != NULL) 1282 1297 window->cb->minimize(window, window->arg); 1283 1298 else … … 1377 1392 else 1378 1393 return ui_window_def_unfocus(window, nfocus); 1394 } 1395 1396 /** Send window resize event. 1397 * 1398 * @param window Window 1399 */ 1400 void ui_window_send_resize(ui_window_t *window) 1401 { 1402 if (window->cb != NULL && window->cb->resize != NULL) 1403 window->cb->resize(window, window->arg); 1404 else 1405 return ui_window_def_resize(window); 1379 1406 } 1380 1407 … … 1557 1584 if (window->control != NULL) 1558 1585 ui_control_unfocus(window->control, nfocus); 1586 } 1587 1588 /** Default window resize routine. 1589 * 1590 * @param window Window 1591 * @return EOK on success or an error code 1592 */ 1593 void ui_window_def_resize(ui_window_t *window) 1594 { 1595 ui_window_paint(window); 1559 1596 } 1560 1597 -
uspace/lib/ui/test/window.c
r2a0c827c rebb1489 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 55 55 static void test_window_pos(ui_window_t *, void *, pos_event_t *); 56 56 static void test_window_unfocus(ui_window_t *, void *, unsigned); 57 static void test_window_resize(ui_window_t *, void *); 57 58 58 59 static ui_window_cb_t test_window_cb = { … … 66 67 .paint = test_window_paint, 67 68 .pos = test_window_pos, 68 .unfocus = test_window_unfocus 69 .unfocus = test_window_unfocus, 70 .resize = test_window_resize 69 71 }; 70 72 … … 99 101 bool unfocus; 100 102 unsigned unfocus_nfocus; 103 bool resize; 101 104 } test_cb_resp_t; 102 105 … … 936 939 } 937 940 941 /** ui_window_send_resize() calls resize callback set via ui_window_set_cb() */ 942 PCUT_TEST(send_resize) 943 { 944 errno_t rc; 945 ui_t *ui = NULL; 946 ui_wnd_params_t params; 947 ui_window_t *window = NULL; 948 test_cb_resp_t resp; 949 950 rc = ui_create_disp(NULL, &ui); 951 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 952 953 ui_wnd_params_init(¶ms); 954 params.caption = "Hello"; 955 956 rc = ui_window_create(ui, ¶ms, &window); 957 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 958 PCUT_ASSERT_NOT_NULL(window); 959 960 /* Resize callback with no callbacks set */ 961 ui_window_send_resize(window); 962 963 /* Resize callback with resize callback not implemented */ 964 ui_window_set_cb(window, &dummy_window_cb, NULL); 965 ui_window_send_resize(window); 966 967 /* Resize callback with real callback set */ 968 resp.close = false; 969 ui_window_set_cb(window, &test_window_cb, &resp); 970 ui_window_send_resize(window); 971 PCUT_ASSERT_TRUE(resp.resize); 972 973 ui_window_destroy(window); 974 ui_destroy(ui); 975 } 976 938 977 static void test_window_sysmenu(ui_window_t *window, void *arg, sysarg_t idev_id) 939 978 { … … 1014 1053 } 1015 1054 1055 static void test_window_resize(ui_window_t *window, void *arg) 1056 { 1057 test_cb_resp_t *resp = (test_cb_resp_t *) arg; 1058 1059 resp->resize = true; 1060 } 1061 1016 1062 static errno_t test_ctl_paint(void *arg) 1017 1063 {
Note:
See TracChangeset
for help on using the changeset viewer.
