소스 검색

* Gamma support in cacaview (through the g/G key).

tags/v0.99.beta14
Sam Hocevar sam 18 년 전
부모
커밋
57d897a7bf
1개의 변경된 파일51개의 추가작업 그리고 18개의 파일을 삭제
  1. +51
    -18
      src/cacaview.c

+ 51
- 18
src/cacaview.c 파일 보기

@@ -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)


불러오는 중...
취소
저장