Changeset f6304727 in mainline for uspace/app


Ignore:
Timestamp:
2026-03-08T21:20:30Z (9 days ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
13277e3
Parents:
01cd15bc
Message:

Handle screen resize in Navigator.

Location:
uspace/app/nav
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/nav/menu.c

    r01cd15bc rf6304727  
    6565        ui_menu_entry_t *mfsep;
    6666        ui_menu_entry_t *mexit;
    67         gfx_rect_t arect;
    68         gfx_rect_t rect;
    6967        errno_t rc;
    7068
     
    148146
    149147        ui_menu_entry_set_cb(mexit, nav_menu_file_exit, (void *) menu);
    150 
    151         ui_window_get_app_rect(menu->window, &arect);
    152 
    153         rect.p0 = arect.p0;
    154         rect.p1.x = arect.p1.x;
    155         rect.p1.y = arect.p0.y + 1;
    156         ui_menu_bar_set_rect(menu->menubar, &rect);
     148        nav_menu_resize(menu);
    157149
    158150        *rmenu = menu;
     
    163155}
    164156
     157/** Resize navigator menu.
     158 *
     159 * @param menu Menu
     160 */
     161void nav_menu_resize(nav_menu_t *menu)
     162{
     163        gfx_rect_t arect;
     164        gfx_rect_t rect;
     165
     166        ui_window_get_app_rect(menu->window, &arect);
     167
     168        rect.p0 = arect.p0;
     169        rect.p1.x = arect.p1.x;
     170        rect.p1.y = arect.p0.y + 1;
     171        ui_menu_bar_set_rect(menu->menubar, &rect);
     172}
     173
    165174/** Set navigator menu callbacks.
    166175 *
  • uspace/app/nav/menu.h

    r01cd15bc rf6304727  
    4343
    4444extern errno_t nav_menu_create(ui_window_t *, nav_menu_t **);
     45extern void nav_menu_resize(nav_menu_t *);
    4546extern void nav_menu_set_cb(nav_menu_t *, nav_menu_cb_t *, void *);
    4647extern void nav_menu_destroy(nav_menu_t *);
  • uspace/app/nav/nav.c

    r01cd15bc rf6304727  
    6464#define EDITOR_CMD "/app/edit"
    6565
     66static void wnd_resize(ui_window_t *, void *);
    6667static void wnd_close(ui_window_t *, void *);
    6768static void wnd_kbd(ui_window_t *, void *, kbd_event_t *);
    6869
    6970static ui_window_cb_t window_cb = {
     71        .resize = wnd_resize,
    7072        .close = wnd_close,
    7173        .kbd = wnd_kbd
     
    9698};
    9799
     100static void navigator_panel_rect(navigator_t *, unsigned, gfx_rect_t *);
    98101static void navigator_panel_activate_req(void *, panel_t *);
    99102static void navigator_panel_file_open(void *, panel_t *, const char *);
     
    133136        .close = navigator_exists_close
    134137};
     138
     139/** Window size has changed.
     140 *
     141 * @param window Window
     142 * @param arg Argument (navigator)
     143 */
     144static void wnd_resize(ui_window_t *window, void *arg)
     145{
     146        navigator_t *navigator = (navigator_t *) arg;
     147        unsigned i;
     148        gfx_rect_t rect;
     149
     150        nav_menu_resize(navigator->menu);
     151
     152        for (i = 0; i < navigator_panels; i++) {
     153                navigator_panel_rect(navigator, i, &rect);
     154                panel_set_rect(navigator->panel[i], &rect);
     155        }
     156}
    135157
    136158/** Window close button was clicked.
     
    207229}
    208230
     231static void navigator_panel_rect(navigator_t *navigator, unsigned i,
     232    gfx_rect_t *rect)
     233{
     234        gfx_rect_t arect;
     235        gfx_coord_t pw;
     236
     237        ui_window_get_app_rect(navigator->window, &arect);
     238
     239        /* Panel width */
     240        pw = (arect.p1.x - arect.p0.x) / navigator_panels;
     241
     242        rect->p0.x = arect.p0.x + pw * i;
     243        rect->p0.y = arect.p0.y + 1;
     244        rect->p1.x = arect.p0.x + pw * (i + 1);
     245        rect->p1.y = arect.p1.y - 1;
     246}
     247
    209248/** Create navigator.
    210249 *
     
    220259        gfx_rect_t rect;
    221260        gfx_rect_t arect;
    222         gfx_coord_t pw;
    223261        unsigned i;
    224262        errno_t rc;
     
    242280        if (rc != EOK) {
    243281                printf("Error creating window.\n");
     282
    244283                goto error;
    245284        }
     
    269308        }
    270309
    271         /* Panel width */
    272         pw = (arect.p1.x - arect.p0.x) / 2;
    273 
    274         for (i = 0; i < 2; i++) {
     310        /* Create panels. */
     311        for (i = 0; i < navigator_panels; i++) {
    275312                rc = panel_create(navigator->window, i == 0,
    276313                    &navigator->panel[i]);
     
    278315                        goto error;
    279316
    280                 rect.p0.x = arect.p0.x + pw * i;
    281                 rect.p0.y = arect.p0.y + 1;
    282                 rect.p1.x = arect.p0.x + pw * (i + 1);
    283                 rect.p1.y = arect.p1.y - 1;
     317                navigator_panel_rect(navigator, i, &rect);
    284318                panel_set_rect(navigator->panel[i], &rect);
    285319
     
    326360        unsigned i;
    327361
    328         for (i = 0; i < 2; i++) {
     362        for (i = 0; i < navigator_panels; i++) {
    329363                if (navigator->panel[i] != NULL) {
    330364                        ui_fixed_remove(navigator->fixed,
     
    437471        /* First refresh inactive panel. */
    438472
    439         for (i = 0; i < 2; i++) {
     473        for (i = 0; i < navigator_panels; i++) {
    440474                if (!panel_is_active(navigator->panel[i])) {
    441475                        rc = panel_refresh(navigator->panel[i]);
     
    450484         */
    451485
    452         for (i = 0; i < 2; i++) {
     486        for (i = 0; i < navigator_panels; i++) {
    453487                if (panel_is_active(navigator->panel[i])) {
    454488                        rc = panel_refresh(navigator->panel[i]);
Note: See TracChangeset for help on using the changeset viewer.