Changeset 35cffea in mainline for uspace/lib/display/src


Ignore:
Timestamp:
2022-05-19T08:02:31Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
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)
Message:

Maximizing/unmaximizing a window

Location:
uspace/lib/display/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/display/src/disp_srv.c

    rfd05ea6 r35cffea  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2022 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    230230}
    231231
     232static void display_window_get_max_rect_srv(display_srv_t *srv,
     233    ipc_call_t *icall)
     234{
     235        sysarg_t wnd_id;
     236        ipc_call_t call;
     237        gfx_rect_t rect;
     238        size_t size;
     239        errno_t rc;
     240
     241        wnd_id = ipc_get_arg1(icall);
     242
     243        if (srv->ops->window_get_max_rect == NULL) {
     244                async_answer_0(icall, ENOTSUP);
     245                return;
     246        }
     247
     248        if (!async_data_read_receive(&call, &size)) {
     249                async_answer_0(icall, EREFUSED);
     250                return;
     251        }
     252
     253        rc = srv->ops->window_get_max_rect(srv->arg, wnd_id, &rect);
     254        if (rc != EOK) {
     255                async_answer_0(&call, rc);
     256                async_answer_0(icall, rc);
     257                return;
     258        }
     259
     260        if (size != sizeof(gfx_rect_t)) {
     261                async_answer_0(&call, EINVAL);
     262                async_answer_0(icall, EINVAL);
     263                return;
     264        }
     265
     266        rc = async_data_read_finalize(&call, &rect, size);
     267        if (rc != EOK) {
     268                async_answer_0(&call, rc);
     269                async_answer_0(icall, rc);
     270                return;
     271        }
     272
     273        async_answer_0(icall, EOK);
     274}
     275
    232276static void display_window_resize_req_srv(display_srv_t *srv, ipc_call_t *icall)
    233277{
     
    306350        rc = srv->ops->window_resize(srv->arg, wnd_id, &wresize.offs,
    307351            &wresize.nrect);
     352        async_answer_0(icall, rc);
     353}
     354
     355static void display_window_maximize_srv(display_srv_t *srv, ipc_call_t *icall)
     356{
     357        sysarg_t wnd_id;
     358        errno_t rc;
     359
     360        wnd_id = ipc_get_arg1(icall);
     361
     362        if (srv->ops->window_maximize == NULL) {
     363                async_answer_0(icall, ENOTSUP);
     364                return;
     365        }
     366
     367        rc = srv->ops->window_maximize(srv->arg, wnd_id);
     368        async_answer_0(icall, rc);
     369}
     370
     371static void display_window_unmaximize_srv(display_srv_t *srv, ipc_call_t *icall)
     372{
     373        sysarg_t wnd_id;
     374        errno_t rc;
     375
     376        wnd_id = ipc_get_arg1(icall);
     377
     378        if (srv->ops->window_unmaximize == NULL) {
     379                async_answer_0(icall, ENOTSUP);
     380                return;
     381        }
     382
     383        rc = srv->ops->window_unmaximize(srv->arg, wnd_id);
    308384        async_answer_0(icall, rc);
    309385}
     
    445521                        display_window_get_pos_srv(srv, &call);
    446522                        break;
     523                case DISPLAY_WINDOW_GET_MAX_RECT:
     524                        display_window_get_max_rect_srv(srv, &call);
     525                        break;
    447526                case DISPLAY_WINDOW_RESIZE_REQ:
    448527                        display_window_resize_req_srv(srv, &call);
     
    450529                case DISPLAY_WINDOW_RESIZE:
    451530                        display_window_resize_srv(srv, &call);
     531                        break;
     532                case DISPLAY_WINDOW_MAXIMIZE:
     533                        display_window_maximize_srv(srv, &call);
     534                        break;
     535                case DISPLAY_WINDOW_UNMAXIMIZE:
     536                        display_window_unmaximize_srv(srv, &call);
    452537                        break;
    453538                case DISPLAY_WINDOW_SET_CURSOR:
  • uspace/lib/display/src/display.c

    rfd05ea6 r35cffea  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2022 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    350350}
    351351
     352/** Get display window maximized rectangle.
     353 *
     354 * Get the rectangle to which a window would be maximized.
     355 *
     356 * @param window Window
     357 * @param rect Place to store maximized rectangle
     358 * @return EOK on success or an error code
     359 */
     360errno_t display_window_get_max_rect(display_window_t *window, gfx_rect_t *rect)
     361{
     362        async_exch_t *exch;
     363        aid_t req;
     364        ipc_call_t answer;
     365        errno_t rc;
     366
     367        exch = async_exchange_begin(window->display->sess);
     368        req = async_send_1(exch, DISPLAY_WINDOW_GET_MAX_RECT, window->id,
     369            &answer);
     370        rc = async_data_read_start(exch, rect, sizeof (gfx_rect_t));
     371        async_exchange_end(exch);
     372        if (rc != EOK) {
     373                async_forget(req);
     374                return rc;
     375        }
     376
     377        async_wait_for(req, &rc);
     378        if (rc != EOK)
     379                return rc;
     380
     381        return EOK;
     382}
     383
    352384/** Request a window resize.
    353385 *
     
    453485
    454486        return EOK;
     487}
     488
     489/** Maximize window.
     490 *
     491 * @param window Window
     492 * @return EOK on success or an error code
     493 */
     494errno_t display_window_maximize(display_window_t *window)
     495{
     496        async_exch_t *exch;
     497        errno_t rc;
     498
     499        exch = async_exchange_begin(window->display->sess);
     500        rc = async_req_1_0(exch, DISPLAY_WINDOW_MAXIMIZE, window->id);
     501        async_exchange_end(exch);
     502
     503        return rc;
     504}
     505
     506/** Unmaximize window.
     507 *
     508 * @param window Window
     509 * @return EOK on success or an error code
     510 */
     511errno_t display_window_unmaximize(display_window_t *window)
     512{
     513        async_exch_t *exch;
     514        errno_t rc;
     515
     516        exch = async_exchange_begin(window->display->sess);
     517        rc = async_req_1_0(exch, DISPLAY_WINDOW_UNMAXIMIZE, window->id);
     518        async_exchange_end(exch);
     519
     520        return rc;
    455521}
    456522
Note: See TracChangeset for help on using the changeset viewer.