X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fendgame.c;h=ddba7f9c34a43119fcd41e4e81442dc1f8d99739;hb=39809ded547bdbb08207d3e514950425215b4410;hp=b4811da455cae932495870203c4f10a8d4d650b8;hpb=b81f521c5ad7022ac12db18ca8fcdd9fb063831e;p=xscreensaver diff --git a/hacks/glx/endgame.c b/hacks/glx/endgame.c index b4811da4..ddba7f9c 100644 --- a/hacks/glx/endgame.c +++ b/hacks/glx/endgame.c @@ -20,7 +20,8 @@ "*showFPS: False \n" \ "*wireframe: False \n" \ -# define refresh_chess 0 +# define free_chess 0 +# define release_chess 0 # include "xlockmore.h" #else @@ -73,7 +74,7 @@ ENTRYPOINT ModeSpecOpt chess_opts = {countof(opts), opts, countof(vars), vars, N #ifdef USE_MODULES ModStruct chess_description = -{"chess", "init_chess", "draw_chess", "release_chess", +{"chess", "init_chess", "draw_chess", NULL, "draw_chess", "init_chess", NULL, &chess_opts, 1000, 1, 2, 1, 4, 1.0, "", "Chess", 0, NULL}; @@ -204,35 +205,16 @@ ENTRYPOINT Bool chess_handle_event (ModeInfo *mi, XEvent *event) { Chesscreen *cs = &qs[MI_SCREEN(mi)]; - if(event->xany.type == ButtonPress && event->xbutton.button == Button1) { - cs->button_down_p = True; - gltrackball_start (cs->trackball, - event->xbutton.x, event->xbutton.y, - MI_WIDTH (mi), MI_HEIGHT (mi)); + if (gltrackball_event_handler (event, cs->trackball, + MI_WIDTH (mi), MI_HEIGHT (mi), + &cs->button_down_p)) return True; - } - else if(event->xany.type == ButtonRelease - && event->xbutton.button == Button1) { - cs->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)) + else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { - gltrackball_mousewheel (cs->trackball, event->xbutton.button, 5, - !event->xbutton.state); + cs->done = 1; return True; } - else if(event->xany.type == MotionNotify && cs->button_down_p) { - gltrackball_track (cs->trackball, - event->xmotion.x, event->xmotion.y, - MI_WIDTH (mi), MI_HEIGHT (mi)); - return True; - } - + return False; } @@ -805,7 +787,15 @@ static void display(ModeInfo *mi, Chesscreen *cs) ENTRYPOINT void reshape_chess(ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; - glViewport(0,0, width, height); + int y = 0; + + if (width > height * 5) { /* tiny window: show middle */ + height = width * 9/16; + y = -height/2; + h = height / (GLfloat) width; + } + + glViewport(0,y, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, 1/h, 2.0, 30.0); @@ -818,14 +808,12 @@ ENTRYPOINT void init_chess(ModeInfo *mi) Chesscreen *cs; int screen = MI_SCREEN(mi); - if(!qs && - !(qs = (Chesscreen *) calloc(MI_NUM_SCREENS(mi), sizeof(Chesscreen)))) - return; + MI_INIT(mi, qs); cs = &qs[screen]; cs->window = MI_WINDOW(mi); cs->wire = MI_IS_WIREFRAME(mi); - cs->trackball = gltrackball_init (); + cs->trackball = gltrackball_init (False); cs->oldwhite = -1; @@ -978,16 +966,6 @@ ENTRYPOINT void draw_chess(ModeInfo *mi) glXSwapBuffers(disp, w); } -/** bust it */ -ENTRYPOINT void release_chess(ModeInfo *mi) -{ - if(qs) - free((void *) qs); - qs = 0; - - FreeAllGL(mi); -} - XSCREENSAVER_MODULE_2 ("Endgame", endgame, chess) #endif