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
/
polyominoes.c
diff --git
a/hacks/polyominoes.c
b/hacks/polyominoes.c
index c89fb31f4c42c5d8be190299204f4e288de26bda..b87c3d33dc85e6fab7e41ffae7306d8a4b9808f5 100644
(file)
--- a/
hacks/polyominoes.c
+++ b/
hacks/polyominoes.c
@@
-40,10
+40,10
@@
static const char sccsid[] = "@(#)polyominoes.c 5.01 2000/12/18 xlockmore";
"*fpsSolid: true \n" \
# define release_polyominoes 0
"*fpsSolid: true \n" \
# define release_polyominoes 0
+# define reshape_polyominoes 0
# define polyominoes_handle_event 0
# define SMOOTH_COLORS
# include "xlockmore.h" /* in xscreensaver distribution */
# define polyominoes_handle_event 0
# define SMOOTH_COLORS
# include "xlockmore.h" /* in xscreensaver distribution */
-# include "erase.h"
#else /* STANDALONE */
# include "xlock.h" /* in xlockmore distribution */
#endif /* STANDALONE */
#else /* STANDALONE */
# include "xlock.h" /* in xlockmore distribution */
#endif /* STANDALONE */
@@
-83,8
+83,8
@@
ENTRYPOINT ModeSpecOpt polyominoes_opts =
#ifdef USE_MODULES
ModStruct polyominoes_description = {
"polyominoes", "init_polyominoes", "draw_polyominoes", (char *) NULL,
#ifdef USE_MODULES
ModStruct polyominoes_description = {
"polyominoes", "init_polyominoes", "draw_polyominoes", (char *) NULL,
- "refresh_polyominoes", "init_polyominoes",
(char *) NULL, &polyominoes_opts
,
- 6000, 1, 8192, 1, 64, 1.0, "",
+ "refresh_polyominoes", "init_polyominoes",
"free_polyominoes"
,
+
&polyominoes_opts,
6000, 1, 8192, 1, 64, 1.0, "",
"Shows attempts to place polyominoes into a rectangle", 0, NULL
};
"Shows attempts to place polyominoes into a rectangle", 0, NULL
};
@@
-177,10
+177,6
@@
typedef struct _polyominoesstruct{
int *reason_to_not_attach;
int counter;
int *reason_to_not_attach;
int counter;
-
-#ifdef STANDALONE
- eraser_state *eraser;
-#endif
} polyominoesstruct;
#define ARRAY(x,y) (sp->array[(x)*sp->height+(y)])
} polyominoesstruct;
#define ARRAY(x,y) (sp->array[(x)*sp->height+(y)])
@@
-1053,7
+1049,7
@@
static void free_bitmaps(polyominoesstruct *sp)
#define deallocate(p,t) if ((p)!=NULL) {free(p); p=(t*)NULL;}
#define deallocate(p,t) if ((p)!=NULL) {free(p); p=(t*)NULL;}
-
static
void free_polyominoes(ModeInfo * mi)
+
ENTRYPOINT
void free_polyominoes(ModeInfo * mi)
{
polyominoesstruct *sp = &polyominoeses[MI_SCREEN(mi)];
int n;
{
polyominoesstruct *sp = &polyominoeses[MI_SCREEN(mi)];
int n;
@@
-2099,7
+2095,7
@@
init_polyominoes (ModeInfo * mi)
int box1, box2;
int *perm;
int box1, box2;
int *perm;
- MI_INIT (mi, polyominoeses
, free_polyominoes
);
+ MI_INIT (mi, polyominoeses);
sp = &polyominoeses[MI_SCREEN(mi)];
sp->rot180 = 0;
sp = &polyominoeses[MI_SCREEN(mi)];
sp->rot180 = 0;
@@
-2176,6
+2172,12
@@
init_polyominoes (ModeInfo * mi)
}
}
}
}
+ if (MI_HEIGHT(mi) > MI_WIDTH(mi)) { /* rotate if portrait */
+ int swap = sp->height;
+ sp->height = sp->width;
+ sp->width = swap;
+ }
+
allocate(sp->attach_list,int,sp->nr_polyominoes*sizeof(int));
sp->nr_attached = 0;
allocate(sp->attach_list,int,sp->nr_polyominoes*sizeof(int));
sp->nr_attached = 0;
@@
-2197,6
+2199,13
@@
init_polyominoes (ModeInfo * mi)
else
sp->box = box2;
else
sp->box = box2;
+ if (MI_WIDTH(mi) > MI_HEIGHT(mi) * 5 || /* weird window aspect ratio */
+ MI_HEIGHT(mi) > MI_WIDTH(mi)* 5) {
+ sp->box *= (MI_WIDTH(mi) > MI_HEIGHT(mi)
+ ? MI_WIDTH(mi) / (double) MI_HEIGHT(mi)
+ : MI_HEIGHT(mi) / (double) MI_WIDTH(mi));
+ }
+
if (sp->box >= 12) {
sp->box = (sp->box/12)*12;
create_bitmaps(mi,sp);
if (sp->box >= 12) {
sp->box = (sp->box/12)*12;
create_bitmaps(mi,sp);
@@
-2242,10
+2251,8
@@
init_polyominoes (ModeInfo * mi)
sp->wait = 0;
sp->wait = 0;
-#ifndef STANDALONE
/* Clear the background. */
MI_CLEARWINDOW(mi);
/* Clear the background. */
MI_CLEARWINDOW(mi);
-#endif
}
}
@@
-2261,32
+2268,15
@@
draw_polyominoes (ModeInfo * mi)
return;
sp = &polyominoeses[MI_SCREEN(mi)];
return;
sp = &polyominoeses[MI_SCREEN(mi)];
-#ifdef STANDALONE
- if (sp->eraser) {
- sp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), sp->eraser);
- if (!sp->eraser)
- init_polyominoes(mi);
- return;
- }
-#endif
-
if (MI_CYCLES(mi) != 0) {
if (++sp->counter > MI_CYCLES(mi)) {
if (MI_CYCLES(mi) != 0) {
if (++sp->counter > MI_CYCLES(mi)) {
-#ifdef STANDALONE
- sp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), sp->eraser);
-#else /* !STANDALONE */
init_polyominoes(mi);
init_polyominoes(mi);
-#endif /* !STANDALONE */
return;
}
}
if (sp->box == 0) {
return;
}
}
if (sp->box == 0) {
-#ifdef STANDALONE
- sp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), sp->eraser);
-#else /* !STANDALONE */
init_polyominoes(mi);
init_polyominoes(mi);
-#endif
return;
}
return;
}
@@
-2365,18
+2355,13
@@
draw_polyominoes (ModeInfo * mi)
sp->wait = 0;
}
sp->wait = 0;
}
-ENTRYPOINT void
-reshape_polyominoes(ModeInfo * mi, int width, int height)
-{
- XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi));
- init_polyominoes (mi);
-}
-
+#ifndef STANDALONE
ENTRYPOINT void
refresh_polyominoes (ModeInfo * mi)
{
MI_CLEARWINDOW(mi);
}
ENTRYPOINT void
refresh_polyominoes (ModeInfo * mi)
{
MI_CLEARWINDOW(mi);
}
+#endif
XSCREENSAVER_MODULE ("Polyominoes", polyominoes)
XSCREENSAVER_MODULE ("Polyominoes", polyominoes)