-/* bouncingcow, Copyright (c) 2003, 2004 Jamie Zawinski <jwz@jwz.org>
+/* bouncingcow, Copyright (c) 2003-2006 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
* Boing, boing, boing. Cow, cow, cow.
*/
-#include <X11/Intrinsic.h>
-
-extern XtAppContext app;
-
-#define PROGCLASS "BouncingCow"
-#define HACK_INIT init_cow
-#define HACK_DRAW draw_cows
-#define HACK_RESHAPE reshape_cow
-#define HACK_HANDLE_EVENT cow_handle_event
-#define EVENT_MASK PointerMotionMask
-#define sws_opts xlockmore_opts
-
-#define DEF_SPEED "0.7"
-#define DEF_TEXTURE "(none)"
-
#define DEFAULTS "*delay: 30000 \n" \
"*count: 1 \n" \
"*showFPS: False \n" \
"*wireframe: False \n" \
- "*speed: " DEF_SPEED " \n" \
- "*texture: " DEF_TEXTURE "\n" \
/* #define DEBUG */
+
+# define refresh_cow 0
+# define release_cow 0
+#define DEF_SPEED "1.0"
+#define DEF_TEXTURE "(none)"
+
#undef countof
#define countof(x) (sizeof((x))/sizeof((*x)))
#ifdef USE_GL /* whole file */
-#include <GL/glu.h>
-
-
#include "gllist.h"
extern struct gllist
*cow_face, *cow_hide, *cow_hoofs, *cow_horns, *cow_tail, *cow_udder;
-struct gllist **all_objs[] = {
+static struct gllist **all_objs[] = {
&cow_face, &cow_hide, &cow_hoofs, &cow_horns, &cow_tail, &cow_udder
};
{&do_texture, "texture", "Texture", DEF_TEXTURE, t_String},
};
-ModeSpecOpt sws_opts = {countof(opts), opts, countof(vars), vars, NULL};
+ENTRYPOINT ModeSpecOpt cow_opts = {countof(opts), opts, countof(vars), vars, NULL};
#define BOTTOM 28.0
/* Window management, etc
*/
-void
+ENTRYPOINT void
reshape_cow (ModeInfo *mi, int width, int height)
{
GLfloat h = (GLfloat) height / (GLfloat) width;
}
-Bool
+ENTRYPOINT Bool
cow_handle_event (ModeInfo *mi, XEvent *event)
{
cow_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_cow (ModeInfo *mi)
{
cow_configuration *bp;
for (i = 0; i < countof(all_objs); i++)
{
GLfloat black[4] = {0, 0, 0, 1};
- struct gllist *gll = *all_objs[i];
- if (wire)
- gll->primitive = GL_LINE_LOOP;
+ const struct gllist *gll = *all_objs[i];
glNewList (bp->dlists[i], GL_COMPILE);
glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny);
}
- renderList (gll);
+ renderList (gll, wire);
glMatrixMode(GL_TEXTURE);
glPopMatrix();
-void
-draw_cows (ModeInfo *mi)
+ENTRYPOINT void
+draw_cow (ModeInfo *mi)
{
cow_configuration *bp = &bps[MI_SCREEN(mi)];
Display *dpy = MI_DISPLAY(mi);
if (!bp->glx_context)
return;
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context));
+
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
glXSwapBuffers(dpy, window);
}
+XSCREENSAVER_MODULE_2 ("BouncingCow", bouncingcow, cow)
+
#endif /* USE_GL */