|
|
@@ -40,6 +40,9 @@ |
|
|
|
|
|
|
|
#define ZOOM_FACTOR 1.08f |
|
|
|
#define ZOOM_MAX 50 |
|
|
|
#define GAMMA_FACTOR 1.04f |
|
|
|
#define GAMMA_MAX 100 |
|
|
|
#define GAMMA(g) (((g) < 0) ? 1.0 / gammatab[-(g)] : gammatab[(g)]) |
|
|
|
#define PAD_STEP 0.15 |
|
|
|
|
|
|
|
/* libcucul/libcaca contexts */ |
|
|
@@ -49,6 +52,7 @@ cucul_t *qq; caca_t *kk; |
|
|
|
static void print_status(void); |
|
|
|
static void print_help(int, int); |
|
|
|
static void set_zoom(int); |
|
|
|
static void set_gamma(int); |
|
|
|
static void load_image(char const *); |
|
|
|
static void unload_image(void); |
|
|
|
static void draw_checkers(int, int, int, int); |
|
|
@@ -70,8 +74,9 @@ unsigned int red[256], green[256], blue[256], alpha[256]; |
|
|
|
#endif |
|
|
|
|
|
|
|
float zoomtab[ZOOM_MAX + 1]; |
|
|
|
float gammatab[GAMMA_MAX + 1]; |
|
|
|
float xfactor = 1.0, yfactor = 1.0, dx = 0.5, dy = 0.5; |
|
|
|
int zoom = 0, fullscreen = 0, mode, ww, wh; |
|
|
|
int zoom = 0, g = 0, fullscreen = 0, mode, ww, wh; |
|
|
|
|
|
|
|
int main(int argc, char **argv) |
|
|
|
{ |
|
|
@@ -106,7 +111,12 @@ int main(int argc, char **argv) |
|
|
|
/* Fill the zoom table */ |
|
|
|
zoomtab[0] = 1.0; |
|
|
|
for(i = 0; i < ZOOM_MAX; i++) |
|
|
|
zoomtab[i + 1] = zoomtab[i] * 1.08; |
|
|
|
zoomtab[i + 1] = zoomtab[i] * ZOOM_FACTOR; |
|
|
|
|
|
|
|
/* Fill the gamma table */ |
|
|
|
gammatab[0] = 1.0; |
|
|
|
for(i = 0; i < GAMMA_MAX; i++) |
|
|
|
gammatab[i + 1] = gammatab[i] * GAMMA_FACTOR; |
|
|
|
|
|
|
|
/* Load items into playlist */ |
|
|
|
for(i = 1; i < argc; i++) |
|
|
@@ -226,10 +236,19 @@ int main(int argc, char **argv) |
|
|
|
update = 1; |
|
|
|
set_zoom(zoom - 1); |
|
|
|
break; |
|
|
|
case 'G': |
|
|
|
update = 1; |
|
|
|
set_gamma(g + 1); |
|
|
|
break; |
|
|
|
case 'g': |
|
|
|
update = 1; |
|
|
|
set_gamma(g - 1); |
|
|
|
break; |
|
|
|
case 'x': |
|
|
|
case 'X': |
|
|
|
update = 1; |
|
|
|
set_zoom(0); |
|
|
|
set_gamma(0); |
|
|
|
break; |
|
|
|
case 'k': |
|
|
|
case 'K': |
|
|
@@ -312,6 +331,7 @@ int main(int argc, char **argv) |
|
|
|
dx = dy = 0.5; |
|
|
|
update = 1; |
|
|
|
set_zoom(0); |
|
|
|
set_gamma(0); |
|
|
|
|
|
|
|
free(buffer); |
|
|
|
} |
|
|
@@ -391,7 +411,7 @@ int main(int argc, char **argv) |
|
|
|
|
|
|
|
if(help) |
|
|
|
{ |
|
|
|
print_help(ww - 25, 2); |
|
|
|
print_help(ww - 26, 2); |
|
|
|
} |
|
|
|
|
|
|
|
caca_display(kk); |
|
|
@@ -411,10 +431,11 @@ static void print_status(void) |
|
|
|
cucul_set_color(qq, CUCUL_COLOR_WHITE, CUCUL_COLOR_BLUE); |
|
|
|
cucul_draw_line(qq, 0, 0, ww - 1, 0, ' '); |
|
|
|
cucul_draw_line(qq, 0, wh - 2, ww - 1, wh - 2, '-'); |
|
|
|
cucul_putstr(qq, 0, 0, "q:Quit np:Next/Prev +-x:Zoom " |
|
|
|
"hjkl:Move d:Dithering a:Antialias"); |
|
|
|
cucul_putstr(qq, 0, 0, "q:Quit np:Next/Prev +-x:Zoom gG:Gamma " |
|
|
|
"hjkl:Move d:Dither a:Antialias"); |
|
|
|
cucul_putstr(qq, ww - strlen("?:Help"), 0, "?:Help"); |
|
|
|
cucul_printf(qq, 3, wh - 2, "cacaview %s", VERSION); |
|
|
|
cucul_printf(qq, ww - 30, wh - 2, "(gamma: %#.3g)", GAMMA(g)); |
|
|
|
cucul_printf(qq, ww - 14, wh - 2, "(zoom: %s%i)", zoom > 0 ? "+" : "", zoom); |
|
|
|
|
|
|
|
cucul_set_color(qq, CUCUL_COLOR_LIGHTGRAY, CUCUL_COLOR_BLACK); |
|
|
@@ -425,19 +446,21 @@ static void print_help(int x, int y) |
|
|
|
{ |
|
|
|
static char const *help[] = |
|
|
|
{ |
|
|
|
" +: zoom in ", |
|
|
|
" -: zoom out ", |
|
|
|
" x: reset zoom ", |
|
|
|
" ---------------------- ", |
|
|
|
" hjkl: move view ", |
|
|
|
" arrows: move view ", |
|
|
|
" ---------------------- ", |
|
|
|
" a: antialiasing method ", |
|
|
|
" d: dithering method ", |
|
|
|
" b: background mode ", |
|
|
|
" ---------------------- ", |
|
|
|
" ?: help ", |
|
|
|
" q: quit ", |
|
|
|
" +: zoom in ", |
|
|
|
" -: zoom out ", |
|
|
|
" g: decrease gamma ", |
|
|
|
" G: increase gamma ", |
|
|
|
" x: reset zoom and gamma ", |
|
|
|
" ----------------------- ", |
|
|
|
" hjkl: move view ", |
|
|
|
" arrows: move view ", |
|
|
|
" ----------------------- ", |
|
|
|
" a: antialiasing method ", |
|
|
|
" d: dithering method ", |
|
|
|
" b: background mode ", |
|
|
|
" ----------------------- ", |
|
|
|
" ?: help ", |
|
|
|
" q: quit ", |
|
|
|
NULL |
|
|
|
}; |
|
|
|
|
|
|
@@ -474,6 +497,16 @@ static void set_zoom(int new_zoom) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void set_gamma(int new_gamma) |
|
|
|
{ |
|
|
|
g = new_gamma; |
|
|
|
|
|
|
|
if(g > GAMMA_MAX) g = GAMMA_MAX; |
|
|
|
if(g < -GAMMA_MAX) g = -GAMMA_MAX; |
|
|
|
|
|
|
|
cucul_set_bitmap_gamma(bitmap, (g < 0) ? 1.0 / gammatab[-g] : gammatab[g]); |
|
|
|
} |
|
|
|
|
|
|
|
static void unload_image(void) |
|
|
|
{ |
|
|
|
#if defined(HAVE_IMLIB2_H) |
|
|
|