Changeset 35cffea in mainline for uspace/lib/ui/src/window.c
- Timestamp:
- 2022-05-19T08:02:31Z (3 years ago)
- Branches:
- master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ad698f4
- Parents:
- fd05ea6
- git-author:
- Jiri Svoboda <jiri@…> (2022-05-18 17:02:12)
- git-committer:
- Jiri Svoboda <jiri@…> (2022-05-19 08:02:31)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/src/window.c
rfd05ea6 r35cffea 74 74 }; 75 75 76 static void wd_maximize(ui_wdecor_t *, void *); 77 static void wd_unmaximize(ui_wdecor_t *, void *); 76 78 static void wd_close(ui_wdecor_t *, void *); 77 79 static void wd_move(ui_wdecor_t *, void *, gfx_coord2_t *); … … 81 83 82 84 static ui_wdecor_cb_t wdecor_cb = { 85 .maximize = wd_maximize, 86 .unmaximize = wd_unmaximize, 83 87 .close = wd_close, 84 88 .move = wd_move, … … 469 473 } 470 474 471 /** Resize/move window. 472 * 473 * Resize window to the dimensions of @a rect. If @a rect.p0 is not 0,0, 474 * the top-left corner of the window will move on the screen accordingly. 475 /** Resize or (un)maximize window. 475 476 * 476 477 * @param window Window 477 478 * @param rect Rectangle 479 * @param scop Size change operation 478 480 * 479 481 * @return EOK on success or an error code 480 482 */ 481 errno_t ui_window_resize(ui_window_t *window, gfx_rect_t *rect) 483 errno_t ui_window_size_change(ui_window_t *window, gfx_rect_t *rect, 484 ui_wnd_sc_op_t scop) 482 485 { 483 486 gfx_coord2_t offs; … … 545 548 } 546 549 547 /* dwindow can be NULL in case of unit tests */550 /* dwindow can be NULL in case of unit tests or fullscreen mode */ 548 551 if (window->dwindow != NULL) { 549 rc = display_window_resize(window->dwindow, &offs, &nrect); 550 if (rc != EOK) 551 goto error; 552 switch (scop) { 553 case ui_wsc_resize: 554 rc = display_window_resize(window->dwindow, &offs, 555 &nrect); 556 if (rc != EOK) 557 goto error; 558 break; 559 case ui_wsc_maximize: 560 rc = display_window_maximize(window->dwindow); 561 if (rc != EOK) 562 goto error; 563 break; 564 case ui_wsc_unmaximize: 565 rc = display_window_unmaximize(window->dwindow); 566 if (rc != EOK) 567 goto error; 568 break; 569 } 552 570 } 553 571 … … 597 615 } 598 616 617 /** Resize/move window. 618 * 619 * Resize window to the dimensions of @a rect. If @a rect.p0 is not 0,0, 620 * the top-left corner of the window will move on the screen accordingly. 621 * 622 * @param window Window 623 * @param rect Rectangle 624 * 625 * @return EOK on success or an error code 626 */ 627 errno_t ui_window_resize(ui_window_t *window, gfx_rect_t *rect) 628 { 629 return ui_window_size_change(window, rect, ui_wsc_resize); 630 } 631 599 632 /** Set window callbacks. 600 633 * … … 846 879 ui_window_send_unfocus(window); 847 880 ui_unlock(window->ui); 881 } 882 883 /** Window decoration requested window maximization. 884 * 885 * @param wdecor Window decoration 886 * @param arg Argument (window) 887 */ 888 static void wd_maximize(ui_wdecor_t *wdecor, void *arg) 889 { 890 ui_window_t *window = (ui_window_t *) arg; 891 892 ui_window_send_maximize(window); 893 } 894 895 /** Window decoration requested window unmaximization. 896 * 897 * @param wdecor Window decoration 898 * @param arg Argument (window) 899 */ 900 static void wd_unmaximize(ui_wdecor_t *wdecor, void *arg) 901 { 902 ui_window_t *window = (ui_window_t *) arg; 903 904 ui_window_send_unmaximize(window); 848 905 } 849 906 … … 948 1005 } 949 1006 1007 /** Send window maximize event. 1008 * 1009 * @param window Window 1010 */ 1011 void ui_window_send_maximize(ui_window_t *window) 1012 { 1013 if (window->cb != NULL && window->cb->maximize != NULL) 1014 window->cb->maximize(window, window->arg); 1015 else 1016 ui_window_def_maximize(window); 1017 } 1018 1019 /** Send window unmaximize event. 1020 * 1021 * @param window Window 1022 */ 1023 void ui_window_send_unmaximize(ui_window_t *window) 1024 { 1025 if (window->cb != NULL && window->cb->unmaximize != NULL) 1026 window->cb->unmaximize(window, window->arg); 1027 else 1028 ui_window_def_unmaximize(window); 1029 } 1030 950 1031 /** Send window close event. 951 1032 * … … 1014 1095 else 1015 1096 return ui_window_def_unfocus(window); 1097 } 1098 1099 /** Default window maximize routine. 1100 * 1101 * @param window Window 1102 * @return EOK on success or an error code 1103 */ 1104 errno_t ui_window_def_maximize(ui_window_t *window) 1105 { 1106 errno_t rc; 1107 gfx_rect_t old_rect; 1108 gfx_rect_t rect; 1109 1110 old_rect = window->rect; 1111 1112 if (window->dwindow != NULL) { 1113 rc = display_window_get_max_rect(window->dwindow, &rect); 1114 if (rc != EOK) 1115 return rc; 1116 } else { 1117 rect = window->ui->rect; 1118 } 1119 1120 ui_wdecor_set_maximized(window->wdecor, true); 1121 1122 rc = ui_window_size_change(window, &rect, ui_wsc_maximize); 1123 if (rc != EOK) { 1124 ui_wdecor_set_maximized(window->wdecor, false); 1125 return rc; 1126 } 1127 1128 window->normal_rect = old_rect; 1129 (void) ui_window_paint(window); 1130 return EOK; 1131 } 1132 1133 /** Default window unmaximize routine. 1134 * 1135 * @param window Window 1136 * @return EOK on success or an error code 1137 */ 1138 errno_t ui_window_def_unmaximize(ui_window_t *window) 1139 { 1140 errno_t rc; 1141 1142 ui_wdecor_set_maximized(window->wdecor, false); 1143 1144 rc = ui_window_size_change(window, &window->normal_rect, 1145 ui_wsc_unmaximize); 1146 if (rc != EOK) { 1147 ui_wdecor_set_maximized(window->wdecor, true); 1148 printf("ui_window_size_change->error\n"); 1149 return rc; 1150 } 1151 1152 (void) ui_window_paint(window); 1153 return EOK; 1016 1154 } 1017 1155
Note:
See TracChangeset
for help on using the changeset viewer.