Changeset 3f81cdc in mainline


Ignore:
Timestamp:
2024-03-11T10:17:27Z (7 weeks ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
c3d4b39b
Parents:
0ffa40a7
Message:

Move viewer global variables into viewer_t

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/viewer/viewer.c

    r0ffa40a7 r3f81cdc  
    5050typedef struct {
    5151        ui_t *ui;
     52
     53        size_t imgs_count;
     54        size_t imgs_current;
     55        char **imgs;
     56
     57        ui_window_t *window;
     58        gfx_bitmap_t *bitmap;
     59        ui_image_t *image;
     60        gfx_context_t *window_gc;
     61
     62        gfx_rect_t img_rect;
    5263} viewer_t;
    5364
    54 static size_t imgs_count;
    55 static size_t imgs_current = 0;
    56 static char **imgs;
    57 
    58 static ui_window_t *window = NULL;
    59 static gfx_bitmap_t *bitmap = NULL;
    60 static ui_image_t *image = NULL;
    61 static gfx_context_t *window_gc;
    62 
    63 static gfx_rect_t img_rect;
    64 
    65 static bool img_load(gfx_context_t *gc, const char *, gfx_bitmap_t **,
     65static bool viewer_img_load(viewer_t *, const char *, gfx_bitmap_t **,
    6666    gfx_rect_t *);
    67 static bool img_setup(gfx_context_t *, gfx_bitmap_t *, gfx_rect_t *);
     67static bool viewer_img_setup(viewer_t *, gfx_bitmap_t *, gfx_rect_t *);
    6868
    6969static void wnd_close(ui_window_t *, void *);
     
    9797
    9898        if ((event->type == KEY_PRESS) && (event->key == KC_PAGE_DOWN)) {
    99                 if (imgs_current == imgs_count - 1)
    100                         imgs_current = 0;
     99                if (viewer->imgs_current == viewer->imgs_count - 1)
     100                        viewer->imgs_current = 0;
    101101                else
    102                         imgs_current++;
     102                        viewer->imgs_current++;
    103103
    104104                update = true;
     
    106106
    107107        if ((event->type == KEY_PRESS) && (event->key == KC_PAGE_UP)) {
    108                 if (imgs_current == 0)
    109                         imgs_current = imgs_count - 1;
     108                if (viewer->imgs_current == 0)
     109                        viewer->imgs_current = viewer->imgs_count - 1;
    110110                else
    111                         imgs_current--;
     111                        viewer->imgs_current--;
    112112
    113113                update = true;
     
    118118                gfx_rect_t lrect;
    119119
    120                 if (!img_load(window_gc, imgs[imgs_current], &lbitmap, &lrect)) {
    121                         printf("Cannot load image \"%s\".\n", imgs[imgs_current]);
     120                if (!viewer_img_load(viewer, viewer->imgs[viewer->imgs_current],
     121                    &lbitmap, &lrect)) {
     122                        printf("Cannot load image \"%s\".\n",
     123                            viewer->imgs[viewer->imgs_current]);
    122124                        exit(4);
    123125                }
    124                 if (!img_setup(window_gc, lbitmap, &lrect)) {
    125                         printf("Cannot setup image \"%s\".\n", imgs[imgs_current]);
     126                if (!viewer_img_setup(viewer, lbitmap, &lrect)) {
     127                        printf("Cannot setup image \"%s\".\n",
     128                            viewer->imgs[viewer->imgs_current]);
    126129                        exit(6);
    127130                }
     
    129132}
    130133
    131 static bool img_load(gfx_context_t *gc, const char *fname,
     134static bool viewer_img_load(viewer_t *viewer, const char *fname,
    132135    gfx_bitmap_t **rbitmap, gfx_rect_t *rect)
    133136{
     
    160163        vfs_put(fd);
    161164
    162         rc = decode_tga(gc, tga, stat.size, rbitmap, rect);
     165        rc = decode_tga(viewer->window_gc, tga, stat.size, rbitmap, rect);
    163166        if (rc != EOK) {
    164167                free(tga);
     
    168171        free(tga);
    169172
    170         img_rect = *rect;
     173        viewer->img_rect = *rect;
    171174        return true;
    172175}
    173176
    174 static bool img_setup(gfx_context_t *gc, gfx_bitmap_t *bmp, gfx_rect_t *rect)
     177static bool viewer_img_setup(viewer_t *viewer, gfx_bitmap_t *bmp,
     178    gfx_rect_t *rect)
    175179{
    176180        gfx_rect_t arect;
     
    179183        errno_t rc;
    180184
    181         ui_res = ui_window_get_res(window);
    182 
    183         ui_window_get_app_rect(window, &arect);
     185        ui_res = ui_window_get_res(viewer->window);
     186
     187        ui_window_get_app_rect(viewer->window, &arect);
    184188
    185189        /* Center image on application area */
    186190        gfx_rect_ctr_on_rect(rect, &arect, &irect);
    187191
    188         if (image != NULL) {
    189                 ui_image_set_bmp(image, bmp, rect);
    190                 (void) ui_image_paint(image);
    191                 ui_image_set_rect(image, &irect);
     192        if (viewer->image != NULL) {
     193                ui_image_set_bmp(viewer->image, bmp, rect);
     194                (void) ui_image_paint(viewer->image);
     195                ui_image_set_rect(viewer->image, &irect);
    192196        } else {
    193                 rc = ui_image_create(ui_res, bmp, rect, &image);
     197                rc = ui_image_create(ui_res, bmp, rect, &viewer->image);
    194198                if (rc != EOK) {
    195199                        gfx_bitmap_destroy(bmp);
     
    197201                }
    198202
    199                 ui_image_set_rect(image, &irect);
    200                 ui_window_add(window, ui_image_ctl(image));
    201         }
    202 
    203         if (bitmap != NULL)
    204                 gfx_bitmap_destroy(bitmap);
    205 
    206         bitmap = bmp;
     203                ui_image_set_rect(viewer->image, &irect);
     204                ui_window_add(viewer->window, ui_image_ctl(viewer->image));
     205        }
     206
     207        if (viewer->bitmap != NULL)
     208                gfx_bitmap_destroy(viewer->bitmap);
     209
     210        viewer->bitmap = bmp;
    207211        return true;
    208212}
     
    224228        gfx_rect_t wrect;
    225229        gfx_coord2_t off;
    226         ui_t *ui;
     230        ui_t *ui = NULL;
    227231        ui_wnd_params_t params;
    228         viewer_t viewer;
     232        viewer_t *viewer;
    229233        errno_t rc;
    230234        int i;
     235        unsigned u;
     236
     237        viewer = calloc(1, sizeof(viewer_t));
     238        if (viewer == NULL) {
     239                printf("Out of memory.\n");
     240                goto error;
     241        }
    231242
    232243        i = 1;
     
    237248                                printf("Argument missing.\n");
    238249                                print_syntax();
    239                                 return 1;
     250                                goto error;
    240251                        }
    241252
     
    247258                        printf("Invalid option '%s'.\n", argv[i]);
    248259                        print_syntax();
    249                         return 1;
     260                        goto error;
    250261                }
    251262        }
     
    254265                printf("No image files specified.\n");
    255266                print_syntax();
    256                 return 1;
    257         }
    258 
    259         imgs_count = argc - i;
    260         imgs = calloc(imgs_count, sizeof(char *));
    261         if (imgs == NULL) {
     267                goto error;
     268        }
     269
     270        viewer->imgs_count = argc - i;
     271        viewer->imgs = calloc(viewer->imgs_count, sizeof(char *));
     272        if (viewer->imgs == NULL) {
    262273                printf("Out of memory.\n");
    263                 return 1;
     274                goto error;
    264275        }
    265276
    266277        for (int j = 0; j < argc - i; j++) {
    267                 imgs[j] = str_dup(argv[i + j]);
    268                 if (imgs[j] == NULL) {
     278                viewer->imgs[j] = str_dup(argv[i + j]);
     279                if (viewer->imgs[j] == NULL) {
    269280                        printf("Out of memory.\n");
    270                         return 3;
     281                        goto error;
    271282                }
    272283        }
     
    275286        if (rc != EOK) {
    276287                printf("Error creating UI on display %s.\n", display_spec);
    277                 return 1;
     288                goto error;
    278289        }
    279290
     
    281292                fullscreen = true;
    282293
    283         viewer.ui = ui;
     294        viewer->ui = ui;
    284295
    285296        /*
     
    299310        }
    300311
    301         rc = ui_window_create(ui, &params, &window);
     312        rc = ui_window_create(ui, &params, &viewer->window);
    302313        if (rc != EOK) {
    303314                printf("Error creating window.\n");
     
    305316        }
    306317
    307         window_gc = ui_window_get_gc(window);
    308 
    309         ui_window_set_cb(window, &window_cb, (void *) &viewer);
    310 
    311         if (!img_load(window_gc, imgs[imgs_current], &lbitmap, &lrect)) {
    312                 printf("Cannot load image \"%s\".\n", imgs[imgs_current]);
     318        viewer->window_gc = ui_window_get_gc(viewer->window);
     319
     320        ui_window_set_cb(viewer->window, &window_cb, (void *)viewer);
     321
     322        if (!viewer_img_load(viewer, viewer->imgs[viewer->imgs_current],
     323            &lbitmap, &lrect)) {
     324                printf("Cannot load image \"%s\".\n",
     325                    viewer->imgs[viewer->imgs_current]);
    313326                goto error;
    314327        }
     
    323336
    324337        if (!fullscreen) {
    325                 rc = ui_window_resize(window, &rect);
     338                rc = ui_window_resize(viewer->window, &rect);
    326339                if (rc != EOK) {
    327340                        printf("Error resizing window.\n");
     
    330343        }
    331344
    332         if (!img_setup(window_gc, lbitmap, &lrect)) {
    333                 printf("Cannot setup image \"%s\".\n", imgs[imgs_current]);
    334                 goto error;
    335         }
    336 
    337         rc = ui_window_paint(window);
     345        if (!viewer_img_setup(viewer, lbitmap, &lrect)) {
     346                printf("Cannot setup image \"%s\".\n",
     347                    viewer->imgs[viewer->imgs_current]);
     348                goto error;
     349        }
     350
     351        rc = ui_window_paint(viewer->window);
    338352        if (rc != EOK) {
    339353                printf("Error painting window.\n");
     
    343357        ui_run(ui);
    344358
    345         ui_window_destroy(window);
     359        ui_window_destroy(viewer->window);
    346360        ui_destroy(ui);
     361        free(viewer);
    347362
    348363        return 0;
    349364error:
    350         if (window != NULL)
    351                 ui_window_destroy(window);
    352         ui_destroy(ui);
     365        if (viewer != NULL && viewer->imgs != NULL) {
     366                for (u = 0; u < viewer->imgs_count; u++) {
     367                        if (viewer->imgs[i] != NULL)
     368                                free(viewer->imgs[i]);
     369                }
     370                free(viewer->imgs);
     371        }
     372        if (viewer != NULL && viewer->window != NULL)
     373                ui_window_destroy(viewer->window);
     374        if (ui != NULL)
     375                ui_destroy(ui);
     376        if (viewer != NULL)
     377                free(viewer);
    353378        return 1;
    354379}
Note: See TracChangeset for help on using the changeset viewer.