-/* glslideshow, Copyright (c) 2003-2008 Jamie Zawinski <jwz@jwz.org>
+/* glslideshow, Copyright (c) 2003-2014 Jamie Zawinski <jwz@jwz.org>
* Loads a sequence of images and smoothly pans around them; crossfades
* when loading new images.
*
"*showFPS: False \n" \
"*fpsSolid: True \n" \
"*useSHM: True \n" \
- "*titleFont: -*-helvetica-medium-r-normal-*-180-*\n" \
+ "*titleFont: -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" \
"*desktopGrabber: xscreensaver-getimage -no-desktop %s\n" \
"*grabDesktopImages: False \n" \
"*chooseRandomImages: True \n"
# define DEF_MIPMAP "True"
#include "grab-ximage.h"
-#include "glxfonts.h"
+#include "texfont.h"
typedef struct {
double x, y, w, h;
Bool checked_fps_p; /* Whether we have checked for a low
frame rate. */
- XFontStruct *xfont; /* for printing image file names */
- GLuint font_dlist;
+ texture_font_data *font_data; /* for printing image file names */
int sprite_id, image_id; /* debugging id counters */
static const char *
blurb (void)
{
-# ifdef HAVE_COCOA
+# ifdef HAVE_JWXYZ
return "GLSlideshow";
# else
static char buf[255];
img->geom.height *= scale;
}
- if (img->title) /* strip filename to part after last /. */
+ /* xscreensaver-getimage returns paths relative to the image directory
+ now, so leave the sub-directory part in. Unless it's an absolute path.
+ */
+ if (img->title && img->title[0] == '/')
{
+ /* strip filename to part between last "/" and last ".". */
char *s = strrchr (img->title, '/');
if (s) strcpy (img->title, s+1);
+ s = strrchr (img->title, '.');
+ if (s) *s = 0;
}
if (debug_p)
int vp_h = MI_HEIGHT(mi);
int img_w = sp->img->geom.width;
int img_h = sp->img->geom.height;
- int min_w, min_h, max_w, max_h;
+ int min_w, max_w;
double ratio = (double) img_h / img_w;
if (letterbox_p)
{
min_w = img_w;
- min_h = img_h;
}
else
{
if (img_w < vp_w)
- {
- min_w = vp_w;
- min_h = img_h * (float) vp_w / img_w;
- }
+ min_w = vp_w;
else
- {
- min_w = img_w * (float) vp_h / img_h;
- min_h = vp_h;
- }
+ min_w = img_w * (float) vp_h / img_h;
}
max_w = min_w * 100 / zoom;
- max_h = min_h * 100 / zoom;
sp->from.w = min_w + frand ((max_w - min_w) * 0.4);
sp->to.w = max_w - frand ((max_w - min_w) * 0.4);
if (do_titles &&
- img->title && *img->title)
+ img->title && *img->title &&
+ (sp->state == IN || sp->state == FULL))
{
- int x = 10;
- int y = mi->xgwa.height - 10;
- glColor4f (0, 0, 0, sp->opacity); /* cheap-assed dropshadow */
- print_gl_string (mi->dpy, ss->xfont, ss->font_dlist,
- mi->xgwa.width, mi->xgwa.height, x, y,
- img->title, False);
- x++; y++;
glColor4f (1, 1, 1, sp->opacity);
- print_gl_string (mi->dpy, ss->xfont, ss->font_dlist,
- mi->xgwa.width, mi->xgwa.height, x, y,
- img->title, False);
+ print_texture_label (mi->dpy, ss->font_data,
+ mi->xgwa.width, mi->xgwa.height,
+ 1, img->title);
}
}
glPopMatrix();
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
+
+/*
+ {
+ GLfloat rot = current_device_rotation();
+ glTranslatef (0.5, 0.5, 0);
+ glRotatef(rot, 0, 0, 1);
+ if ((rot > 45 && rot < 135) ||
+ (rot < -45 && rot > -135))
+ {
+ GLfloat s = MI_WIDTH(mi) / (GLfloat) MI_HEIGHT(mi);
+ glScalef (s, 1/s, 1);
+ }
+ glTranslatef (-0.5, -0.5, 0);
+ }
+*/
+
for (i = 0; i < ss->nsprites; i++)
draw_sprite (mi, ss->sprites[i]);
glPopMatrix();
glViewport (0, 0, width, height);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
+ glRotatef (current_device_rotation(), 0, 0, 1);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity();
{
slideshow_state *ss = &sss[MI_SCREEN(mi)];
- if (event->xany.type == ButtonPress &&
- event->xbutton.button == Button1)
- {
- ss->change_now_p = True;
- return True;
- }
- else if (event->xany.type == KeyPress)
- {
- KeySym keysym;
- char c = 0;
- XLookupString (&event->xkey, &c, 1, &keysym, 0);
- if (c == ' ' || c == '\r' || c == '\n' || c == '\t')
- {
- ss->change_now_p = True;
- return True;
- }
- }
- else if (event->xany.type == Expose ||
+ if (event->xany.type == Expose ||
event->xany.type == GraphicsExpose ||
event->xany.type == VisibilityNotify)
{
fprintf (stderr, "%s: exposure\n", blurb());
return False;
}
+ else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event))
+ {
+ ss->change_now_p = True;
+ return True;
+ }
return False;
}
static void
check_fps (ModeInfo *mi)
{
-#ifndef HAVE_COCOA /* always assume Cocoa is fast enough */
+#ifndef HAVE_JWXYZ /* always assume Cocoa and mobile are fast enough */
slideshow_state *ss = &sss[MI_SCREEN(mi)];
/* Need this in case zoom changed. */
reshape_slideshow (mi, mi->xgwa.width, mi->xgwa.height);
-#endif /* HAVE_COCOA */
+#endif /* HAVE_JWXYZ */
}
if (debug_p) glLineWidth (3);
- load_font (mi->dpy, "titleFont", &ss->xfont, &ss->font_dlist);
+ ss->font_data = load_texture_font (mi->dpy, "titleFont");
if (debug_p)
hack_resources();
draw_sprites (mi);
- ss->fps = fps_compute (mi->fpst, 0);
if (mi->fps_p) do_fps (mi);
glFinish();