-/* boing, Copyright (c) 2005 Jamie Zawinski <jwz@jwz.org>
+/* boing, Copyright (c) 2005-2008 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
* does not, obviously.
*/
-#include <X11/Intrinsic.h>
+#define DEFAULTS "*delay: 30000 \n" \
+ "*showFPS: False \n" \
+ "*wireframe: False \n" \
+
+# define refresh_boing 0
+# define release_boing 0
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
-extern XtAppContext app;
+#include "xlockmore.h"
+#include "gltrackball.h"
+#include <ctype.h>
+
+#ifdef USE_GL /* whole file */
-#define PROGCLASS "Boing"
-#define HACK_INIT init_boing
-#define HACK_DRAW draw_boing
-#define HACK_RESHAPE reshape_boing
-#define HACK_HANDLE_EVENT boing_handle_event
-#define EVENT_MASK PointerMotionMask
-#define sws_opts xlockmore_opts
#define DEF_SPIN "True"
#define DEF_LIGHTING "False"
#define DEF_SMOOTH "False"
-#define DEF_SCANLINES "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"
#define DEF_SHADOW_COLOR "#303030"
#define DEF_BACKGROUND "#8C8C8C"
-#define DEFAULTS "*delay: 30000 \n" \
- "*showFPS: False \n" \
- "*wireframe: False \n" \
- "*spin: " DEF_SPIN "\n" \
- "*lighting: " DEF_LIGHTING "\n" \
- "*smooth: " DEF_SMOOTH "\n" \
- "*scanlines: " DEF_SCANLINES "\n" \
- "*speed: " DEF_SPEED "\n" \
- "*angle: " DEF_ANGLE "\n" \
- "*ballSize: " DEF_SIZE "\n" \
- "*meridians: " DEF_MERIDIANS "\n" \
- "*parallels: " DEF_PARALLELS "\n" \
- "*tiles: " DEF_TILES "\n" \
- "*thickness: " DEF_THICKNESS "\n" \
- "*ballColor1: " DEF_BALL_COLOR1 "\n" \
- "*ballColor2: " DEF_BALL_COLOR2 "\n" \
- "*gridColor: " DEF_GRID_COLOR "\n" \
- "*shadowColor:" DEF_SHADOW_COLOR"\n" \
- ".background: " DEF_BACKGROUND "\n" \
-
-#undef countof
-#define countof(x) (sizeof((x))/sizeof((*x)))
-
-#include "xlockmore.h"
-#include "gltrackball.h"
-#include <ctype.h>
-
-#ifdef USE_GL /* whole file */
-
-#include <GL/glu.h>
-
typedef struct { GLfloat x, y, z; } XYZ;
typedef struct {
{ "-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},
{&ball_color2_str, "ballColor2", "BallColor2", DEF_BALL_COLOR2, t_String},
{&grid_color_str, "gridColor", "GridColor", DEF_GRID_COLOR, t_String},
{&shadow_str, "shadowColor","ShadowColor",DEF_SHADOW_COLOR,t_String},
- {&bg_str, "background", "Background", DEF_BACKGROUND, t_String},
+ /* dammit, -background is too magic... */
+ {&bg_str, "boingBackground", "Background", DEF_BACKGROUND, t_String},
};
-ModeSpecOpt sws_opts = {countof(opts), opts, countof(vars), vars, NULL};
+ENTRYPOINT ModeSpecOpt boing_opts = {countof(opts), opts, countof(vars), vars, NULL};
static void
parse_color (ModeInfo *mi, const char *name, const char *s, GLfloat *a)
/* boing_configuration *bp = &bps[MI_SCREEN(mi)]; */
glPushMatrix();
glTranslatef (0, 0, -0.5);
- glFrontFace (GL_CCW);
+/* glFrontFace (GL_CCW);*/
draw_grid (mi);
glPopMatrix();
glPushMatrix();
glRotatef (90, 1, 0, 0);
glTranslatef (0, 0, 0.5);
- glFrontFace (GL_CW);
+/* glFrontFace (GL_CW);*/
draw_grid (mi);
glPopMatrix();
}
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;
/* Window management, etc
*/
-void
+ENTRYPOINT void
reshape_boing (ModeInfo *mi, int width, int height)
{
GLfloat h = (GLfloat) height / (GLfloat) width;
}
-Bool
+ENTRYPOINT Bool
boing_handle_event (ModeInfo *mi, XEvent *event)
{
boing_configuration *bp = &bps[MI_SCREEN(mi)];
}
else if (event->xany.type == ButtonPress &&
(event->xbutton.button == Button4 ||
- event->xbutton.button == Button5))
+ event->xbutton.button == Button5 ||
+ event->xbutton.button == Button6 ||
+ event->xbutton.button == Button7))
{
gltrackball_mousewheel (bp->trackball, event->xbutton.button, 10,
!!event->xbutton.state);
}
-void
+ENTRYPOINT void
init_boing (ModeInfo *mi)
{
boing_configuration *bp;
fprintf(stderr, "%s: out of memory\n", progname);
exit(1);
}
-
- bp = &bps[MI_SCREEN(mi)];
}
bp = &bps[MI_SCREEN(mi)];
}
-void
+ENTRYPOINT void
draw_boing (ModeInfo *mi)
{
boing_configuration *bp = &bps[MI_SCREEN(mi)];
if (!bp->glx_context)
return;
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context));
+
mi->polygon_count = 0;
glShadeModel(GL_SMOOTH);
glEnable(GL_NORMALIZE);
- glEnable(GL_CULL_FACE);
- glEnable (GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
gltrackball_rotate (bp->trackball);
+ glRotatef(current_device_rotation(), 0, 0, 1);
glLightfv (GL_LIGHT0, GL_POSITION, bp->lightpos);
+ glDisable (GL_CULL_FACE);
+ glDisable (GL_DEPTH_TEST);
+
+ glEnable (GL_LINE_SMOOTH);
+ glHint (GL_LINE_SMOOTH_HINT, GL_NICEST);
+ glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable (GL_BLEND);
+
draw_box (mi);
draw_shadow (mi);
+
+ glEnable (GL_CULL_FACE);
+ glEnable (GL_DEPTH_TEST);
+
draw_ball (mi);
if (scanlines_p)
draw_scanlines (mi);
glXSwapBuffers(dpy, window);
}
+XSCREENSAVER_MODULE ("Boing", boing)
+
#endif /* USE_GL */