-/* boing, Copyright (c) 2005-2008 Jamie Zawinski <jwz@jwz.org>
+/* boing, Copyright (c) 2005-2014 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
#define DEF_SMOOTH "False"
#define DEF_SCANLINES "True"
#define DEF_SPEED "1.0"
-#define DEF_SIZE "0.5"
+#define DEF_BALL_SIZE "0.5"
#define DEF_ANGLE "15"
#define DEF_MERIDIANS "16"
#define DEF_PARALLELS "8"
trackball_state *trackball;
Bool button_down_p;
+ GLfloat speed;
+
GLuint ball_list;
double ball_x, ball_y, ball_z, ball_th;
double ball_dx, ball_dy, ball_dz, ball_dth;
{ "-ball-color2",".ballColor2",XrmoptionSepArg, 0 },
{ "-grid-color", ".gridColor", XrmoptionSepArg, 0 },
{ "-shadow-color",".shadowColor",XrmoptionSepArg, 0 },
+ { "-background", ".boingBackground",XrmoptionSepArg, 0 },
+ { "-bg", ".boingBackground",XrmoptionSepArg, 0 },
};
static argtype vars[] = {
{&scanlines_p,"scanlines","Scanlines", DEF_SCANLINES, t_Bool},
{&speed, "speed", "Speed", DEF_SPEED, t_Float},
{&angle, "angle", "Angle", DEF_ANGLE, t_Int},
- {&ball_size, "ballSize", "BallSize", DEF_SIZE, t_Float},
+ {&ball_size, "ballSize", "BallSize", DEF_BALL_SIZE, t_Float},
{&meridians, "meridians", "meridians", DEF_MERIDIANS, t_Int},
{¶llels, "parallels", "parallels", DEF_PARALLELS, t_Int},
{&tiles, "tiles", "Tiles", DEF_TILES, t_Int},
int lh, ls;
int y;
glLoadIdentity();
- gluOrtho2D (0, w, 0, h);
+ glOrtho (0, w, 0, h, -1, 1);
if (h > 500) lh = 4, ls = 4;
else if (h > 300) lh = 2, ls = 1;
bp->ball_x += bp->ball_dx;
if (bp->ball_x < min) bp->ball_x = min, bp->ball_dx = -bp->ball_dx,
bp->ball_dth = -bp->ball_dth,
- bp->ball_dx += (frand(speed/2) - speed);
+ bp->ball_dx += (frand(bp->speed/2) - bp->speed);
else if (bp->ball_x > max) bp->ball_x = max, bp->ball_dx = -bp->ball_dx,
bp->ball_dth = -bp->ball_dth,
- bp->ball_dx += (frand(speed/2) - speed);
+ bp->ball_dx += (frand(bp->speed/2) - bp->speed);
bp->ball_dy += bp->ball_ddy;
bp->ball_y += bp->ball_dy;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
+
+ if (height > width)
+ {
+ GLfloat s = width / (GLfloat) height;
+ glScalef (s, s, s);
+ }
+
gluPerspective (8.0, 1/h, 1.0, 10.0);
glMatrixMode(GL_MODELVIEW);
{
boing_configuration *bp = &bps[MI_SCREEN(mi)];
- if (event->xany.type == ButtonPress &&
- event->xbutton.button == Button1)
- {
- bp->button_down_p = True;
- gltrackball_start (bp->trackball,
- event->xbutton.x, event->xbutton.y,
- MI_WIDTH (mi), MI_HEIGHT (mi));
- return True;
- }
- else if (event->xany.type == ButtonRelease &&
- event->xbutton.button == Button1)
- {
- bp->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))
- {
- gltrackball_mousewheel (bp->trackball, event->xbutton.button, 10,
- !!event->xbutton.state);
- return True;
- }
- else if (event->xany.type == MotionNotify &&
- bp->button_down_p)
- {
- gltrackball_track (bp->trackball,
- event->xmotion.x, event->xmotion.y,
- MI_WIDTH (mi), MI_HEIGHT (mi));
- return True;
- }
+ if (gltrackball_event_handler (event, bp->trackball,
+ MI_WIDTH (mi), MI_HEIGHT (mi),
+ &bp->button_down_p))
+ return True;
return False;
}
boing_configuration *bp;
int wire = MI_IS_WIREFRAME(mi);
- if (!bps) {
- bps = (boing_configuration *)
- calloc (MI_NUM_SCREENS(mi), sizeof (boing_configuration));
- if (!bps) {
- fprintf(stderr, "%s: out of memory\n", progname);
- exit(1);
- }
-
- bp = &bps[MI_SCREEN(mi)];
- }
+ MI_INIT (mi, bps, NULL);
bp = &bps[MI_SCREEN(mi)];
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- speed = speed / 800.0;
+ bp->speed = speed / 800.0;
- bp->ball_dth = (spin ? -speed * 7 * 360 : 0);
+ bp->ball_dth = (spin ? -bp->speed * 7 * 360 : 0);
bp->ball_x = 0.5 - ((ball_size/2) + frand(1-ball_size));
bp->ball_y = 0.2;
- bp->ball_dx = speed * 6 + frand(speed);
- bp->ball_ddy = -speed;
+ bp->ball_dx = bp->speed * 6 + frand(bp->speed);
+ bp->ball_ddy = -bp->speed;
- bp->ball_dz = speed * 6 + frand(speed);
+ bp->ball_dz = bp->speed * 6 + frand(bp->speed);
- bp->trackball = gltrackball_init ();
+ bp->trackball = gltrackball_init (False);
}
tick_physics (mi);
glPushMatrix ();
+
+ {
+ double rot = current_device_rotation();
+ glRotatef(rot, 0, 0, 1);
+/*
+ if ((rot > 45 && rot < 135) ||
+ (rot < -45 && rot > -135))
+ {
+ GLfloat s = MI_WIDTH(mi) / (GLfloat) MI_HEIGHT(mi);
+ glScalef (1/s, s, 1);
+ }
+*/
+ }
+
gltrackball_rotate (bp->trackball);
glLightfv (GL_LIGHT0, GL_POSITION, bp->lightpos);