Ignore:
Timestamp:
Nov 28, 2003, 9:39:54 PM (17 years ago)
Author:
Sam Hocevar
Message:
  • src/bitmap.c: + Dither chroma outside of rgb2hsv_default(). + Clip fromx and fromy values.
  • NOTES: + Link to the XTerm control sequences.
  • examples/view.c: + Draw status bar. + Move with 'h' 'j' 'k' 'l', à la vi. + '?' toggles a help menu.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/examples/view.c

    r217 r230  
    2525
    2626#include <stdio.h>
     27#include <string.h>
    2728
    2829#define X_DISPLAY_MISSING 1
     
    4142int main(int argc, char **argv)
    4243{
    43     int quit = 0, update = 1;
     44    int quit = 0, update = 1, help = 0;
    4445    int x, y, w, h, zoom = 0;
    4546
     
    109110                update = 1;
    110111                break;
     112            case CACA_EVENT_KEY_PRESS | 'k':
     113            case CACA_EVENT_KEY_PRESS | 'K':
    111114            case CACA_EVENT_KEY_PRESS | CACA_KEY_UP:
    112115                if(zoom > 0) y -= 1 + h / (2 + zoom) / 8;
    113116                update = 1;
    114117                break;
     118            case CACA_EVENT_KEY_PRESS | 'j':
     119            case CACA_EVENT_KEY_PRESS | 'J':
    115120            case CACA_EVENT_KEY_PRESS | CACA_KEY_DOWN:
    116121                if(zoom > 0) y += 1 + h / (2 + zoom) / 8;
    117122                update = 1;
    118123                break;
     124            case CACA_EVENT_KEY_PRESS | 'h':
     125            case CACA_EVENT_KEY_PRESS | 'H':
    119126            case CACA_EVENT_KEY_PRESS | CACA_KEY_LEFT:
    120127                if(zoom > 0) x -= 1 + w / (2 + zoom) / 8;
    121128                update = 1;
    122129                break;
     130            case CACA_EVENT_KEY_PRESS | 'l':
     131            case CACA_EVENT_KEY_PRESS | 'L':
    123132            case CACA_EVENT_KEY_PRESS | CACA_KEY_RIGHT:
    124133                if(zoom > 0) x += 1 + w / (2 + zoom) / 8;
     134                update = 1;
     135                break;
     136            case CACA_EVENT_KEY_PRESS | '?':
     137                help = !help;
    125138                update = 1;
    126139                break;
     
    134147        if(update)
    135148        {
     149            int ww = caca_get_width();
     150            int wh = caca_get_height();
     151
    136152            caca_clear();
    137153            caca_set_dithering(dithering_list[dithering]);
    138154            if(zoom < 0)
    139155            {
    140                 int xo = (caca_get_width() - 1) / 2;
    141                 int yo = (caca_get_height() - 1) / 2;
    142                 int xn = (caca_get_width() - 1) / (2 - zoom);
    143                 int yn = (caca_get_height() - 1) / (2 - zoom);
     156                int xo = (ww - 1) / 2;
     157                int yo = (wh - 1) / 2;
     158                int xn = (ww - 1) / (2 - zoom);
     159                int yn = (wh - 1) / (2 - zoom);
    144160                caca_draw_bitmap(xo - xn, yo - yn, xo + xn, yo + yn,
    145161                                 bitmap, pixels);
     
    155171                if(yn + y > h) y = h - yn;
    156172                newbitmap = caca_create_bitmap(32, 2 * xn, 2 * yn, 4 * w,
    157                                             0x00ff0000, 0x0000ff00, 0x000000ff);
    158                 caca_draw_bitmap(0, 0, caca_get_width() - 1,
    159                                  caca_get_height() - 1, newbitmap,
     173                                           0x00ff0000, 0x0000ff00, 0x000000ff);
     174                caca_draw_bitmap(0, 0, ww - 1, wh - 1, newbitmap,
    160175                                 pixels + 4 * (x - xn) + 4 * w * (y - yn));
    161176                caca_free_bitmap(newbitmap);
     
    163178            else
    164179            {
    165                 caca_draw_bitmap(0, 0, caca_get_width() - 1,
    166                                  caca_get_height() - 1, bitmap, pixels);
    167             }
     180                caca_draw_bitmap(0, 0, ww - 1, wh - 1, bitmap, pixels);
     181            }
     182
     183            caca_set_color(CACA_COLOR_WHITE, CACA_COLOR_BLUE);
     184            caca_draw_line(0, 0, ww - 1, 0, ' ');
     185            caca_printf(1, 0, "cacaview %s", VERSION);
     186            caca_putstr(ww - strlen("'?' for help") - 1, 0,
     187                        "'?' for help");
     188
     189            if(help)
     190            {
     191                caca_putstr(2, 2,  " +: zoom in          ");
     192                caca_putstr(2, 3,  " -: zoom out         ");
     193                caca_putstr(2, 4,  " x: reset zoom       ");
     194                caca_putstr(2, 5,  " ------------------- ");
     195                caca_putstr(2, 6,  " hjkl: move view     ");
     196                caca_putstr(2, 7,  " arrows: move view   ");
     197                caca_putstr(2, 8,  " ------------------- ");
     198                caca_putstr(2, 9,  " d: dithering method ");
     199                caca_putstr(2, 10, " ------------------- ");
     200                caca_putstr(2, 11, " ?: help             ");
     201                caca_putstr(2, 12, " q: quit             ");
     202
     203                help = 0;
     204            }
     205
    168206            caca_refresh();
    169207            update = 0;
Note: See TracChangeset for help on using the changeset viewer.