Changeset 211fd68 in mainline


Ignore:
Timestamp:
2024-03-08T10:41:31Z (8 weeks ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
0a411bbf
Parents:
cd27cd1
git-author:
Jiri Svoboda <jiri@…> (2024-03-07 18:41:21)
git-committer:
Jiri Svoboda <jiri@…> (2024-03-08 10:41:31)
Message:

Add text mode support to Barber

Files:
30 added
13 edited

Legend:

Unmodified
Added
Removed
  • tools/mkarray.py

    rcd27cd1 r211fd68  
    3939def usage(prname):
    4040        "Print usage syntax"
    41         print("%s [--deflate] <DESTINATION> <LABEL> <AS_PROLOG> <SECTION> [SOURCE ...]" % prname)
     41        print("%s [--deflate] <DESTINATION> <TYPENAME> <LABEL> <AS_PROLOG> <SECTION> [SOURCE ...]" % prname)
    4242
    4343def arg_check():
    44         if (len(sys.argv) < 5):
     44        if (len(sys.argv) < 6):
    4545                usage(sys.argv[0])
    4646                sys.exit()
     
    6666
    6767        dest = sys.argv[1]
    68         label = sys.argv[2]
    69         as_prolog = sys.argv[3]
    70         section = sys.argv[4]
     68        typename = sys.argv[2]
     69        label = sys.argv[3]
     70        as_prolog = sys.argv[4]
     71        section = sys.argv[5]
    7172
    7273        timestamp = (1980, 1, 1, 0, 0, 0)
     
    8182        archive = zipfile.ZipFile("%s.zip" % dest, "w", zipfile.ZIP_STORED)
    8283
    83         for src in sys.argv[5:]:
     84        for src in sys.argv[6:]:
    8485                basename = os.path.basename(src)
    8586                plainname = os.path.splitext(basename)[0]
     
    147148        data += "#include <stdbool.h>\n\n"
    148149        data += "#define %sS  %u\n\n" % (label.upper(), src_cnt)
     150        data += "#ifndef %sS_T_\n" % typename.upper()
     151        data += "#define %sS_T_\n\n" % typename.upper()
    149152        data += "typedef struct {\n"
    150153        data += "\tconst char *name;\n"
     
    153156        data += "\tsize_t inflated;\n"
    154157        data += "\tbool compressed;\n"
    155         data += "} %s_t;\n\n" % label
    156         data += "extern %s_t %ss[];\n\n" % (label, label)
     158        data += "} %s_t;\n\n" % typename
     159        data += "#endif\n"
     160        data += "extern %s_t %ss[];\n\n" % (typename, label)
    157161        data += "\n".join(header_ctx)
    158162        data += "\n\n"
     
    179183        data += ' */\n\n'
    180184        data += "#include \"%s.h\"\n\n" % dest
    181         data += "%s_t %ss[] = {\n" % (label, label)
     185        data += "%s_t %ss[] = {\n" % (typename, label)
    182186        data += ",\n".join(desc_ctx)
    183187        data += "\n"
  • uspace/app/aboutos/meson.build

    rcd27cd1 r211fd68  
    3535        input : _images,
    3636        output : [ 'images.zip' ],
    37         command : [ mkarray, '@OUTDIR@', 'images', 'image', uspace_as_prolog, '.data', '@INPUT@' ],
     37        command : [ mkarray, '@OUTDIR@', 'images', 'image', 'image', uspace_as_prolog, '.data', '@INPUT@' ],
    3838)
    3939_imgs_s = custom_target('aboutos_images.s',
  • uspace/app/barber/barber.c

    rcd27cd1 r211fd68  
    5050#include <ui/image.h>
    5151#include "images.h"
     52#include "images_tiny.h"
    5253
    5354#define NAME  "barber"
     
    6061#define MIN_LOAD  (LOAD_UNIT / 4)
    6162#define MAX_LOAD  (LOAD_UNIT / 3)
    62 
    63 #define FRAME_WIDTH   59
    64 #define FRAME_HEIGHT  192
    6563
    6664#define LED_PERIOD  1000000
     
    9795static unsigned int frame = 0;
    9896static unsigned int fps = MIN_FPS;
     97static gfx_coord_t frame_width;
     98static gfx_coord_t frame_height;
    9999
    100100static void led_timer_callback(void *);
     
    119119}
    120120
    121 static bool decode_frames(gfx_context_t *gc)
     121static bool decode_frames(gfx_context_t *gc, image_t *img)
    122122{
    123123        gfx_rect_t rect;
     
    125125
    126126        for (unsigned int i = 0; i < FRAMES; i++) {
    127                 rc = decode_tga_gz(gc, images[i].addr, images[i].size,
     127                rc = decode_tga_gz(gc, img[i].addr, img[i].size,
    128128                    &frame_bmp[i], &rect);
    129129                if (rc != EOK) {
     
    132132                }
    133133
    134                 (void) rect;
     134                (void)rect;
    135135        }
    136136
     
    238238        rect.p0.x = 0;
    239239        rect.p0.y = 0;
    240         rect.p1.x = FRAME_WIDTH;
    241         rect.p1.y = FRAME_HEIGHT;
     240        rect.p1.x = frame_width;
     241        rect.p1.y = frame_height;
    242242
    243243        ui_image_set_bmp(frame_img, frame_bmp[frame], &rect);
     
    299299int main(int argc, char *argv[])
    300300{
    301         const char *display_spec = UI_DISPLAY_DEFAULT;
     301        const char *display_spec = UI_ANY_DEFAULT;
    302302        barber_t barber;
    303303        ui_t *ui;
     
    310310        gfx_context_t *gc;
    311311        gfx_coord2_t off;
     312        image_t *img;
    312313        int i;
    313314
     
    355356        }
    356357
     358        if (ui_is_textmode(ui)) {
     359                frame_width = 10;
     360                frame_height = 16;
     361        } else {
     362                frame_width = 59;
     363                frame_height = 192;
     364        }
     365
    357366        rect.p0.x = 0;
    358367        rect.p0.y = 0;
    359         rect.p1.x = FRAME_WIDTH;
    360         rect.p1.y = FRAME_HEIGHT;
     368        rect.p1.x = frame_width;
     369        rect.p1.y = frame_height;
    361370
    362371        ui_wnd_params_init(&params);
     
    367376         * to rect
    368377         */
    369         ui_wdecor_rect_from_app(params.style, &rect, &wrect);
     378        ui_wdecor_rect_from_app(ui, params.style, &rect, &wrect);
    370379        off = wrect.p0;
    371380        gfx_rect_rtranslate(&off, &wrect, &params.rect);
     
    384393        ui_window_set_cb(window, &window_cb, (void *) &barber);
    385394
    386         if (!decode_frames(gc))
     395        img = ui_is_textmode(ui) ? image_tinys : images;
     396
     397        if (!decode_frames(gc, img))
    387398                return 1;
    388399
  • uspace/app/barber/meson.build

    rcd27cd1 r211fd68  
    6262)
    6363
     64_images_tiny = files(
     65        'gfx-tiny/frame01t.tga.gz',
     66        'gfx-tiny/frame02t.tga.gz',
     67        'gfx-tiny/frame03t.tga.gz',
     68        'gfx-tiny/frame04t.tga.gz',
     69        'gfx-tiny/frame05t.tga.gz',
     70        'gfx-tiny/frame06t.tga.gz',
     71        'gfx-tiny/frame07t.tga.gz',
     72        'gfx-tiny/frame08t.tga.gz',
     73        'gfx-tiny/frame09t.tga.gz',
     74        'gfx-tiny/frame10t.tga.gz',
     75        'gfx-tiny/frame11t.tga.gz',
     76        'gfx-tiny/frame12t.tga.gz',
     77        'gfx-tiny/frame13t.tga.gz',
     78        'gfx-tiny/frame14t.tga.gz',
     79        'gfx-tiny/frame15t.tga.gz',
     80        'gfx-tiny/frame16t.tga.gz',
     81        'gfx-tiny/frame17t.tga.gz',
     82        'gfx-tiny/frame18t.tga.gz',
     83        'gfx-tiny/frame19t.tga.gz',
     84        'gfx-tiny/frame20t.tga.gz',
     85        'gfx-tiny/frame21t.tga.gz',
     86        'gfx-tiny/frame22t.tga.gz',
     87        'gfx-tiny/frame23t.tga.gz',
     88        'gfx-tiny/frame24t.tga.gz',
     89        'gfx-tiny/frame25t.tga.gz',
     90        'gfx-tiny/frame26t.tga.gz',
     91        'gfx-tiny/frame27t.tga.gz',
     92        'gfx-tiny/frame28t.tga.gz',
     93        'gfx-tiny/frame29t.tga.gz',
     94        'gfx-tiny/frame30t.tga.gz',
     95)
     96
    6497_tarball = custom_target('barber_images.tar',
    6598        input: _images,
     
    70103# TODO
    71104
     105# Normal images
     106
    72107_images_zip = custom_target('barber_images.zip',
    73108        input : _images,
    74109        output : [ 'images.zip' ],
    75         command : [ mkarray, '@OUTDIR@', 'images', 'image', uspace_as_prolog, '.data', '@INPUT@' ],
     110        command : [ mkarray, '@OUTDIR@', 'images', 'image', 'image', uspace_as_prolog, '.data', '@INPUT@' ],
    76111)
    77112_imgs_s = custom_target('barber_images.s',
     
    94129)
    95130
    96 src = [ files('barber.c'), _imgs_s, _imgs_h, _imgs_desc_c ]
     131# Tiny images
     132
     133_images_tiny_zip = custom_target('barber_images_tiny.zip',
     134        input : _images_tiny,
     135        output : [ 'images_tiny.zip' ],
     136        command : [ mkarray, '@OUTDIR@', 'images_tiny', 'image', 'image_tiny', uspace_as_prolog, '.data', '@INPUT@' ],
     137)
     138_imgs_tiny_s = custom_target('barber_images_tiny.s',
     139        input : _images_tiny_zip,
     140        output : [ 'images_tiny.s' ],
     141        command : [ unzip, '-p', '@INPUT@', 'images_tiny.s' ],
     142        capture : true,
     143)
     144_imgs_tiny_h = custom_target('barber_images_tiny.h',
     145        input : _images_tiny_zip,
     146        output : [ 'images_tiny.h' ],
     147        command : [ unzip, '-p', '@INPUT@', 'images_tiny.h' ],
     148        capture : true,
     149)
     150_imgs_tiny_desc_c = custom_target('barber_images_tiny_desc.c',
     151        input : _images_tiny_zip,
     152        output : [ 'images_tiny_desc.c' ],
     153        command : [ unzip, '-p', '@INPUT@', 'images_tiny_desc.c' ],
     154        capture : true,
     155)
     156
     157src = [ files('barber.c'), _imgs_s, _imgs_h, _imgs_desc_c,
     158    _imgs_tiny_s, _imgs_tiny_h, _imgs_tiny_desc_c ]
  • uspace/app/fontedit/fontedit.c

    rcd27cd1 r211fd68  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    787787         * to rect
    788788         */
    789         ui_wdecor_rect_from_app(params.style, &rect, &wrect);
     789        ui_wdecor_rect_from_app(ui, params.style, &rect, &wrect);
    790790        off = wrect.p0;
    791791        gfx_rect_rtranslate(&off, &wrect, &params.rect);
  • uspace/app/gfxdemo/gfxdemo.c

    rcd27cd1 r211fd68  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    11601160         * to rect
    11611161         */
    1162         ui_wdecor_rect_from_app(params.style, &rect, &wrect);
     1162        ui_wdecor_rect_from_app(ui, params.style, &rect, &wrect);
    11631163        off = wrect.p0;
    11641164        gfx_rect_rtranslate(&off, &wrect, &params.rect);
  • uspace/app/terminal/terminal.c

    rcd27cd1 r211fd68  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * Copyright (c) 2012 Petr Koupy
    44 * All rights reserved.
     
    974974                wparams.placement = ui_wnd_place_top_left;
    975975
     976        rc = ui_create(display_spec, &term->ui);
     977        if (rc != EOK) {
     978                printf("Error creating UI on %s.\n", display_spec);
     979                goto error;
     980        }
     981
    976982        /*
    977983         * Compute window rectangle such that application area corresponds
    978984         * to rect
    979985         */
    980         ui_wdecor_rect_from_app(wparams.style, &rect, &wrect);
     986        ui_wdecor_rect_from_app(term->ui, wparams.style, &rect, &wrect);
    981987        off = wrect.p0;
    982988        gfx_rect_rtranslate(&off, &wrect, &wparams.rect);
    983989
    984990        term->off = off;
    985 
    986         rc = ui_create(display_spec, &term->ui);
    987         if (rc != EOK) {
    988                 printf("Error creating UI on %s.\n", display_spec);
    989                 goto error;
    990         }
    991991
    992992        rc = ui_window_create(term->ui, &wparams, &term->window);
  • uspace/app/viewer/viewer.c

    rcd27cd1 r211fd68  
    11/*
    2  * Copyright (c) 2020 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * Copyright (c) 2013 Martin Decky
    44 * All rights reserved.
     
    314314         * to rect
    315315         */
    316         ui_wdecor_rect_from_app(params.style, &lrect, &wrect);
     316        ui_wdecor_rect_from_app(ui, params.style, &lrect, &wrect);
    317317        off = wrect.p0;
    318318        gfx_rect_rtranslate(&off, &wrect, &rect);
  • uspace/lib/congfx/src/console.c

    rcd27cd1 r211fd68  
    9191        uint8_t attr;
    9292
    93         if ((clr >> 24) == 0) {
     93        if ((clr >> 24) == 0xff) {
    9494                /* RGB (no text) */
    9595                ch->ch = 0;
  • uspace/lib/gfx/src/color.c

    rcd27cd1 r211fd68  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6464        color->g = g;
    6565        color->b = b;
     66        color->attr = 0xff;
    6667
    6768        *rcolor = color;
  • uspace/lib/ui/include/ui/wdecor.h

    rcd27cd1 r211fd68  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4444#include <types/ui/event.h>
    4545#include <types/ui/resource.h>
     46#include <types/ui/ui.h>
    4647#include <types/ui/wdecor.h>
    4748
     
    5859extern ui_evclaim_t ui_wdecor_kbd_event(ui_wdecor_t *, kbd_event_t *);
    5960extern ui_evclaim_t ui_wdecor_pos_event(ui_wdecor_t *, pos_event_t *);
    60 extern void ui_wdecor_rect_from_app(ui_wdecor_style_t, gfx_rect_t *,
     61extern void ui_wdecor_rect_from_app(ui_t *, ui_wdecor_style_t, gfx_rect_t *,
    6162    gfx_rect_t *);
    6263extern void ui_wdecor_app_from_rect(ui_wdecor_style_t, gfx_rect_t *,
  • uspace/lib/ui/src/wdecor.c

    rcd27cd1 r211fd68  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4545#include <ui/paint.h>
    4646#include <ui/pbutton.h>
     47#include <ui/ui.h>
    4748#include <ui/wdecor.h>
    4849#include "../private/resource.h"
     
    9495        /** Window resizing edge height */
    9596        wdecor_edge_h = 4,
     97        /** Window resizing edge witdth */
     98        wdecor_edge_w_text = 1,
     99        /** Window resizing edge height */
     100        wdecor_edge_h_text = 1,
    96101        /** Title bar height */
    97102        wdecor_tbar_h = 22,
     
    860865 * and its decoration.
    861866 *
     867 * @param ui UI
    862868 * @param style Decoration style
    863869 * @param app Application area rectangle
    864870 * @param rect Place to store (outer) window decoration rectangle
    865871 */
    866 void ui_wdecor_rect_from_app(ui_wdecor_style_t style, gfx_rect_t *app,
    867     gfx_rect_t *rect)
    868 {
     872void ui_wdecor_rect_from_app(ui_t *ui, ui_wdecor_style_t style,
     873    gfx_rect_t *app, gfx_rect_t *rect)
     874{
     875        bool textmode;
     876        gfx_coord_t edge_w, edge_h;
    869877        *rect = *app;
    870878
     879        textmode = ui_is_textmode(ui);
     880        if (textmode) {
     881                edge_w = wdecor_edge_w_text;
     882                edge_h = wdecor_edge_h_text;
     883        } else {
     884                edge_w = wdecor_edge_w;
     885                edge_h = wdecor_edge_h;
     886        }
     887
    871888        if ((style & ui_wds_frame) != 0) {
    872                 rect->p0.x -= wdecor_edge_w;
    873                 rect->p0.y -= wdecor_edge_h;
    874                 rect->p1.x += wdecor_edge_w;
    875                 rect->p1.y += wdecor_edge_h;
    876         }
    877 
    878         if ((style & ui_wds_titlebar) != 0)
    879                 rect->p0.y -= 22;
     889                rect->p0.x -= edge_w;
     890                rect->p0.y -= edge_h;
     891                rect->p1.x += edge_w;
     892                rect->p1.y += edge_h;
     893        }
     894
     895        if ((style & ui_wds_titlebar) != 0 && !textmode)
     896                rect->p0.y -= wdecor_tbar_h;
    880897}
    881898
  • uspace/lib/ui/test/wdecor.c

    rcd27cd1 r211fd68  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3434#include <ui/pbutton.h>
    3535#include <ui/resource.h>
     36#include <ui/ui.h>
    3637#include <ui/wdecor.h>
    3738#include "../private/wdecor.h"
     
    13221323PCUT_TEST(rect_from_app)
    13231324{
     1325        errno_t rc;
     1326        ui_t *ui = NULL;
    13241327        gfx_rect_t arect;
    13251328        gfx_rect_t rect;
     1329
     1330        rc = ui_create_disp(NULL, &ui);
     1331        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    13261332
    13271333        arect.p0.x = 14;
     
    13301336        arect.p1.y = 196;
    13311337
    1332         ui_wdecor_rect_from_app(ui_wds_none, &arect, &rect);
     1338        ui_wdecor_rect_from_app(ui, ui_wds_none, &arect, &rect);
    13331339
    13341340        PCUT_ASSERT_INT_EQUALS(14, rect.p0.x);
     
    13371343        PCUT_ASSERT_INT_EQUALS(196, rect.p1.y);
    13381344
    1339         ui_wdecor_rect_from_app(ui_wds_frame, &arect, &rect);
     1345        ui_wdecor_rect_from_app(ui, ui_wds_frame, &arect, &rect);
    13401346
    13411347        PCUT_ASSERT_INT_EQUALS(10, rect.p0.x);
     
    13441350        PCUT_ASSERT_INT_EQUALS(200, rect.p1.y);
    13451351
    1346         ui_wdecor_rect_from_app(ui_wds_decorated, &arect, &rect);
     1352        ui_wdecor_rect_from_app(ui, ui_wds_decorated, &arect, &rect);
    13471353
    13481354        PCUT_ASSERT_INT_EQUALS(10, rect.p0.x);
     
    13511357        PCUT_ASSERT_INT_EQUALS(200, rect.p1.y);
    13521358
     1359        ui_destroy(ui);
    13531360}
    13541361
Note: See TracChangeset for help on using the changeset viewer.