X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fmaze.c;h=d5f4ef27a8873aeeecab731055969d0d9c18f39d;hb=6afd6db0ae9396cd7ff897ade597cd5483f49b0e;hp=d963ad3e754ac48ef77664ab6eb86d409a66ac18;hpb=7b34ef992563d7bcbb64cc5597dc45fa24470b05;p=xscreensaver diff --git a/hacks/maze.c b/hacks/maze.c index d963ad3e..d5f4ef27 100644 --- a/hacks/maze.c +++ b/hacks/maze.c @@ -93,10 +93,11 @@ #include /* #include */ +/* #define gray1_width 2 #define gray1_height 2 static const char gray1_bits[] = { 0x01, 0x02 }; - +*/ #define MAX_MAZE_SIZE_X 1000 #define MAX_MAZE_SIZE_Y 1000 @@ -210,12 +211,17 @@ set_maze_sizes (struct state *st, int width, int height) static void initialize_maze (struct state *st) { + int retry_count = 0; int i, j, wall; int logow = 1 + st->logo_width / st->grid_width; int logoh = 1 + st->logo_height / st->grid_height; AGAIN: + /* This can happen if the window is really small. Let's not sweat it. */ + if (++retry_count > 100) return; + + /* initialize all squares */ for ( i=0; imaze_size_x; i++) { for ( j=0; jmaze_size_y; j++) { @@ -865,8 +871,10 @@ static int backup (struct state *st) /* back up a move */ { st->sqnum--; - st->cur_sq_x = st->move_list[st->sqnum].x; - st->cur_sq_y = st->move_list[st->sqnum].y; + if (st->sqnum >= 0) { + st->cur_sq_x = st->move_list[st->sqnum].x; + st->cur_sq_y = st->move_list[st->sqnum].y; + } return ( st->sqnum ); } @@ -1472,7 +1480,7 @@ maze_init (Display *dpy_arg, Window window_arg) st->logo_map = xscreensaver_logo (xgwa.screen, xgwa.visual, st->window, xgwa.colormap, bg, &pixels, &npixels, &logo_mask, - xgwa.width > 800); + xgwa.width > 800 || xgwa.height > 800); if (logo_mask) { XSetClipMask (st->dpy, st->logo_gc, logo_mask); XFreePixmap (st->dpy, logo_mask); @@ -1583,6 +1591,9 @@ maze_draw (Display *dpy, Window window, void *closure) st->stop = 0; st->state = 1; + if (st->solve_state && st->solve_state->running) + st->solve_state->running = 0; + st->sync_p = ((random() % 4) != 0); size = get_integer_resource (st->dpy, "gridSize", "Dimension"); @@ -1603,9 +1614,8 @@ static Bool maze_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; - switch (event->type) + if (event->type == ButtonPress) { - case ButtonPress: switch (event->xbutton.button) { case 2: @@ -1622,14 +1632,17 @@ maze_event (Display *dpy, Window window, void *closure, XEvent *event) st->stop = 0 ; return True; } - break; - - case Expose: + } + else if (event->type == Expose) + { st->restart = 1; - break; - - default: - break; + return False; + } + else if (screenhack_event_helper (dpy, window, event)) + { + st->restart = 1 ; + st->stop = 0 ; + return True; } return False; }