Changeset 2d879f7 in mainline for uspace/lib/ui/src/window.c


Ignore:
Timestamp:
2020-11-26T11:59:59Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
554a5f1
Parents:
d8ddf7a
git-author:
Jiri Svoboda <jiri@…> (2020-11-25 18:46:07)
git-committer:
Jiri Svoboda <jiri@…> (2020-11-26 11:59:59)
Message:

Basic support for window resizing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/src/window.c

    rd8ddf7a r2d879f7  
    5959static void dwnd_kbd_event(void *, kbd_event_t *);
    6060static void dwnd_pos_event(void *, pos_event_t *);
     61static void dwnd_resize_event(void *, gfx_rect_t *);
    6162static void dwnd_unfocus_event(void *);
    6263
     
    6667        .kbd_event = dwnd_kbd_event,
    6768        .pos_event = dwnd_pos_event,
     69        .resize_event = dwnd_resize_event,
    6870        .unfocus_event = dwnd_unfocus_event
    6971};
     
    7173static void wd_close(ui_wdecor_t *, void *);
    7274static void wd_move(ui_wdecor_t *, void *, gfx_coord2_t *);
     75static void wd_resize(ui_wdecor_t *, void *, ui_wdecor_rsztype_t,
     76    gfx_coord2_t *);
     77static void wd_set_cursor(ui_wdecor_t *, void *, ui_stock_cursor_t);
    7378
    7479static ui_wdecor_cb_t wdecor_cb = {
    7580        .close = wd_close,
    76         .move = wd_move
     81        .move = wd_move,
     82        .resize = wd_resize,
     83        .set_cursor = wd_set_cursor
    7784};
    7885
     
    118125        display_wnd_params_init(&dparams);
    119126        dparams.rect = params->rect;
     127        /* Only allow making the window larger */
     128        gfx_rect_dims(&params->rect, &dparams.min_size);
    120129
    121130        if (ui->display != NULL) {
     
    175184                goto error;
    176185
    177         rc = ui_wdecor_create(res, params->caption, &wdecor);
     186        rc = ui_wdecor_create(res, params->caption, params->style, &wdecor);
    178187        if (rc != EOK)
    179188                goto error;
     
    185194        window->ui = ui;
    186195        window->dwindow = dwindow;
     196        window->rect = params->rect;
    187197        window->gc = gc;
    188198        window->res = res;
    189199        window->wdecor = wdecor;
     200        window->cursor = ui_curs_arrow;
    190201        *rwindow = window;
    191202        return EOK;
     
    435446}
    436447
     448/** Handle window resize event */
     449static void dwnd_resize_event(void *arg, gfx_rect_t *rect)
     450{
     451        ui_window_t *window = (ui_window_t *) arg;
     452
     453        /* Make sure we don't process events until fully initialized */
     454        if (window->wdecor == NULL)
     455                return;
     456
     457        if ((window->wdecor->style & ui_wds_resizable) == 0)
     458                return;
     459
     460        (void) ui_window_resize(window, rect);
     461        (void) ui_window_paint(window);
     462}
     463
    437464/** Handle window unfocus event. */
    438465static void dwnd_unfocus_event(void *arg)
     
    451478 *
    452479 * @param wdecor Window decoration
    453  * @param arg Argument (demo)
     480 * @param arg Argument (window)
    454481 */
    455482static void wd_close(ui_wdecor_t *wdecor, void *arg)
     
    463490 *
    464491 * @param wdecor Window decoration
    465  * @param arg Argument (demo)
     492 * @param arg Argument (window)
    466493 * @param pos Position where the title bar was pressed
    467494 */
     
    471498
    472499        (void) display_window_move_req(window->dwindow, pos);
     500}
     501
     502/** Window decoration requested window resize.
     503 *
     504 * @param wdecor Window decoration
     505 * @param arg Argument (window)
     506 * @param rsztype Resize type
     507 * @param pos Position where the button was pressed
     508 */
     509static void wd_resize(ui_wdecor_t *wdecor, void *arg,
     510    ui_wdecor_rsztype_t rsztype, gfx_coord2_t *pos)
     511{
     512        ui_window_t *window = (ui_window_t *) arg;
     513
     514        (void) display_window_resize_req(window->dwindow, rsztype, pos);
     515}
     516
     517/** Window decoration requested changing cursor.
     518 *
     519 * @param wdecor Window decoration
     520 * @param arg Argument (window)
     521 * @param cursor Cursor to set
     522 */
     523static void wd_set_cursor(ui_wdecor_t *wdecor, void *arg,
     524    ui_stock_cursor_t cursor)
     525{
     526        ui_window_t *window = (ui_window_t *) arg;
     527        display_stock_cursor_t dcursor;
     528
     529        if (cursor == window->cursor)
     530                return;
     531
     532        dcursor = dcurs_arrow;
     533
     534        switch (cursor) {
     535        case ui_curs_arrow:
     536                dcursor = dcurs_arrow;
     537                break;
     538        case ui_curs_size_ud:
     539                dcursor = dcurs_size_ud;
     540                break;
     541        case ui_curs_size_lr:
     542                dcursor = dcurs_size_lr;
     543                break;
     544        case ui_curs_size_uldr:
     545                dcursor = dcurs_size_uldr;
     546                break;
     547        case ui_curs_size_urdl:
     548                dcursor = dcurs_size_urdl;
     549                break;
     550        }
     551
     552        (void) display_window_set_cursor(window->dwindow, dcursor);
     553        window->cursor = cursor;
    473554}
    474555
Note: See TracChangeset for help on using the changeset viewer.