Changes in uspace/lib/ui/src/ui.c [983052c:26edcd6] in mainline


Ignore:
File:
1 edited

Legend:

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

    r983052c r26edcd6  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    326326}
    327327
     328/** Resize UI after screen size change.
     329 *
     330 * @param ui UI
     331 * @param rect New screen rectangle.
     332 */
     333static void ui_resize(ui_t *ui, gfx_rect_t *rect)
     334{
     335        ui_window_t *wnd;
     336
     337        ui->rect = *rect;
     338
     339        /* Reposition/resize windows */
     340        wnd = ui_window_first(ui);
     341        while (wnd != NULL) {
     342                ui_window_update_placement(wnd);
     343                wnd = ui_window_next(wnd);
     344        }
     345
     346        /*
     347         * XXX Resizing cleared console GC so we need to repaint the
     348         * background.
     349         */
     350        (void)ui_paint(ui);
     351}
     352
    328353static void ui_cons_event_process(ui_t *ui, cons_event_t *event)
    329354{
     
    331356        ui_evclaim_t claim;
    332357        pos_event_t pos;
     358        sysarg_t cols, rows;
     359        gfx_rect_t rect;
     360        errno_t rc;
    333361
    334362        awnd = ui_window_get_active(ui);
     
    357385
    358386                break;
     387        case CEV_RESIZE:
     388                rc = console_gc_resize(ui->cgc);
     389                if (rc != EOK) {
     390                        /* XXX No good way to recover. */
     391                        console_done(ui->console);
     392                        exit(1);
     393                }
     394
     395                rc = console_get_size(ui->console, &cols, &rows);
     396                if (rc != EOK) {
     397                        /* XXX No good way to recover. */
     398                        console_done(ui->console);
     399                        exit(1);
     400                }
     401
     402                ui_lock(ui);
     403
     404                rect.p0.x = 0;
     405                rect.p0.y = 0;
     406                rect.p1.x = cols;
     407                rect.p1.y = rows;
     408
     409                ui_resize(ui, &rect);
     410                ui_unlock(ui);
     411                break;
    359412        }
    360413}
     
    407460        errno_t rc;
    408461        gfx_context_t *gc;
    409         ui_window_t *awnd;
     462        ui_window_t *wnd;
    410463        gfx_color_t *color = NULL;
    411464
     
    434487        gfx_color_delete(color);
    435488
    436         /* XXX Should repaint all windows */
    437         awnd = ui_window_get_active(ui);
    438         if (awnd == NULL)
    439                 return EOK;
    440 
    441         rc = ui_wdecor_paint(awnd->wdecor);
    442         if (rc != EOK)
    443                 return rc;
    444 
    445         return ui_window_paint(awnd);
     489        /* Repaint all windows */
     490        wnd = ui_window_first(ui);
     491        while (wnd != NULL) {
     492                rc = ui_wdecor_paint(wnd->wdecor);
     493                if (rc != EOK)
     494                        return rc;
     495
     496                rc = ui_window_paint(wnd);
     497                if (rc != EOK)
     498                        return rc;
     499
     500                wnd = ui_window_next(wnd);
     501        }
     502
     503        return EOK;
    446504}
    447505
     
    563621void ui_lock(ui_t *ui)
    564622{
     623        if (ui->display != NULL)
     624                display_lock(ui->display);
    565625        fibril_mutex_lock(&ui->lock);
    566626}
     
    577637{
    578638        fibril_mutex_unlock(&ui->lock);
     639        if (ui->display != NULL)
     640                display_unlock(ui->display);
    579641}
    580642
Note: See TracChangeset for help on using the changeset viewer.