Removed exif support; made gif support non-optional
This commit is contained in:
parent
c3c95ab218
commit
ef0ed32264
13
Makefile
13
Makefile
|
@ -3,7 +3,7 @@ VERSION = git-20120211
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CFLAGS = -ansi -Wall -pedantic -O2
|
CFLAGS = -ansi -Wall -pedantic -O2
|
||||||
LDFLAGS =
|
LDFLAGS =
|
||||||
LIBS = -lX11 -lImlib2
|
LIBS = -lX11 -lImlib2 -lgif
|
||||||
|
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
MANPREFIX = $(PREFIX)/share/man
|
MANPREFIX = $(PREFIX)/share/man
|
||||||
|
@ -24,22 +24,19 @@ options:
|
||||||
@echo "CC $<"
|
@echo "CC $<"
|
||||||
@$(CC) $(CFLAGS) -DVERSION=\"$(VERSION)\" -c -o $@ $<
|
@$(CC) $(CFLAGS) -DVERSION=\"$(VERSION)\" -c -o $@ $<
|
||||||
|
|
||||||
$(OBJ) config: Makefile config.h
|
$(OBJ): Makefile config.h
|
||||||
|
|
||||||
config: config.c
|
|
||||||
@$(CC) $(CFLAGS) -o $@ $@.c
|
|
||||||
|
|
||||||
config.h:
|
config.h:
|
||||||
@echo "creating $@ from config.def.h"
|
@echo "creating $@ from config.def.h"
|
||||||
@cp config.def.h $@
|
@cp config.def.h $@
|
||||||
|
|
||||||
sxiv: $(OBJ) config
|
sxiv: $(OBJ)
|
||||||
@echo "CC -o $@"
|
@echo "CC -o $@"
|
||||||
@$(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) $$(./config -l)
|
@$(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@echo "cleaning"
|
@echo "cleaning"
|
||||||
@rm -f $(OBJ) config sxiv sxiv-$(VERSION).tar.gz
|
@rm -f $(OBJ) sxiv sxiv-$(VERSION).tar.gz
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
@echo "installing executable file to $(DESTDIR)$(PREFIX)/bin"
|
@echo "installing executable file to $(DESTDIR)$(PREFIX)/bin"
|
||||||
|
|
19
README.md
19
README.md
|
@ -1,11 +1,11 @@
|
||||||
sxiv: Simple (or small or suckless) X Image Viewer
|
sxiv: Simple (or small or suckless) X Image Viewer
|
||||||
|
|
||||||
sxiv is an alternative to feh and qiv. Its only dependency besides xlib is
|
sxiv is an alternative to feh and qiv. Its only dependencies besides xlib are
|
||||||
imlib2. The primary goal for writing sxiv is to create an image viewer, which
|
imlib2 and giflib. The primary goal for writing sxiv is to create an image
|
||||||
only has the most basic features required for fast image viewing (the ones I
|
viewer, which only has the most basic features required for fast image viewing
|
||||||
want). It has vi key bindings and works nicely with tiling window managers.
|
(the ones I want). It has vi key bindings and works nicely with tiling window
|
||||||
Its code base should be kept small and clean to make it easy for you to dig
|
managers. Its code base should be kept small and clean to make it easy for you
|
||||||
into it and customize it for your needs.
|
to dig into it and customize it for your needs.
|
||||||
|
|
||||||
Features
|
Features
|
||||||
--------
|
--------
|
||||||
|
@ -15,14 +15,9 @@ Features
|
||||||
* Thumbnail mode: grid of selectable previews of all images
|
* Thumbnail mode: grid of selectable previews of all images
|
||||||
* Ability to cache thumbnails for fast re-loading
|
* Ability to cache thumbnails for fast re-loading
|
||||||
* Basic support for multi-frame images
|
* Basic support for multi-frame images
|
||||||
|
* Load all frames from GIF files and play GIF animations
|
||||||
* Display image information in window title
|
* Display image information in window title
|
||||||
|
|
||||||
Additional features, that need to be enabled at compile-time (in *config.h*),
|
|
||||||
because they depend on additional libraries:
|
|
||||||
|
|
||||||
* Load all frames from GIF files and play GIF animations (requires giflib)
|
|
||||||
* Auto-orientate JPEG images according to their EXIF tags (requires libexif)
|
|
||||||
|
|
||||||
Screenshots
|
Screenshots
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
|
38
config.c
38
config.c
|
@ -1,38 +0,0 @@
|
||||||
#define _POSIX_C_SOURCE 200112L
|
|
||||||
#define _FEATURE_CONFIG
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#define QUOTE(m) #m
|
|
||||||
#define PUT_MACRO(m) \
|
|
||||||
printf(" -D%s=%s", #m, QUOTE(m))
|
|
||||||
|
|
||||||
int puts_if(const char *s, int c) {
|
|
||||||
return c ? printf(" %s", s) : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
|
||||||
int i;
|
|
||||||
unsigned int n = 0;
|
|
||||||
|
|
||||||
for (i = 1; i < argc; i++) {
|
|
||||||
switch ((argv[i][0] != '-' || argv[i][2] != '\0') ? -1 : argv[i][1]) {
|
|
||||||
case 'D':
|
|
||||||
n += PUT_MACRO(EXIF_SUPPORT);
|
|
||||||
n += PUT_MACRO(GIF_SUPPORT);
|
|
||||||
break;
|
|
||||||
case 'l':
|
|
||||||
n += puts_if("-lexif", EXIF_SUPPORT);
|
|
||||||
n += puts_if("-lgif", GIF_SUPPORT);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
fprintf(stderr, "%s: invalid argument: %s\n", argv[0], argv[i]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (n > 0)
|
|
||||||
printf("\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
12
config.def.h
12
config.def.h
|
@ -1,15 +1,3 @@
|
||||||
#ifdef _FEATURE_CONFIG
|
|
||||||
|
|
||||||
/* auto-orientate jpeg files according to their exif tags?
|
|
||||||
* (requires libexif [-lexif] to be installed)
|
|
||||||
*/
|
|
||||||
#define EXIF_SUPPORT 0
|
|
||||||
/* load all frames from gif files and support gif animations?
|
|
||||||
* (requires giflib [-lgif] to be installed)
|
|
||||||
*/
|
|
||||||
#define GIF_SUPPORT 0
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#ifdef _WINDOW_CONFIG
|
#ifdef _WINDOW_CONFIG
|
||||||
|
|
||||||
/* default window dimensions (overwritten via -g option): */
|
/* default window dimensions (overwritten via -g option): */
|
||||||
|
|
70
image.c
70
image.c
|
@ -17,27 +17,19 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _POSIX_C_SOURCE 200112L
|
#define _POSIX_C_SOURCE 200112L
|
||||||
#define _FEATURE_CONFIG
|
|
||||||
#define _IMAGE_CONFIG
|
#define _IMAGE_CONFIG
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <gif_lib.h>
|
||||||
|
|
||||||
#include "image.h"
|
#include "image.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#if EXIF_SUPPORT
|
|
||||||
#include <libexif/exif-data.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GIF_SUPPORT
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <gif_lib.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum { MIN_GIF_DELAY = 50 };
|
enum { MIN_GIF_DELAY = 50 };
|
||||||
|
|
||||||
float zoom_min;
|
float zoom_min;
|
||||||
|
@ -72,55 +64,6 @@ void img_init(img_t *img, win_t *win) {
|
||||||
img->multi.animate = false;
|
img->multi.animate = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if EXIF_SUPPORT
|
|
||||||
void exif_auto_orientate(const fileinfo_t *file) {
|
|
||||||
ExifData *ed;
|
|
||||||
ExifEntry *entry;
|
|
||||||
int byte_order, orientation;
|
|
||||||
|
|
||||||
if ((ed = exif_data_new_from_file(file->path)) == NULL)
|
|
||||||
return;
|
|
||||||
entry = exif_content_get_entry(ed->ifd[EXIF_IFD_0], EXIF_TAG_ORIENTATION);
|
|
||||||
if (entry != NULL) {
|
|
||||||
byte_order = exif_data_get_byte_order(ed);
|
|
||||||
orientation = exif_get_short(entry->data, byte_order);
|
|
||||||
}
|
|
||||||
exif_data_unref(ed);
|
|
||||||
if (entry == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch (orientation) {
|
|
||||||
case 5:
|
|
||||||
imlib_image_orientate(1);
|
|
||||||
case 2:
|
|
||||||
imlib_image_flip_vertical();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
imlib_image_orientate(2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7:
|
|
||||||
imlib_image_orientate(1);
|
|
||||||
case 4:
|
|
||||||
imlib_image_flip_horizontal();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
imlib_image_orientate(1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
imlib_image_orientate(3);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* EXIF_SUPPORT */
|
|
||||||
|
|
||||||
#if GIF_SUPPORT
|
|
||||||
/* Originally based on, but in its current form merely inspired by Imlib2's
|
|
||||||
* src/modules/loaders/loader_gif.c:load(), written by Carsten Haitzler.
|
|
||||||
*/
|
|
||||||
bool img_load_gif(img_t *img, const fileinfo_t *file) {
|
bool img_load_gif(img_t *img, const fileinfo_t *file) {
|
||||||
GifFileType *gif;
|
GifFileType *gif;
|
||||||
GifRowType *rows = NULL;
|
GifRowType *rows = NULL;
|
||||||
|
@ -290,7 +233,6 @@ bool img_load_gif(img_t *img, const fileinfo_t *file) {
|
||||||
|
|
||||||
return !err;
|
return !err;
|
||||||
}
|
}
|
||||||
#endif /* GIF_SUPPORT */
|
|
||||||
|
|
||||||
bool img_load(img_t *img, const fileinfo_t *file) {
|
bool img_load(img_t *img, const fileinfo_t *file) {
|
||||||
const char *fmt;
|
const char *fmt;
|
||||||
|
@ -312,14 +254,8 @@ bool img_load(img_t *img, const fileinfo_t *file) {
|
||||||
warn("could not open image: %s", file->name);
|
warn("could not open image: %s", file->name);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#if EXIF_SUPPORT
|
|
||||||
if (STREQ(fmt, "jpeg"))
|
|
||||||
exif_auto_orientate(file);
|
|
||||||
#endif
|
|
||||||
#if GIF_SUPPORT
|
|
||||||
if (STREQ(fmt, "gif"))
|
if (STREQ(fmt, "gif"))
|
||||||
img_load_gif(img, file);
|
img_load_gif(img, file);
|
||||||
#endif
|
|
||||||
|
|
||||||
img->w = imlib_image_get_width();
|
img->w = imlib_image_get_width();
|
||||||
img->h = imlib_image_get_height();
|
img->h = imlib_image_get_height();
|
||||||
|
|
13
options.c
13
options.c
|
@ -17,7 +17,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _POSIX_C_SOURCE 200112L
|
#define _POSIX_C_SOURCE 200112L
|
||||||
#define _FEATURE_CONFIG
|
|
||||||
#define _IMAGE_CONFIG
|
#define _IMAGE_CONFIG
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -39,18 +38,6 @@ void print_usage(void) {
|
||||||
|
|
||||||
void print_version(void) {
|
void print_version(void) {
|
||||||
printf("sxiv %s - Simple X Image Viewer\n", VERSION);
|
printf("sxiv %s - Simple X Image Viewer\n", VERSION);
|
||||||
printf("Additional features included (+) or not (-): %s, %s\n",
|
|
||||||
#if EXIF_SUPPORT
|
|
||||||
"+exif",
|
|
||||||
#else
|
|
||||||
"-exif",
|
|
||||||
#endif
|
|
||||||
#if GIF_SUPPORT
|
|
||||||
"+gif"
|
|
||||||
#else
|
|
||||||
"-gif"
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void parse_options(int argc, char **argv) {
|
void parse_options(int argc, char **argv) {
|
||||||
|
|
9
thumbs.c
9
thumbs.c
|
@ -17,7 +17,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _POSIX_C_SOURCE 200112L
|
#define _POSIX_C_SOURCE 200112L
|
||||||
#define _FEATURE_CONFIG
|
|
||||||
#define _THUMBS_CONFIG
|
#define _THUMBS_CONFIG
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -31,10 +30,6 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#if EXIF_SUPPORT
|
|
||||||
void exif_auto_orientate(const fileinfo_t*);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const int thumb_dim = THUMB_SIZE + 10;
|
const int thumb_dim = THUMB_SIZE + 10;
|
||||||
char *cache_dir = NULL;
|
char *cache_dir = NULL;
|
||||||
|
|
||||||
|
@ -259,10 +254,6 @@ bool tns_load(tns_t *tns, int n, const fileinfo_t *file,
|
||||||
imlib_free_image_and_decache();
|
imlib_free_image_and_decache();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#if EXIF_SUPPORT
|
|
||||||
if (!cache_hit && STREQ(fmt, "jpeg"))
|
|
||||||
exif_auto_orientate(file);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
w = imlib_image_get_width();
|
w = imlib_image_get_width();
|
||||||
h = imlib_image_get_height();
|
h = imlib_image_get_height();
|
||||||
|
|
Loading…
Reference in New Issue