/***************************
** crackberg; Matus Telgarsky [ catachresis@cmu.edu ] 2005
** */
-#ifndef HAVE_COCOA
+#ifndef HAVE_JWXYZ
# define XK_MISCELLANY
# include <X11/keysymdef.h>
#endif
"*wireframe: False \n" \
# define refresh_crackberg 0
+# define release_crackberg 0
#undef countof
#define countof(x) (sizeof((x))/sizeof((*x)))
** */
ENTRYPOINT void reshape_crackberg (ModeInfo *mi, int w, int h);
+static void free_crackberg (ModeInfo *mi);
ENTRYPOINT void init_crackberg (ModeInfo *mi)
{
cberg_state *cberg;
- if (!cbergs) {
- nsubdivs %= 16; /* just in case.. */
+ nsubdivs %= 16; /* just in case.. */
- if ( !(cbergs = calloc(MI_NUM_SCREENS(mi), sizeof(cberg_state)))) {
- perror(progname);
- exit(1);
- }
+ MI_INIT(mi, cbergs, free_crackberg);
- if (visibility > 1.0 || visibility < 0.2) {
- printf("visibility must be in range [0.2 .. 1.0]\n");
- visibility = 1.0;
- }
+ if (visibility > 1.0 || visibility < 0.2) {
+ printf("visibility must be in range [0.2 .. 1.0]\n");
+ visibility = 1.0;
}
cberg = &cbergs[MI_SCREEN(mi)];
if (dy > 0 && dy > dx) dx = 0;
if (dy < 0 && dy < dx) dx = 0;
+ {
+ int rot = current_device_rotation();
+ int swap;
+ while (rot <= -180) rot += 360;
+ while (rot > 180) rot -= 360;
+ if (rot > 135 || rot < -135) /* 180 */
+ dx = -dx, dy = -dy;
+ else if (rot > 45) /* 90 */
+ swap = dx, dx = -dy, dy = swap;
+ else if (rot < -45) /* 270 */
+ swap = dx, dx = dy, dy = -swap;
+ }
+
if (dx > 0) cberg->motion_state |= MOTION_LEFT;
else if (dx < 0) cberg->motion_state |= MOTION_RIGHT;
else if (dy > 0) cberg->motion_state |= MOTION_FORW;
}
/* uh */
-ENTRYPOINT void release_crackberg (ModeInfo *mi)
+static void free_crackberg (ModeInfo *mi)
{
- if (cbergs) {
- int screen;
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
- cberg_state *cberg = &cbergs[screen];
- if (cberg->norms)
- free(cberg->norms);
- free(cberg->heights);
- }
- free (cbergs);
- cbergs = 0;
- }
+ cberg_state *cberg = &cbergs[MI_SCREEN(mi)];
+ if (cberg->norms)
+ free(cberg->norms);
+ free(cberg->heights);
}
XSCREENSAVER_MODULE ("Crackberg", crackberg)