Changeset 90f1f19 in mainline for uspace/lib/ui/src/window.c


Ignore:
Timestamp:
2021-06-10T13:22:33Z (3 years ago)
Author:
jxsvoboda <5887334+jxsvoboda@…>
Branches:
master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
db3895d
Parents:
98735eb
git-author:
Jiri Svoboda <jiri@…> (2021-06-09 18:51:04)
git-committer:
jxsvoboda <5887334+jxsvoboda@…> (2021-06-10 13:22:33)
Message:

Allow setting initial window position (instead of moving the window)

To reduce display artifacts. We can create the menu popup windows
in the correct place from the start. The same goes for regular
windows with specific placement.

File:
1 edited

Legend:

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

    r98735eb r90f1f19  
    109109}
    110110
    111 static errno_t ui_window_place(ui_window_t *window, display_t *display,
    112     display_info_t *info, ui_wnd_params_t *params)
    113 {
    114         gfx_coord2_t pos;
    115         errno_t rc;
    116 
     111/** Compute where window should be placed on the screen.
     112 *
     113 * This only applies to windows that do not use default placement.
     114 *
     115 * @param window Window
     116 * @param display Display
     117 * @param info Display info
     118 * @param params Window parameters
     119 * @param pos Place to store position of top-left corner
     120 */
     121static void ui_window_place(ui_window_t *window, display_t *display,
     122    display_info_t *info, ui_wnd_params_t *params, gfx_coord2_t *pos)
     123{
    117124        assert(params->placement != ui_wnd_place_default);
    118125
    119         pos.x = 0;
    120         pos.y = 0;
     126        pos->x = 0;
     127        pos->y = 0;
     128
    121129        switch (params->placement) {
    122130        case ui_wnd_place_default:
     
    124132        case ui_wnd_place_top_left:
    125133        case ui_wnd_place_full_screen:
    126                 pos.x = info->rect.p0.x - params->rect.p0.x;
    127                 pos.y = info->rect.p0.y - params->rect.p0.y;
     134                pos->x = info->rect.p0.x - params->rect.p0.x;
     135                pos->y = info->rect.p0.y - params->rect.p0.y;
    128136                break;
    129137        case ui_wnd_place_top_right:
    130                 pos.x = info->rect.p1.x - params->rect.p1.x;
    131                 pos.y = info->rect.p0.y - params->rect.p0.y;
     138                pos->x = info->rect.p1.x - params->rect.p1.x;
     139                pos->y = info->rect.p0.y - params->rect.p0.y;
    132140                break;
    133141        case ui_wnd_place_bottom_left:
    134                 pos.x = info->rect.p0.x - params->rect.p0.x;
    135                 pos.y = info->rect.p1.y - params->rect.p1.y;
     142                pos->x = info->rect.p0.x - params->rect.p0.x;
     143                pos->y = info->rect.p1.y - params->rect.p1.y;
    136144                break;
    137145        case ui_wnd_place_bottom_right:
    138                 pos.x = info->rect.p1.x - params->rect.p1.x;
    139                 pos.y = info->rect.p1.y - params->rect.p1.y;
     146                pos->x = info->rect.p1.x - params->rect.p1.x;
     147                pos->y = info->rect.p1.y - params->rect.p1.y;
    140148                break;
    141149        case ui_wnd_place_popup:
    142150                /* Place popup window below parent rectangle */
    143                 pos.x = params->prect.p0.x;
    144                 pos.y = params->prect.p1.y;
     151                pos->x = params->prect.p0.x;
     152                pos->y = params->prect.p1.y;
    145153                break;
    146154        }
    147 
    148         rc = display_window_move(window->dwindow, &pos);
    149         if (rc != EOK)
    150                 goto error;
    151 
    152         return EOK;
    153 error:
    154         return rc;
    155155}
    156156
     
    205205                }
    206206
     207                if (params->placement != ui_wnd_place_default) {
     208                        /* Set initial display window position */
     209                        ui_window_place(window, ui->display, &info,
     210                            params, &dparams.pos);
     211
     212                        dparams.flags |= wndf_setpos;
     213                }
     214
    207215                rc = display_window_create(ui->display, &dparams, &dwnd_cb,
    208216                    (void *) window, &window->dwindow);
    209217                if (rc != EOK)
    210218                        goto error;
    211 
    212                 if (params->placement != ui_wnd_place_default) {
    213                         rc = ui_window_place(window, ui->display, &info,
    214                             params);
    215                         if (rc != EOK)
    216                                 goto error;
    217                 }
    218219
    219220                rc = display_window_get_gc(window->dwindow, &gc);
Note: See TracChangeset for help on using the changeset viewer.