#!/usr/local/bin/gosh ;; Simple Image Browser ;; ;; Created: <2001-06-17 18:08:20 foof> ;; Time-stamp: <2003-01-20 15:00:16 foof> ;; Author: Alex Shinn ;; load the SDL module and some useful srfi's (use sdl) (use sdl.image) (use srfi-1) (use srfi-2) (use file.util) ;; initialize the video subsystem (sdl-init SDL_INIT_VIDEO) ;; directory to search for images in (define image-dir "/usr/share/pixmaps/") ;; build a ring of image file names (define image-ring (directory-list image-dir :add-path? #t :children? #t :filter (lambda (f) (file-is-regular? (string-append image-dir "/" f))))) ;; functions to cycle through the ring (define (next-image) (let ((next (car image-ring))) (set! image-ring (cdr image-ring)) next)) (define (prev-image) (let ((orig image-ring)) (while (not (eq? (cddr image-ring) orig)) (set! image-ring (cdr image-ring))) (let ((image (car image-ring))) (set! image-ring (cdr image-ring)) image))) ;; display an image given a filename (define (show file) (and-let* ((image (img-load file))) (sdl-set-video-mode (sdl-surface-w image) (sdl-surface-h image) 24 0) (sdl-blit-surface image #f (sdl-get-video-surface) #f) (sdl-flip (sdl-get-video-surface)))) ;; show the first image (show (next-image)) ;; event handler (let handle ((e (sdl-make-event))) (if (sdl-wait-event e) (let ((type (sdl-event-type e))) (cond ((equal? type SDL_KEYDOWN) (show (next-image))) ((equal? type SDL_MOUSEBUTTONDOWN) (sdl-quit) (exit))))) (handle e))