projects
/
xscreensaver
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
From http://www.jwz.org/xscreensaver/xscreensaver-5.38.tar.gz
[xscreensaver]
/
hacks
/
glx
/
rubik.c
diff --git
a/hacks/glx/rubik.c
b/hacks/glx/rubik.c
index 0cc99019ebc19ab8dc4970a6f2ee9e127117f28e..ed06645aedce34379cda5132ad4c4d0f6e804e31 100644
(file)
--- a/
hacks/glx/rubik.c
+++ b/
hacks/glx/rubik.c
@@
-112,7
+112,7
@@
static const char sccsid[] = "@(#)rubik.c 5.01 2001/03/01 xlockmore";
"*size: -6 \n" \
"*suppressRotationAnimation: True\n" \
"*size: -6 \n" \
"*suppressRotationAnimation: True\n" \
-# define re
fresh
_rubik 0
+# define re
lease
_rubik 0
# include "xlockmore.h" /* from the xscreensaver distribution */
#else /* !STANDALONE */
# include "xlock.h" /* from the xlockmore distribution */
# include "xlockmore.h" /* from the xscreensaver distribution */
#else /* !STANDALONE */
# include "xlock.h" /* from the xlockmore distribution */
@@
-163,8
+163,8
@@
ENTRYPOINT ModeSpecOpt rubik_opts =
#ifdef USE_MODULES
ModStruct rubik_description =
#ifdef USE_MODULES
ModStruct rubik_description =
-{"rubik", "init_rubik", "draw_rubik",
"release_rubik"
,
- "draw_rubik", "change_rubik",
(char *) NULL
, &rubik_opts,
+{"rubik", "init_rubik", "draw_rubik",
(char *) NULL
,
+ "draw_rubik", "change_rubik",
"free_rubik"
, &rubik_opts,
10000, -30, 5, -6, 64, 1.0, "",
"Shows an auto-solving Rubik's Cube", 0, NULL};
10000, -30, 5, -6, 64, 1.0, "",
"Shows an auto-solving Rubik's Cube", 0, NULL};
@@
-1813,8
+1813,14
@@
ENTRYPOINT void
reshape_rubik(ModeInfo * mi, int width, int height)
{
rubikstruct *rp = &rubik[MI_SCREEN(mi)];
reshape_rubik(ModeInfo * mi, int width, int height)
{
rubikstruct *rp = &rubik[MI_SCREEN(mi)];
+ int y = 0;
- glViewport(0, 0, rp->WindW = (GLint) width, rp->WindH = (GLint) height);
+ if (width > height * 5) { /* tiny window: show middle */
+ height = width;
+ y = -height/2;
+ }
+
+ glViewport(0, y, rp->WindW = (GLint) width, rp->WindH = (GLint) height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0);
@@
-1868,9
+1874,10
@@
pinit(ModeInfo * mi)
return (shuffle(mi));
}
return (shuffle(mi));
}
-
static
void
-free_rubik(
rubikstruct *rp
)
+
ENTRYPOINT
void
+free_rubik(
ModeInfo *mi
)
{
{
+ rubikstruct *rp = &rubik[MI_SCREEN(mi)];
int i;
for (i = 0; i < MAXFACES; i++)
int i;
for (i = 0; i < MAXFACES; i++)
@@
-1889,33
+1896,12
@@
free_rubik(rubikstruct *rp)
}
}
}
}
-ENTRYPOINT void
-release_rubik(ModeInfo * mi)
-{
- if (rubik != NULL) {
- int screen;
-
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
- rubikstruct *rp = &rubik[screen];
-
- free_rubik(rp);
- }
- (void) free((void *) rubik);
- rubik = (rubikstruct *) NULL;
- }
- FreeAllGL(mi);
-}
-
ENTRYPOINT void
init_rubik(ModeInfo * mi)
{
rubikstruct *rp;
ENTRYPOINT void
init_rubik(ModeInfo * mi)
{
rubikstruct *rp;
- if (rubik == NULL) {
- if ((rubik = (rubikstruct *) calloc(MI_NUM_SCREENS(mi),
- sizeof (rubikstruct))) == NULL)
- return;
- }
+ MI_INIT (mi, rubik);
rp = &rubik[MI_SCREEN(mi)];
rp->step = NRAND(90);
rp->PX = ((float) LRAND() / (float) MAXRAND) * 2.0 - 1.0;
rp = &rubik[MI_SCREEN(mi)];
rp->step = NRAND(90);
rp->PX = ((float) LRAND() / (float) MAXRAND) * 2.0 - 1.0;
@@
-1928,7
+1914,7
@@
init_rubik(ModeInfo * mi)
reshape_rubik(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
glDrawBuffer(GL_BACK);
if (!pinit(mi)) {
reshape_rubik(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
glDrawBuffer(GL_BACK);
if (!pinit(mi)) {
- free_rubik(
rp
);
+ free_rubik(
mi
);
if (MI_IS_VERBOSE(mi)) {
(void) fprintf(stderr,
"Could not allocate memory for rubik\n");
if (MI_IS_VERBOSE(mi)) {
(void) fprintf(stderr,
"Could not allocate memory for rubik\n");
@@
-2028,7
+2014,7
@@
draw_rubik(ModeInfo * mi)
glRotatef(rp->step * 90, 0, 0, 1);
if (!draw_cube(mi)) {
glRotatef(rp->step * 90, 0, 0, 1);
if (!draw_cube(mi)) {
-
release_rubik
(mi);
+
MI_ABORT
(mi);
return;
}
if (MI_IS_FPS(mi)) do_fps (mi);
return;
}
if (MI_IS_FPS(mi)) do_fps (mi);
@@
-2061,7
+2047,7
@@
draw_rubik(ModeInfo * mi)
rp->rotatestep += rp->anglestep;
if (rp->rotatestep > rp->degreeTurn) {
if (!evalmovement(mi, rp->movement)) {
rp->rotatestep += rp->anglestep;
if (rp->rotatestep > rp->degreeTurn) {
if (!evalmovement(mi, rp->movement)) {
- free_rubik(
rp
);
+ free_rubik(
mi
);
if (MI_IS_VERBOSE(mi)) {
(void) fprintf(stderr,
"Could not allocate memory for rubik\n");
if (MI_IS_VERBOSE(mi)) {
(void) fprintf(stderr,
"Could not allocate memory for rubik\n");
@@
-2077,7
+2063,7
@@
draw_rubik(ModeInfo * mi)
if (rp->done) {
if (++rp->rotatestep > DELAY_AFTER_SOLVING)
if (!shuffle(mi)) {
if (rp->done) {
if (++rp->rotatestep > DELAY_AFTER_SOLVING)
if (!shuffle(mi)) {
- free_rubik(
rp
);
+ free_rubik(
mi
);
if (MI_IS_VERBOSE(mi)) {
(void) fprintf(stderr,
"Could not allocate memory for rubik\n");
if (MI_IS_VERBOSE(mi)) {
(void) fprintf(stderr,
"Could not allocate memory for rubik\n");
@@
-2105,7
+2091,7
@@
draw_rubik(ModeInfo * mi)
rp->rotatestep += rp->anglestep;
if (rp->rotatestep > rp->degreeTurn) {
if (!evalmovement(mi, rp->movement)) {
rp->rotatestep += rp->anglestep;
if (rp->rotatestep > rp->degreeTurn) {
if (!evalmovement(mi, rp->movement)) {
- free_rubik(
rp
);
+ free_rubik(
mi
);
if (MI_IS_VERBOSE(mi)) {
(void) fprintf(stderr,
"Could not allocate memory for rubik\n");
if (MI_IS_VERBOSE(mi)) {
(void) fprintf(stderr,
"Could not allocate memory for rubik\n");
@@
-2139,7
+2125,7
@@
change_rubik(ModeInfo * mi)
if (!rp->glx_context)
return;
if (!pinit(mi)) {
if (!rp->glx_context)
return;
if (!pinit(mi)) {
- free_rubik(
rp
);
+ free_rubik(
mi
);
if (MI_IS_VERBOSE(mi)) {
(void) fprintf(stderr,
"Could not allocate memory for rubik\n");
if (MI_IS_VERBOSE(mi)) {
(void) fprintf(stderr,
"Could not allocate memory for rubik\n");