@@ -1,36 +0,0 @@ | |||||
/* Copyright 2017 Max Voit | |||||
* | |||||
* This file is part of sxiv. | |||||
* | |||||
* sxiv is free software; you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published | |||||
* by the Free Software Foundation; either version 2 of the License, | |||||
* or (at your option) any later version. | |||||
* | |||||
* sxiv is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#ifndef AUTORELOAD_H | |||||
#define AUTORELOAD_H | |||||
#include "types.h" | |||||
typedef struct { | |||||
int fd; | |||||
int wd_dir; | |||||
int wd_file; | |||||
char *filename; | |||||
} arl_t; | |||||
void arl_init(arl_t*); | |||||
void arl_cleanup(arl_t*); | |||||
void arl_setup(arl_t*, const char* /* result of realpath(3) */); | |||||
bool arl_handle(arl_t*); | |||||
#endif /* AUTORELOAD_H */ |
@@ -16,15 +16,14 @@ | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | * along with sxiv. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#include "sxiv.h" | |||||
#include <errno.h> | #include <errno.h> | ||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <string.h> | #include <string.h> | ||||
#include <unistd.h> | #include <unistd.h> | ||||
#include <sys/inotify.h> | #include <sys/inotify.h> | ||||
#include "util.h" | |||||
#include "autoreload.h" | |||||
void arl_init(arl_t *arl) | void arl_init(arl_t *arl) | ||||
{ | { | ||||
arl->fd = inotify_init1(IN_CLOEXEC | IN_NONBLOCK); | arl->fd = inotify_init1(IN_CLOEXEC | IN_NONBLOCK); | ||||
@@ -16,7 +16,7 @@ | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | * along with sxiv. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#include "autoreload.h" | |||||
#include "sxiv.h" | |||||
void arl_init(arl_t *arl) | void arl_init(arl_t *arl) | ||||
{ | { | ||||
@@ -16,20 +16,15 @@ | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | * along with sxiv. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#include "sxiv.h" | |||||
#define _IMAGE_CONFIG | |||||
#include "config.h" | |||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <string.h> | #include <string.h> | ||||
#include <unistd.h> | #include <unistd.h> | ||||
#include <sys/wait.h> | #include <sys/wait.h> | ||||
#include "commands.h" | |||||
#include "image.h" | |||||
#include "options.h" | |||||
#include "thumbs.h" | |||||
#include "util.h" | |||||
#define _IMAGE_CONFIG | |||||
#include "config.h" | |||||
void remove_file(int, bool); | void remove_file(int, bool); | ||||
void load_image(int); | void load_image(int); | ||||
void open_info(void); | void open_info(void); | ||||
@@ -1,59 +0,0 @@ | |||||
/* Copyright 2011, 2014 Bert Muennich | |||||
* | |||||
* This file is part of sxiv. | |||||
* | |||||
* sxiv is free software; you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published | |||||
* by the Free Software Foundation; either version 2 of the License, | |||||
* or (at your option) any later version. | |||||
* | |||||
* sxiv is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#ifndef COMMANDS_H | |||||
#define COMMANDS_H | |||||
#include <X11/Xlib.h> | |||||
#include "types.h" | |||||
typedef int arg_t; | |||||
typedef bool (*cmd_f)(arg_t); | |||||
#define G_CMD(c) g_##c, | |||||
#define I_CMD(c) i_##c, | |||||
#define T_CMD(c) t_##c, | |||||
typedef enum { | |||||
#include "commands.lst" | |||||
CMD_COUNT | |||||
} cmd_id_t; | |||||
typedef struct { | |||||
int mode; | |||||
cmd_f func; | |||||
} cmd_t; | |||||
typedef struct { | |||||
unsigned int mask; | |||||
KeySym ksym; | |||||
cmd_id_t cmd; | |||||
arg_t arg; | |||||
} keymap_t; | |||||
typedef struct { | |||||
unsigned int mask; | |||||
unsigned int button; | |||||
cmd_id_t cmd; | |||||
arg_t arg; | |||||
} button_t; | |||||
const extern cmd_t cmds[CMD_COUNT]; | |||||
#endif /* COMMANDS_H */ |
@@ -16,6 +16,10 @@ | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | * along with sxiv. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#include "sxiv.h" | |||||
#define _IMAGE_CONFIG | |||||
#include "config.h" | |||||
#include <errno.h> | #include <errno.h> | ||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <string.h> | #include <string.h> | ||||
@@ -23,13 +27,6 @@ | |||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#include <unistd.h> | #include <unistd.h> | ||||
#include "image.h" | |||||
#include "options.h" | |||||
#include "util.h" | |||||
#define _IMAGE_CONFIG | |||||
#include "config.h" | |||||
#if HAVE_LIBEXIF | #if HAVE_LIBEXIF | ||||
#include <libexif/exif-data.h> | #include <libexif/exif-data.h> | ||||
#endif | #endif | ||||
@@ -1,98 +0,0 @@ | |||||
/* Copyright 2011 Bert Muennich | |||||
* | |||||
* This file is part of sxiv. | |||||
* | |||||
* sxiv is free software; you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published | |||||
* by the Free Software Foundation; either version 2 of the License, | |||||
* or (at your option) any later version. | |||||
* | |||||
* sxiv is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#ifndef IMAGE_H | |||||
#define IMAGE_H | |||||
#include <Imlib2.h> | |||||
#include "types.h" | |||||
#include "window.h" | |||||
typedef struct { | |||||
Imlib_Image im; | |||||
unsigned int delay; | |||||
} img_frame_t; | |||||
typedef struct { | |||||
img_frame_t *frames; | |||||
int cap; | |||||
int cnt; | |||||
int sel; | |||||
bool animate; | |||||
int framedelay; | |||||
int length; | |||||
} multi_img_t; | |||||
typedef struct { | |||||
Imlib_Image im; | |||||
int w; | |||||
int h; | |||||
win_t *win; | |||||
float x; | |||||
float y; | |||||
scalemode_t scalemode; | |||||
float zoom; | |||||
bool checkpan; | |||||
bool dirty; | |||||
bool aa; | |||||
bool alpha; | |||||
Imlib_Color_Modifier cmod; | |||||
int gamma; | |||||
struct { | |||||
bool on; | |||||
int delay; | |||||
} ss; | |||||
multi_img_t multi; | |||||
} img_t; | |||||
void img_init(img_t*, win_t*); | |||||
bool img_load(img_t*, const fileinfo_t*); | |||||
CLEANUP void img_close(img_t*, bool); | |||||
void img_render(img_t*); | |||||
bool img_fit_win(img_t*, scalemode_t); | |||||
bool img_zoom(img_t*, float); | |||||
bool img_zoom_in(img_t*); | |||||
bool img_zoom_out(img_t*); | |||||
bool img_pos(img_t*, float, float); | |||||
bool img_move(img_t*, float, float); | |||||
bool img_pan(img_t*, direction_t, int); | |||||
bool img_pan_edge(img_t*, direction_t); | |||||
void img_rotate(img_t*, degree_t); | |||||
void img_flip(img_t*, flipdir_t); | |||||
void img_toggle_antialias(img_t*); | |||||
bool img_change_gamma(img_t*, int); | |||||
bool img_frame_navigate(img_t*, int); | |||||
bool img_frame_animate(img_t*); | |||||
#endif /* IMAGE_H */ |
@@ -16,9 +16,11 @@ | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | * along with sxiv. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#include "sxiv.h" | |||||
#define _MAPPINGS_CONFIG | |||||
#include "config.h" | |||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <stdio.h> | |||||
#include <stdarg.h> | |||||
#include <string.h> | #include <string.h> | ||||
#include <fcntl.h> | #include <fcntl.h> | ||||
#include <unistd.h> | #include <unistd.h> | ||||
@@ -26,24 +28,11 @@ | |||||
#include <signal.h> | #include <signal.h> | ||||
#include <sys/select.h> | #include <sys/select.h> | ||||
#include <sys/stat.h> | #include <sys/stat.h> | ||||
#include <sys/time.h> | |||||
#include <sys/wait.h> | #include <sys/wait.h> | ||||
#include <time.h> | #include <time.h> | ||||
#include <X11/keysym.h> | #include <X11/keysym.h> | ||||
#include <X11/XF86keysym.h> | #include <X11/XF86keysym.h> | ||||
#include "types.h" | |||||
#include "commands.h" | |||||
#include "image.h" | |||||
#include "options.h" | |||||
#include "thumbs.h" | |||||
#include "util.h" | |||||
#include "window.h" | |||||
#include "autoreload.h" | |||||
#define _MAPPINGS_CONFIG | |||||
#include "config.h" | |||||
typedef struct { | typedef struct { | ||||
struct timeval when; | struct timeval when; | ||||
bool active; | bool active; | ||||
@@ -16,19 +16,16 @@ | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | * along with sxiv. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#include "sxiv.h" | |||||
#define _IMAGE_CONFIG | |||||
#include "config.h" | |||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <string.h> | #include <string.h> | ||||
#include <stdio.h> | |||||
#include <unistd.h> | #include <unistd.h> | ||||
#include "options.h" | |||||
#include "util.h" | |||||
#define _IMAGE_CONFIG | |||||
#include "config.h" | |||||
options_t _options; | |||||
const options_t *options = (const options_t*) &_options; | |||||
opt_t _options; | |||||
const opt_t *options = (const opt_t*) &_options; | |||||
void print_usage(void) | void print_usage(void) | ||||
{ | { | ||||
@@ -1,63 +0,0 @@ | |||||
/* Copyright 2011 Bert Muennich | |||||
* | |||||
* This file is part of sxiv. | |||||
* | |||||
* sxiv is free software; you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published | |||||
* by the Free Software Foundation; either version 2 of the License, | |||||
* or (at your option) any later version. | |||||
* | |||||
* sxiv is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#ifndef OPTIONS_H | |||||
#define OPTIONS_H | |||||
#include "types.h" | |||||
#include "image.h" | |||||
typedef struct { | |||||
/* file list: */ | |||||
char **filenames; | |||||
bool from_stdin; | |||||
bool to_stdout; | |||||
bool recursive; | |||||
int filecnt; | |||||
int startnum; | |||||
/* image: */ | |||||
scalemode_t scalemode; | |||||
float zoom; | |||||
bool animate; | |||||
int gamma; | |||||
int slideshow; | |||||
int framerate; | |||||
/* window: */ | |||||
bool fullscreen; | |||||
bool hide_bar; | |||||
long embed; | |||||
char *geometry; | |||||
char *res_name; | |||||
/* misc flags: */ | |||||
bool quiet; | |||||
bool thumb_mode; | |||||
bool clean_cache; | |||||
bool private_mode; | |||||
} options_t; | |||||
extern const options_t *options; | |||||
void print_usage(void); | |||||
void print_version(void); | |||||
void parse_options(int, char**); | |||||
#endif /* OPTIONS_H */ |
@@ -0,0 +1,451 @@ | |||||
/* Copyright 2011 Bert Muennich | |||||
* | |||||
* This file is part of sxiv. | |||||
* | |||||
* sxiv is free software; you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published | |||||
* by the Free Software Foundation; either version 2 of the License, | |||||
* or (at your option) any later version. | |||||
* | |||||
* sxiv is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#ifndef SXIV_H | |||||
#define SXIV_H | |||||
#include <stdarg.h> | |||||
#include <stdbool.h> | |||||
#include <stdio.h> | |||||
#include <sys/time.h> | |||||
#include <sys/types.h> | |||||
#include <Imlib2.h> | |||||
#include <X11/Xlib.h> | |||||
/* | |||||
* Annotation for functions called in cleanup(). | |||||
* These functions are not allowed to call error(!0, ...) or exit(). | |||||
*/ | |||||
#define CLEANUP | |||||
#ifndef MIN | |||||
#define MIN(a,b) ((a) < (b) ? (a) : (b)) | |||||
#endif | |||||
#ifndef MAX | |||||
#define MAX(a,b) ((a) > (b) ? (a) : (b)) | |||||
#endif | |||||
#define ARRLEN(a) (sizeof(a) / sizeof((a)[0])) | |||||
#define STREQ(s1,s2) (strcmp((s1), (s2)) == 0) | |||||
#define TV_DIFF(t1,t2) (((t1)->tv_sec - (t2)->tv_sec ) * 1000 + \ | |||||
((t1)->tv_usec - (t2)->tv_usec) / 1000) | |||||
#define TV_SET_MSEC(tv,t) { \ | |||||
(tv)->tv_sec = (t) / 1000; \ | |||||
(tv)->tv_usec = (t) % 1000 * 1000; \ | |||||
} | |||||
#define TV_ADD_MSEC(tv,t) { \ | |||||
(tv)->tv_sec += (t) / 1000; \ | |||||
(tv)->tv_usec += (t) % 1000 * 1000; \ | |||||
} | |||||
typedef enum { | |||||
BO_BIG_ENDIAN, | |||||
BO_LITTLE_ENDIAN | |||||
} byteorder_t; | |||||
typedef enum { | |||||
MODE_IMAGE, | |||||
MODE_THUMB | |||||
} appmode_t; | |||||
typedef enum { | |||||
DIR_LEFT = 1, | |||||
DIR_RIGHT = 2, | |||||
DIR_UP = 4, | |||||
DIR_DOWN = 8 | |||||
} direction_t; | |||||
typedef enum { | |||||
DEGREE_90 = 1, | |||||
DEGREE_180 = 2, | |||||
DEGREE_270 = 3 | |||||
} degree_t; | |||||
typedef enum { | |||||
FLIP_HORIZONTAL = 1, | |||||
FLIP_VERTICAL = 2 | |||||
} flipdir_t; | |||||
typedef enum { | |||||
SCALE_DOWN, | |||||
SCALE_FIT, | |||||
SCALE_WIDTH, | |||||
SCALE_HEIGHT, | |||||
SCALE_ZOOM | |||||
} scalemode_t; | |||||
typedef enum { | |||||
CURSOR_ARROW, | |||||
CURSOR_DRAG, | |||||
CURSOR_WATCH, | |||||
CURSOR_LEFT, | |||||
CURSOR_RIGHT, | |||||
CURSOR_NONE, | |||||
CURSOR_COUNT | |||||
} cursor_t; | |||||
typedef enum { | |||||
FF_WARN = 1, | |||||
FF_MARK = 2, | |||||
FF_TN_INIT = 4 | |||||
} fileflags_t; | |||||
typedef struct { | |||||
const char *name; /* as given by user */ | |||||
const char *path; /* always absolute */ | |||||
const char *base; | |||||
fileflags_t flags; | |||||
} fileinfo_t; | |||||
/* timeouts in milliseconds: */ | |||||
enum { | |||||
TO_REDRAW_RESIZE = 75, | |||||
TO_REDRAW_THUMBS = 200, | |||||
TO_CURSOR_HIDE = 1200, | |||||
TO_DOUBLE_CLICK = 300 | |||||
}; | |||||
typedef void (*timeout_f)(void); | |||||
typedef struct arl arl_t; | |||||
typedef struct img img_t; | |||||
typedef struct opt opt_t; | |||||
typedef struct tns tns_t; | |||||
typedef struct win win_t; | |||||
/* autoreload.c */ | |||||
struct arl { | |||||
int fd; | |||||
int wd_dir; | |||||
int wd_file; | |||||
char *filename; | |||||
}; | |||||
void arl_init(arl_t*); | |||||
void arl_cleanup(arl_t*); | |||||
void arl_setup(arl_t*, const char* /* result of realpath(3) */); | |||||
bool arl_handle(arl_t*); | |||||
/* commands.c */ | |||||
typedef int arg_t; | |||||
typedef bool (*cmd_f)(arg_t); | |||||
#define G_CMD(c) g_##c, | |||||
#define I_CMD(c) i_##c, | |||||
#define T_CMD(c) t_##c, | |||||
typedef enum { | |||||
#include "commands.lst" | |||||
CMD_COUNT | |||||
} cmd_id_t; | |||||
typedef struct { | |||||
int mode; | |||||
cmd_f func; | |||||
} cmd_t; | |||||
typedef struct { | |||||
unsigned int mask; | |||||
KeySym ksym; | |||||
cmd_id_t cmd; | |||||
arg_t arg; | |||||
} keymap_t; | |||||
typedef struct { | |||||
unsigned int mask; | |||||
unsigned int button; | |||||
cmd_id_t cmd; | |||||
arg_t arg; | |||||
} button_t; | |||||
extern const cmd_t cmds[CMD_COUNT]; | |||||
/* image.c */ | |||||
typedef struct { | |||||
Imlib_Image im; | |||||
unsigned int delay; | |||||
} img_frame_t; | |||||
typedef struct { | |||||
img_frame_t *frames; | |||||
int cap; | |||||
int cnt; | |||||
int sel; | |||||
bool animate; | |||||
int framedelay; | |||||
int length; | |||||
} multi_img_t; | |||||
struct img { | |||||
Imlib_Image im; | |||||
int w; | |||||
int h; | |||||
win_t *win; | |||||
float x; | |||||
float y; | |||||
scalemode_t scalemode; | |||||
float zoom; | |||||
bool checkpan; | |||||
bool dirty; | |||||
bool aa; | |||||
bool alpha; | |||||
Imlib_Color_Modifier cmod; | |||||
int gamma; | |||||
struct { | |||||
bool on; | |||||
int delay; | |||||
} ss; | |||||
multi_img_t multi; | |||||
}; | |||||
void img_init(img_t*, win_t*); | |||||
bool img_load(img_t*, const fileinfo_t*); | |||||
CLEANUP void img_close(img_t*, bool); | |||||
void img_render(img_t*); | |||||
bool img_fit_win(img_t*, scalemode_t); | |||||
bool img_zoom(img_t*, float); | |||||
bool img_zoom_in(img_t*); | |||||
bool img_zoom_out(img_t*); | |||||
bool img_pos(img_t*, float, float); | |||||
bool img_move(img_t*, float, float); | |||||
bool img_pan(img_t*, direction_t, int); | |||||
bool img_pan_edge(img_t*, direction_t); | |||||
void img_rotate(img_t*, degree_t); | |||||
void img_flip(img_t*, flipdir_t); | |||||
void img_toggle_antialias(img_t*); | |||||
bool img_change_gamma(img_t*, int); | |||||
bool img_frame_navigate(img_t*, int); | |||||
bool img_frame_animate(img_t*); | |||||
/* options.c */ | |||||
struct opt { | |||||
/* file list: */ | |||||
char **filenames; | |||||
bool from_stdin; | |||||
bool to_stdout; | |||||
bool recursive; | |||||
int filecnt; | |||||
int startnum; | |||||
/* image: */ | |||||
scalemode_t scalemode; | |||||
float zoom; | |||||
bool animate; | |||||
int gamma; | |||||
int slideshow; | |||||
int framerate; | |||||
/* window: */ | |||||
bool fullscreen; | |||||
bool hide_bar; | |||||
long embed; | |||||
char *geometry; | |||||
char *res_name; | |||||
/* misc flags: */ | |||||
bool quiet; | |||||
bool thumb_mode; | |||||
bool clean_cache; | |||||
bool private_mode; | |||||
}; | |||||
extern const opt_t *options; | |||||
void print_usage(void); | |||||
void print_version(void); | |||||
void parse_options(int, char**); | |||||
/* thumbs.c */ | |||||
typedef struct { | |||||
Imlib_Image im; | |||||
int w; | |||||
int h; | |||||
int x; | |||||
int y; | |||||
} thumb_t; | |||||
struct tns { | |||||
fileinfo_t *files; | |||||
thumb_t *thumbs; | |||||
const int *cnt; | |||||
int *sel; | |||||
int initnext; | |||||
int loadnext; | |||||
int first, end; | |||||
int r_first, r_end; | |||||
win_t *win; | |||||
int x; | |||||
int y; | |||||
int cols; | |||||
int rows; | |||||
int zl; | |||||
int bw; | |||||
int dim; | |||||
bool dirty; | |||||
}; | |||||
void tns_clean_cache(tns_t*); | |||||
void tns_init(tns_t*, fileinfo_t*, const int*, int*, win_t*); | |||||
CLEANUP void tns_free(tns_t*); | |||||
bool tns_load(tns_t*, int, bool, bool); | |||||
void tns_unload(tns_t*, int); | |||||
void tns_render(tns_t*); | |||||
void tns_mark(tns_t*, int, bool); | |||||
void tns_highlight(tns_t*, int, bool); | |||||
bool tns_move_selection(tns_t*, direction_t, int); | |||||
bool tns_scroll(tns_t*, direction_t, bool); | |||||
bool tns_zoom(tns_t*, int); | |||||
int tns_translate(tns_t*, int, int); | |||||
/* util.c */ | |||||
#include <dirent.h> | |||||
typedef struct { | |||||
DIR *dir; | |||||
char *name; | |||||
int d; | |||||
bool recursive; | |||||
char **stack; | |||||
int stcap; | |||||
int stlen; | |||||
} r_dir_t; | |||||
extern const char *progname; | |||||
void* emalloc(size_t); | |||||
void* erealloc(void*, size_t); | |||||
char* estrdup(const char*); | |||||
void error(int, int, const char*, ...); | |||||
void size_readable(float*, const char**); | |||||
int r_opendir(r_dir_t*, const char*, bool); | |||||
int r_closedir(r_dir_t*); | |||||
char* r_readdir(r_dir_t*); | |||||
int r_mkdir(char*); | |||||
/* window.c */ | |||||
#include <X11/Xutil.h> | |||||
#include <X11/Xft/Xft.h> | |||||
enum { | |||||
BAR_L_LEN = 512, | |||||
BAR_R_LEN = 64 | |||||
}; | |||||
enum { | |||||
ATOM_WM_DELETE_WINDOW, | |||||
ATOM__NET_WM_NAME, | |||||
ATOM__NET_WM_ICON_NAME, | |||||
ATOM__NET_WM_ICON, | |||||
ATOM__NET_WM_STATE, | |||||
ATOM__NET_WM_STATE_FULLSCREEN, | |||||
ATOM__NET_SUPPORTED, | |||||
ATOM_COUNT | |||||
}; | |||||
typedef struct { | |||||
Display *dpy; | |||||
int scr; | |||||
int scrw, scrh; | |||||
Visual *vis; | |||||
Colormap cmap; | |||||
int depth; | |||||
} win_env_t; | |||||
typedef struct { | |||||
size_t size; | |||||
char *p; | |||||
char *buf; | |||||
} win_bar_t; | |||||
struct win { | |||||
Window xwin; | |||||
win_env_t env; | |||||
XftColor bgcol; | |||||
XftColor fscol; | |||||
XftColor selcol; | |||||
int x; | |||||
int y; | |||||
unsigned int w; | |||||
unsigned int h; /* = win height - bar height */ | |||||
unsigned int bw; | |||||
bool fullscreen; | |||||
struct { | |||||
int w; | |||||
int h; | |||||
Pixmap pm; | |||||
} buf; | |||||
struct { | |||||
unsigned int h; | |||||
win_bar_t l; | |||||
win_bar_t r; | |||||
XftColor bgcol; | |||||
XftColor fgcol; | |||||
} bar; | |||||
}; | |||||
extern Atom atoms[ATOM_COUNT]; | |||||
void win_init(win_t*); | |||||
void win_open(win_t*); | |||||
CLEANUP void win_close(win_t*); | |||||
bool win_configure(win_t*, XConfigureEvent*); | |||||
void win_toggle_fullscreen(win_t*); | |||||
void win_toggle_bar(win_t*); | |||||
void win_clear(win_t*); | |||||
void win_draw(win_t*); | |||||
void win_draw_rect(win_t*, int, int, int, int, bool, int, unsigned long); | |||||
int win_textwidth(const win_env_t*, const char*, unsigned int, bool); | |||||
void win_set_title(win_t*, const char*); | |||||
void win_set_cursor(win_t*, cursor_t); | |||||
void win_cursor_pos(win_t*, int*, int*); | |||||
#endif /* SXIV_H */ | |||||
@@ -16,8 +16,11 @@ | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | * along with sxiv. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#include "sxiv.h" | |||||
#define _THUMBS_CONFIG | |||||
#include "config.h" | |||||
#include <errno.h> | #include <errno.h> | ||||
#include <stdio.h> | |||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <string.h> | #include <string.h> | ||||
#include <sys/types.h> | #include <sys/types.h> | ||||
@@ -25,13 +28,6 @@ | |||||
#include <unistd.h> | #include <unistd.h> | ||||
#include <utime.h> | #include <utime.h> | ||||
#include "options.h" | |||||
#include "thumbs.h" | |||||
#include "util.h" | |||||
#define _THUMBS_CONFIG | |||||
#include "config.h" | |||||
#if HAVE_LIBEXIF | #if HAVE_LIBEXIF | ||||
#include <libexif/exif-data.h> | #include <libexif/exif-data.h> | ||||
void exif_auto_orientate(const fileinfo_t*); | void exif_auto_orientate(const fileinfo_t*); | ||||
@@ -1,77 +0,0 @@ | |||||
/* Copyright 2011 Bert Muennich | |||||
* | |||||
* This file is part of sxiv. | |||||
* | |||||
* sxiv is free software; you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published | |||||
* by the Free Software Foundation; either version 2 of the License, | |||||
* or (at your option) any later version. | |||||
* | |||||
* sxiv is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#ifndef THUMBS_H | |||||
#define THUMBS_H | |||||
#include <X11/Xlib.h> | |||||
#include <Imlib2.h> | |||||
#include "types.h" | |||||
#include "window.h" | |||||
typedef struct { | |||||
Imlib_Image im; | |||||
int w; | |||||
int h; | |||||
int x; | |||||
int y; | |||||
} thumb_t; | |||||
typedef struct { | |||||
fileinfo_t *files; | |||||
thumb_t *thumbs; | |||||
const int *cnt; | |||||
int *sel; | |||||
int initnext; | |||||
int loadnext; | |||||
int first, end; | |||||
int r_first, r_end; | |||||
win_t *win; | |||||
int x; | |||||
int y; | |||||
int cols; | |||||
int rows; | |||||
int zl; | |||||
int bw; | |||||
int dim; | |||||
bool dirty; | |||||
} tns_t; | |||||
void tns_clean_cache(tns_t*); | |||||
void tns_init(tns_t*, fileinfo_t*, const int*, int*, win_t*); | |||||
CLEANUP void tns_free(tns_t*); | |||||
bool tns_load(tns_t*, int, bool, bool); | |||||
void tns_unload(tns_t*, int); | |||||
void tns_render(tns_t*); | |||||
void tns_mark(tns_t*, int, bool); | |||||
void tns_highlight(tns_t*, int, bool); | |||||
bool tns_move_selection(tns_t*, direction_t, int); | |||||
bool tns_scroll(tns_t*, direction_t, bool); | |||||
bool tns_zoom(tns_t*, int); | |||||
int tns_translate(tns_t*, int, int); | |||||
#endif /* THUMBS_H */ |
@@ -1,100 +0,0 @@ | |||||
/* Copyright 2011 Bert Muennich | |||||
* | |||||
* This file is part of sxiv. | |||||
* | |||||
* sxiv is free software; you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published | |||||
* by the Free Software Foundation; either version 2 of the License, | |||||
* or (at your option) any later version. | |||||
* | |||||
* sxiv is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#ifndef TYPES_H | |||||
#define TYPES_H | |||||
#include <stdbool.h> | |||||
/* | |||||
* Annotation for functions called in cleanup(). | |||||
* These functions are not allowed to call error(!0, ...) or exit(). | |||||
*/ | |||||
#define CLEANUP | |||||
typedef enum { | |||||
BO_BIG_ENDIAN, | |||||
BO_LITTLE_ENDIAN | |||||
} byteorder_t; | |||||
typedef enum { | |||||
MODE_IMAGE, | |||||
MODE_THUMB | |||||
} appmode_t; | |||||
typedef enum { | |||||
DIR_LEFT = 1, | |||||
DIR_RIGHT = 2, | |||||
DIR_UP = 4, | |||||
DIR_DOWN = 8 | |||||
} direction_t; | |||||
typedef enum { | |||||
DEGREE_90 = 1, | |||||
DEGREE_180 = 2, | |||||
DEGREE_270 = 3 | |||||
} degree_t; | |||||
typedef enum { | |||||
FLIP_HORIZONTAL = 1, | |||||
FLIP_VERTICAL = 2 | |||||
} flipdir_t; | |||||
typedef enum { | |||||
SCALE_DOWN, | |||||
SCALE_FIT, | |||||
SCALE_WIDTH, | |||||
SCALE_HEIGHT, | |||||
SCALE_ZOOM | |||||
} scalemode_t; | |||||
typedef enum { | |||||
CURSOR_ARROW, | |||||
CURSOR_DRAG, | |||||
CURSOR_WATCH, | |||||
CURSOR_LEFT, | |||||
CURSOR_RIGHT, | |||||
CURSOR_NONE, | |||||
CURSOR_COUNT | |||||
} cursor_t; | |||||
typedef enum { | |||||
FF_WARN = 1, | |||||
FF_MARK = 2, | |||||
FF_TN_INIT = 4 | |||||
} fileflags_t; | |||||
typedef struct { | |||||
const char *name; /* as given by user */ | |||||
const char *path; /* always absolute */ | |||||
const char *base; | |||||
fileflags_t flags; | |||||
} fileinfo_t; | |||||
/* timeouts in milliseconds: */ | |||||
enum { | |||||
TO_REDRAW_RESIZE = 75, | |||||
TO_REDRAW_THUMBS = 200, | |||||
TO_CURSOR_HIDE = 1200, | |||||
TO_DOUBLE_CLICK = 300 | |||||
}; | |||||
typedef void (*timeout_f)(void); | |||||
#endif /* TYPES_H */ |
@@ -16,6 +16,8 @@ | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | * along with sxiv. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#include "sxiv.h" | |||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <string.h> | #include <string.h> | ||||
#include <sys/types.h> | #include <sys/types.h> | ||||
@@ -23,9 +25,6 @@ | |||||
#include <unistd.h> | #include <unistd.h> | ||||
#include <errno.h> | #include <errno.h> | ||||
#include "options.h" | |||||
#include "util.h" | |||||
const char *progname; | const char *progname; | ||||
void* emalloc(size_t size) | void* emalloc(size_t size) | ||||
@@ -1,80 +0,0 @@ | |||||
/* Copyright 2011 Bert Muennich | |||||
* | |||||
* This file is part of sxiv. | |||||
* | |||||
* sxiv is free software; you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published | |||||
* by the Free Software Foundation; either version 2 of the License, | |||||
* or (at your option) any later version. | |||||
* | |||||
* sxiv is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#ifndef UTIL_H | |||||
#define UTIL_H | |||||
#include <stdio.h> | |||||
#include <stdarg.h> | |||||
#include <dirent.h> | |||||
#include <sys/time.h> | |||||
#include <sys/types.h> | |||||
#include "types.h" | |||||
#ifndef MIN | |||||
#define MIN(a,b) ((a) < (b) ? (a) : (b)) | |||||
#endif | |||||
#ifndef MAX | |||||
#define MAX(a,b) ((a) > (b) ? (a) : (b)) | |||||
#endif | |||||
#define ARRLEN(a) (sizeof(a) / sizeof((a)[0])) | |||||
#define STREQ(s1,s2) (strcmp((s1), (s2)) == 0) | |||||
#define TV_DIFF(t1,t2) (((t1)->tv_sec - (t2)->tv_sec ) * 1000 + \ | |||||
((t1)->tv_usec - (t2)->tv_usec) / 1000) | |||||
#define TV_SET_MSEC(tv,t) { \ | |||||
(tv)->tv_sec = (t) / 1000; \ | |||||
(tv)->tv_usec = (t) % 1000 * 1000; \ | |||||
} | |||||
#define TV_ADD_MSEC(tv,t) { \ | |||||
(tv)->tv_sec += (t) / 1000; \ | |||||
(tv)->tv_usec += (t) % 1000 * 1000; \ | |||||
} | |||||
typedef struct { | |||||
DIR *dir; | |||||
char *name; | |||||
int d; | |||||
bool recursive; | |||||
char **stack; | |||||
int stcap; | |||||
int stlen; | |||||
} r_dir_t; | |||||
extern const char *progname; | |||||
void* emalloc(size_t); | |||||
void* erealloc(void*, size_t); | |||||
char* estrdup(const char*); | |||||
void error(int, int, const char*, ...); | |||||
void size_readable(float*, const char**); | |||||
int r_opendir(r_dir_t*, const char*, bool); | |||||
int r_closedir(r_dir_t*); | |||||
char* r_readdir(r_dir_t*); | |||||
int r_mkdir(char*); | |||||
#endif /* UTIL_H */ |
@@ -16,20 +16,17 @@ | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | * along with sxiv. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#include "sxiv.h" | |||||
#define _WINDOW_CONFIG | |||||
#include "config.h" | |||||
#include "icon/data.h" | |||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <string.h> | #include <string.h> | ||||
#include <locale.h> | #include <locale.h> | ||||
#include <X11/cursorfont.h> | #include <X11/cursorfont.h> | ||||
#include <X11/Xatom.h> | #include <X11/Xatom.h> | ||||
#include "options.h" | |||||
#include "util.h" | |||||
#include "window.h" | |||||
#include "icon/data.h" | |||||
#define _WINDOW_CONFIG | |||||
#include "config.h" | |||||
enum { | enum { | ||||
H_TEXT_PAD = 5, | H_TEXT_PAD = 5, | ||||
V_TEXT_PAD = 1 | V_TEXT_PAD = 1 | ||||
@@ -1,111 +0,0 @@ | |||||
/* Copyright 2011 Bert Muennich | |||||
* | |||||
* This file is part of sxiv. | |||||
* | |||||
* sxiv is free software; you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published | |||||
* by the Free Software Foundation; either version 2 of the License, | |||||
* or (at your option) any later version. | |||||
* | |||||
* sxiv is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with sxiv. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#ifndef WINDOW_H | |||||
#define WINDOW_H | |||||
#include <X11/Xlib.h> | |||||
#include <X11/Xutil.h> | |||||
#include <X11/Xft/Xft.h> | |||||
#include "types.h" | |||||
enum { | |||||
BAR_L_LEN = 512, | |||||
BAR_R_LEN = 64 | |||||
}; | |||||
enum { | |||||
ATOM_WM_DELETE_WINDOW, | |||||
ATOM__NET_WM_NAME, | |||||
ATOM__NET_WM_ICON_NAME, | |||||
ATOM__NET_WM_ICON, | |||||
ATOM__NET_WM_STATE, | |||||
ATOM__NET_WM_STATE_FULLSCREEN, | |||||
ATOM__NET_SUPPORTED, | |||||
ATOM_COUNT | |||||
}; | |||||
typedef struct { | |||||
Display *dpy; | |||||
int scr; | |||||
int scrw, scrh; | |||||
Visual *vis; | |||||
Colormap cmap; | |||||
int depth; | |||||
} win_env_t; | |||||
typedef struct { | |||||
size_t size; | |||||
char *p; | |||||
char *buf; | |||||
} win_bar_t; | |||||
typedef struct { | |||||
Window xwin; | |||||
win_env_t env; | |||||
XftColor bgcol; | |||||
XftColor fscol; | |||||
XftColor selcol; | |||||
int x; | |||||
int y; | |||||
unsigned int w; | |||||
unsigned int h; /* = win height - bar height */ | |||||
unsigned int bw; | |||||
bool fullscreen; | |||||
struct { | |||||
int w; | |||||
int h; | |||||
Pixmap pm; | |||||
} buf; | |||||
struct { | |||||
unsigned int h; | |||||
win_bar_t l; | |||||
win_bar_t r; | |||||
XftColor bgcol; | |||||
XftColor fgcol; | |||||
} bar; | |||||
} win_t; | |||||
extern Atom atoms[ATOM_COUNT]; | |||||
void win_init(win_t*); | |||||
void win_open(win_t*); | |||||
CLEANUP void win_close(win_t*); | |||||
bool win_configure(win_t*, XConfigureEvent*); | |||||
void win_toggle_fullscreen(win_t*); | |||||
void win_toggle_bar(win_t*); | |||||
void win_clear(win_t*); | |||||
void win_draw(win_t*); | |||||
void win_draw_rect(win_t*, int, int, int, int, bool, int, unsigned long); | |||||
int win_textwidth(const win_env_t*, const char*, unsigned int, bool); | |||||
void win_set_title(win_t*, const char*); | |||||
void win_set_cursor(win_t*, cursor_t); | |||||
void win_cursor_pos(win_t*, int*, int*); | |||||
#endif /* WINDOW_H */ |