Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset d097daca in mainline


Ignore:
Timestamp:
2021-10-04T12:33:59Z (4 months ago)
Author:
Jiri Svoboda <jiri@…>
Children:
68b9e540
Parents:
e0e1b3d
git-author:
Jiri Svoboda <jiri@…> (2021-10-03 17:33:47)
git-committer:
Jiri Svoboda <jiri@…> (2021-10-04 12:33:59)
Message:

Add menu, make window full-screen

Location:
uspace/app/nav
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/nav/meson.build

    re0e1b3d rd097daca  
    2929deps = [ 'ui' ]
    3030src = files(
     31        'menu.c',
    3132        'nav.c',
    3233)
  • uspace/app/nav/nav.c

    re0e1b3d rd097daca  
    3737#include <gfx/coord.h>
    3838#include <stdio.h>
     39#include <stdlib.h>
    3940#include <str.h>
    4041#include <ui/fixed.h>
    41 #include <ui/label.h>
    4242#include <ui/resource.h>
    4343#include <ui/ui.h>
    4444#include <ui/window.h>
     45#include "menu.h"
    4546#include "nav.h"
     47
     48static errno_t navigator_create(const char *, navigator_t **);
     49static void navigator_destroy(navigator_t *);
    4650
    4751static void wnd_close(ui_window_t *, void *);
     
    6367}
    6468
    65 /** Run navigator on the specified display. */
    66 static errno_t navigator_run(const char *display_spec)
     69/** Create navigator.
     70 *
     71 * @param display_spec Display specification
     72 * @param rnavigator Place to store pointer to new navigator
     73 * @return EOK on success or ane error code
     74 */
     75static errno_t navigator_create(const char *display_spec,
     76    navigator_t **rnavigator)
    6777{
    68         ui_t *ui = NULL;
     78        navigator_t *navigator;
    6979        ui_wnd_params_t params;
    70         ui_window_t *window = NULL;
    71         navigator_t navigator;
    72         gfx_rect_t rect;
    73         ui_resource_t *ui_res;
    7480        errno_t rc;
    7581
    76         rc = ui_create(display_spec, &ui);
     82        navigator = calloc(1, sizeof(navigator_t));
     83        if (navigator == NULL)
     84                return ENOMEM;
     85
     86        rc = ui_create(display_spec, &navigator->ui);
    7787        if (rc != EOK) {
    7888                printf("Error creating UI on display %s.\n", display_spec);
    79                 return rc;
     89                goto error;
    8090        }
    8191
    8292        ui_wnd_params_init(&params);
    8393        params.caption = "Navigator";
    84         if (ui_is_textmode(ui)) {
    85                 params.rect.p0.x = 0;
    86                 params.rect.p0.y = 0;
    87                 params.rect.p1.x = 24;
    88                 params.rect.p1.y = 5;
    89         } else {
    90                 params.rect.p0.x = 0;
    91                 params.rect.p0.y = 0;
    92                 params.rect.p1.x = 200;
    93                 params.rect.p1.y = 60;
     94        params.style &= ~ui_wds_decorated;
     95        params.placement = ui_wnd_place_full_screen;
     96
     97        rc = ui_window_create(navigator->ui, &params, &navigator->window);
     98        if (rc != EOK) {
     99                printf("Error creating window.\n");
     100                goto error;
    94101        }
    95102
    96         memset((void *) &navigator, 0, sizeof(navigator));
    97         navigator.ui = ui;
     103        ui_window_set_cb(navigator->window, &window_cb, (void *) navigator);
    98104
    99         rc = ui_window_create(ui, &params, &window);
     105        rc = ui_fixed_create(&navigator->fixed);
    100106        if (rc != EOK) {
    101                 printf("Error creating window.\n");
    102                 return rc;
     107                printf("Error creating fixed layout.\n");
     108                goto error;
    103109        }
    104110
    105         ui_window_set_cb(window, &window_cb, (void *) &navigator);
    106         navigator.window = window;
     111        ui_window_add(navigator->window, ui_fixed_ctl(navigator->fixed));
    107112
    108         ui_res = ui_window_get_res(window);
     113        rc = nav_menu_create(navigator, &navigator->menu);
     114        if (rc != EOK)
     115                goto error;
    109116
    110         rc = ui_fixed_create(&navigator.fixed);
     117        rc = ui_window_paint(navigator->window);
    111118        if (rc != EOK) {
    112                 printf("Error creating fixed layout.\n");
    113                 return rc;
     119                printf("Error painting window.\n");
     120                goto error;
    114121        }
    115122
    116         rc = ui_label_create(ui_res, "Hello!", &navigator.label);
    117         if (rc != EOK) {
    118                 printf("Error creating label.\n");
     123        *rnavigator = navigator;
     124        return EOK;
     125error:
     126        navigator_destroy(navigator);
     127        return rc;
     128}
     129
     130static void navigator_destroy(navigator_t *navigator)
     131{
     132        if (navigator->menu != NULL)
     133                nav_menu_destroy(navigator->menu);
     134        if (navigator->window != NULL)
     135                ui_window_destroy(navigator->window);
     136        if (navigator->ui != NULL)
     137                ui_destroy(navigator->ui);
     138        free(navigator);
     139}
     140
     141/** Run navigator on the specified display. */
     142static errno_t navigator_run(const char *display_spec)
     143{
     144        navigator_t *navigator;
     145        errno_t rc;
     146
     147        rc = navigator_create(display_spec, &navigator);
     148        if (rc != EOK)
    119149                return rc;
    120         }
    121150
    122         ui_window_get_app_rect(window, &rect);
    123         ui_label_set_rect(navigator.label, &rect);
    124         ui_label_set_halign(navigator.label, gfx_halign_center);
    125         ui_label_set_valign(navigator.label, gfx_valign_center);
     151        ui_run(navigator->ui);
    126152
    127         rc = ui_fixed_add(navigator.fixed, ui_label_ctl(navigator.label));
    128         if (rc != EOK) {
    129                 printf("Error adding control to layout.\n");
    130                 return rc;
    131         }
    132 
    133         ui_window_add(window, ui_fixed_ctl(navigator.fixed));
    134 
    135         rc = ui_window_paint(window);
    136         if (rc != EOK) {
    137                 printf("Error painting window.\n");
    138                 return rc;
    139         }
    140 
    141         ui_run(ui);
    142 
    143         ui_window_destroy(window);
    144         ui_destroy(ui);
    145 
     153        navigator_destroy(navigator);
    146154        return EOK;
    147155}
     
    149157static void print_syntax(void)
    150158{
    151         printf("Syntax: navigator [-d <display-spec>]\n");
     159        printf("Syntax: nav [-d <display-spec>]\n");
    152160}
    153161
  • uspace/app/nav/nav.h

    re0e1b3d rd097daca  
    11/*
    2  * Copyright (c) 2020 Jiri Svoboda
     2 * Copyright (c) 2021 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3939#include <display.h>
    4040#include <ui/fixed.h>
    41 #include <ui/label.h>
    4241#include <ui/ui.h>
    4342#include <ui/window.h>
    4443
    4544/** Navigator */
    46 typedef struct {
     45typedef struct navigator {
     46        /** User interface */
    4747        ui_t *ui;
     48        /** Window */
    4849        ui_window_t *window;
     50        /** Fixed layout */
    4951        ui_fixed_t *fixed;
    50         ui_label_t *label;
     52        /** Menu */
     53        struct nav_menu *menu;
    5154} navigator_t;
    5255
Note: See TracChangeset for help on using the changeset viewer.