-/* carousel, Copyright (c) 2005-2011 Jamie Zawinski <jwz@jwz.org>
+/* carousel, Copyright (c) 2005-2014 Jamie Zawinski <jwz@jwz.org>
* Loads a sequence of images and rotates them around.
*
* Permission to use, copy, modify, distribute, and sell this software and its
free (frame->loading.title);
frame->loading.title = (filename ? strdup (filename) : 0);
-# if 0 /* xscreensaver-getimage returns paths relative to the image directory
- now, so leave the sub-directory part in.
- */
- if (frame->loading.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 (frame->loading.title && frame->loading.title[0] == '/')
+ { /* strip filename to part after last /. */
char *s = strrchr (frame->loading.title, '/');
if (s) strcpy (frame->loading.title, s+1);
}
-# endif /* 0 */
if (debug_p)
fprintf (stderr, "%s: loaded %4d x %-4d %4d x %-4d \"%s\"\n",
{
if (! ss->button_down_p)
ss->button_down_time = time((time_t *) 0);
- ss->button_down_p = True;
- gltrackball_start (ss->trackball,
- event->xbutton.x, event->xbutton.y,
- MI_WIDTH (mi), MI_HEIGHT (mi));
- return True;
}
else if (event->xany.type == ButtonRelease &&
event->xbutton.button == Button1)
for (i = 0; i < ss->nframes; i++)
ss->frames[i]->expires += secs;
}
- ss->button_down_p = False;
- return True;
}
- else if (event->xany.type == ButtonPress &&
- (event->xbutton.button == Button4 ||
- event->xbutton.button == Button5 ||
- event->xbutton.button == Button6 ||
- event->xbutton.button == Button7))
- {
- gltrackball_mousewheel (ss->trackball, event->xbutton.button, 5,
- !event->xbutton.state);
- return True;
- }
- else if (event->xany.type == MotionNotify &&
- ss->button_down_p)
+
+ if (gltrackball_event_handler (event, ss->trackball,
+ MI_WIDTH (mi), MI_HEIGHT (mi),
+ &ss->button_down_p))
+ return True;
+ else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event))
{
- gltrackball_track (ss->trackball,
- event->xmotion.x, event->xmotion.y,
- MI_WIDTH (mi), MI_HEIGHT (mi));
+ int i = random() % ss->nframes;
+ ss->frames[i]->expires = 0;
return True;
}
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
- gluOrtho2D(0, MI_WIDTH(mi), 0, MI_HEIGHT(mi));
+ {
+ double rot = current_device_rotation();
+ 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);
+ }
+ }
+
+ if (MI_WIDTH(mi) < MI_HEIGHT(mi)) /* USE_IPHONE portrait orientation */
+ {
+ GLfloat s = (MI_WIDTH(mi) / (GLfloat) MI_HEIGHT(mi));
+ glScalef (s, s, s);
+ glTranslatef(-s/2, 0, 0);
+ }
+
+ glOrtho(0, MI_WIDTH(mi), 0, MI_HEIGHT(mi), -1, 1);
glTranslatef ((MI_WIDTH(mi) - ss->loading_sw) / 2,
(MI_HEIGHT(mi) - ss->loading_sh) / 2,
0);
ss->rot = make_rotator (spin_speed, spin_speed, spin_speed,
spin_accel, wander_speed, True);
- ss->trackball = gltrackball_init ();
+ ss->trackball = gltrackball_init (False);
}
if (strstr ((char *) glGetString(GL_EXTENSIONS),
glPushMatrix();
+ glRotatef(current_device_rotation(), 0, 0, 1);
+
/* Run the startup "un-shrink" animation.
*/