Ignore:
Timestamp:
Mar 22, 2006, 5:09:14 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Gamma support in cacaview (through the g/G key).
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/src/cacaview.c

    r653 r662  
    4141#define ZOOM_FACTOR 1.08f
    4242#define ZOOM_MAX 50
     43#define GAMMA_FACTOR 1.04f
     44#define GAMMA_MAX 100
     45#define GAMMA(g) (((g) < 0) ? 1.0 / gammatab[-(g)] : gammatab[(g)])
    4346#define PAD_STEP 0.15
    4447
     
    5053static void print_help(int, int);
    5154static void set_zoom(int);
     55static void set_gamma(int);
    5256static void load_image(char const *);
    5357static void unload_image(void);
     
    7175
    7276float zoomtab[ZOOM_MAX + 1];
     77float gammatab[GAMMA_MAX + 1];
    7378float xfactor = 1.0, yfactor = 1.0, dx = 0.5, dy = 0.5;
    74 int zoom = 0, fullscreen = 0, mode, ww, wh;
     79int zoom = 0, g = 0, fullscreen = 0, mode, ww, wh;
    7580
    7681int main(int argc, char **argv)
     
    107112    zoomtab[0] = 1.0;
    108113    for(i = 0; i < ZOOM_MAX; i++)
    109         zoomtab[i + 1] = zoomtab[i] * 1.08;
     114        zoomtab[i + 1] = zoomtab[i] * ZOOM_FACTOR;
     115
     116    /* Fill the gamma table */
     117    gammatab[0] = 1.0;
     118    for(i = 0; i < GAMMA_MAX; i++)
     119        gammatab[i + 1] = gammatab[i] * GAMMA_FACTOR;
    110120
    111121    /* Load items into playlist */
     
    227237                set_zoom(zoom - 1);
    228238                break;
     239            case 'G':
     240                update = 1;
     241                set_gamma(g + 1);
     242                break;
     243            case 'g':
     244                update = 1;
     245                set_gamma(g - 1);
     246                break;
    229247            case 'x':
    230248            case 'X':
    231249                update = 1;
    232250                set_zoom(0);
     251                set_gamma(0);
    233252                break;
    234253            case 'k':
     
    313332            update = 1;
    314333            set_zoom(0);
     334            set_gamma(0);
    315335
    316336            free(buffer);
     
    392412        if(help)
    393413        {
    394             print_help(ww - 25, 2);
     414            print_help(ww - 26, 2);
    395415        }
    396416
     
    412432    cucul_draw_line(qq, 0, 0, ww - 1, 0, ' ');
    413433    cucul_draw_line(qq, 0, wh - 2, ww - 1, wh - 2, '-');
    414     cucul_putstr(qq, 0, 0, "q:Quit  np:Next/Prev  +-x:Zoom  "
    415                            "hjkl:Move  d:Dithering  a:Antialias");
     434    cucul_putstr(qq, 0, 0, "q:Quit  np:Next/Prev  +-x:Zoom  gG:Gamma  "
     435                           "hjkl:Move  d:Dither  a:Antialias");
    416436    cucul_putstr(qq, ww - strlen("?:Help"), 0, "?:Help");
    417437    cucul_printf(qq, 3, wh - 2, "cacaview %s", VERSION);
     438    cucul_printf(qq, ww - 30, wh - 2, "(gamma: %#.3g)", GAMMA(g));
    418439    cucul_printf(qq, ww - 14, wh - 2, "(zoom: %s%i)", zoom > 0 ? "+" : "", zoom);
    419440
     
    426447    static char const *help[] =
    427448    {
    428         " +: zoom in             ",
    429         " -: zoom out            ",
    430         " x: reset zoom          ",
    431         " ---------------------- ",
    432         " hjkl: move view        ",
    433         " arrows: move view      ",
    434         " ---------------------- ",
    435         " a: antialiasing method ",
    436         " d: dithering method    ",
    437         " b: background mode     ",
    438         " ---------------------- ",
    439         " ?: help                ",
    440         " q: quit                ",
     449        " +: zoom in              ",
     450        " -: zoom out             ",
     451        " g: decrease gamma       ",
     452        " G: increase gamma       ",
     453        " x: reset zoom and gamma ",
     454        " ----------------------- ",
     455        " hjkl: move view         ",
     456        " arrows: move view       ",
     457        " ----------------------- ",
     458        " a: antialiasing method  ",
     459        " d: dithering method     ",
     460        " b: background mode      ",
     461        " ----------------------- ",
     462        " ?: help                 ",
     463        " q: quit                 ",
    441464        NULL
    442465    };
     
    473496        yfactor = tmp;
    474497    }
     498}
     499
     500static void set_gamma(int new_gamma)
     501{
     502    g = new_gamma;
     503
     504    if(g > GAMMA_MAX) g = GAMMA_MAX;
     505    if(g < -GAMMA_MAX) g = -GAMMA_MAX;
     506
     507    cucul_set_bitmap_gamma(bitmap, (g < 0) ? 1.0 / gammatab[-g] : gammatab[g]);
    475508}
    476509
Note: See TracChangeset for help on using the changeset viewer.