Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/tetris/screen.c

    r87822ce r09f41d3  
    11/*
     2 * Copyright (c) 2024 Jiri Svoboda
    23 * Copyright (c) 2011 Martin Decky
    34 * All rights reserved.
     
    7273static int isset;               /* true => terminal is in game mode */
    7374
    74 static bool use_color;          /* true => use colors */
     75static bool use_rgb;          /* true => use RGB colors */
     76static bool use_color;          /* true => use indexed colors */
    7577
    7678static const struct shape *lastshape;
     
    7880static usec_t timeleft = 0;
    7981
     82bool size_changed;
    8083console_ctrl_t *console;
    8184
     
    9295static void start_standout(uint32_t color)
    9396{
     97        uint8_t bg;
     98        uint8_t attr;
     99
    94100        console_flush(console);
    95         console_set_rgb_color(console, use_color ? color : 0x000000,
    96             0xffffff);
     101        if (use_rgb) {
     102                console_set_rgb_color(console, color, 0xffffff);
     103        } else if (use_color) {
     104                bg = 0x00;
     105                attr = 0;
     106                if ((color & 0xff0000) != 0)
     107                        bg |= 0x4;
     108                if ((color & 0x00ff00) != 0)
     109                        bg |= 0x2;
     110                if ((color & 0x0000ff) != 0)
     111                        bg |= 0x1;
     112                console_set_color(console, bg, 0x00, attr);
     113        }
    97114}
    98115
     
    127144        console_cursor_visibility(console, 0);
    128145        resume_normal();
    129         scr_clear();
     146        scr_set();
    130147}
    131148
     
    143160}
    144161
    145 static bool get_display_color_sup(void)
     162static void get_display_color_sup(bool *rgb, bool *color)
    146163{
    147164        sysarg_t ccap;
    148165        errno_t rc = console_get_color_cap(console, &ccap);
    149166
    150         if (rc != EOK)
    151                 return false;
    152 
    153         return ((ccap & CONSOLE_CAP_RGB) == CONSOLE_CAP_RGB);
     167        if (rc != EOK) {
     168                *rgb = false;
     169                *color = false;
     170                return;
     171        }
     172
     173        if ((ccap & CONSOLE_CAP_CURSORCTL) == 0) {
     174                stop("Your screen does not support cursor control.\n");
     175                return;
     176        }
     177        *rgb = ((ccap & CONSOLE_CAP_RGB) == CONSOLE_CAP_RGB);
     178        *color = ((ccap & CONSOLE_CAP_INDEXED) == CONSOLE_CAP_INDEXED);
    154179}
    155180
     
    169194        }
    170195
    171         use_color = get_display_color_sup();
     196        get_display_color_sup(&use_rgb, &use_color);
    172197
    173198        if ((Rows < MINROWS) || (Cols < MINCOLS)) {
     
    175200
    176201                snprintf(smallscr, sizeof(smallscr),
    177                     "the screen is too small (must be at least %dx%d)",
     202                    "the screen is too small (must be at least %dx%d)\n",
    178203                    MINROWS, MINCOLS);
    179204                stop(smallscr);
     
    198223
    199224        fprintf(stderr, "aborting: %s", why);
    200         abort();
     225        exit(1);
    201226}
    202227
     
    391416                        exit(1);
    392417
     418                if (event.type == CEV_RESIZE)
     419                        size_changed = true;
     420
    393421                if (event.type == CEV_KEY && event.ev.key.type == KEY_PRESS)
    394422                        c = event.ev.key.c;
Note: See TracChangeset for help on using the changeset viewer.