"*count: 200 \n" \
"*cycles: 1000 \n" \
"*ncolors: 32 \n" \
- "*titleFont: -*-helvetica-bold-r-normal-*-180-*\n" \
+ "*titleFont: -*-helvetica-bold-r-normal-*-*-180-*-*-*-*-*-*\n" \
"*showFPS: False \n" \
"*wireframe: False \n" \
# define refresh_juggle 0
+# define release_juggle 0
#undef countof
#define countof(x) (sizeof((x))/sizeof((*x)))
#include "tube.h"
#include "rotator.h"
#include "gltrackball.h"
-#include "glxfonts.h"
+#include "texfont.h"
#include <ctype.h>
#ifdef USE_GL /* whole file */
ObjType objtypes;
Object *objects;
struct patternindex patternindex;
-
- XFontStruct *mode_font;
- GLuint font_dlist;
+ texture_font_data *font_data;
} jugglestruct;
static jugglestruct *juggles = (jugglestruct *) NULL;
}
static void
-free_juggle(jugglestruct *sp) {
+free_juggle(ModeInfo *mi) {
+ jugglestruct *sp = &juggles[MI_SCREEN(mi)];
+
if (sp->head != NULL) {
while (sp->head->next != sp->head) {
trajectory_destroy(sp->head->next);
free(sp->pattern);
sp->pattern = NULL;
}
- if (sp->mode_font!=None) {
- XFreeFontInfo(NULL,sp->mode_font,1);
- sp->mode_font = None;
- }
}
static Bool
-add_throw(jugglestruct *sp, char type, int h, Notation n, const char* name)
+add_throw(ModeInfo *mi, char type, int h, Notation n, const char* name)
{
+ jugglestruct *sp = &juggles[MI_SCREEN(mi)];
Trajectory *t;
ADD_ELEMENT(Trajectory, t, sp->head->prev);
if(t == NULL){ /* Out of Memory */
- free_juggle(sp);
+ free_juggle(mi);
return False;
}
t->object = NULL;
static Bool
program(ModeInfo *mi, const char *patn, const char *name, int cycles)
{
- jugglestruct *sp = &juggles[MI_SCREEN(mi)];
const char *p;
int w, h, i, seen;
Notation notation;
case ' ':
if (seen) {
i++;
- if (!add_throw(sp, type, h, notation, title))
+ if (!add_throw(mi, type, h, notation, title))
return False;
title = NULL;
type=' ';
}
}
if (seen) { /* end of sequence */
- if (!add_throw(sp, type, h, notation, title))
+ if (!add_throw(mi, type, h, notation, title))
return False;
title = NULL;
}
/* ..nm.. -> .. LTn LC RTm RC .. */
static Bool
-part(jugglestruct *sp)
+part(ModeInfo *mi)
{
+ jugglestruct *sp = &juggles[MI_SCREEN(mi)];
Trajectory *t, *nt, *p;
Hand hand = (LRAND() & 1) ? RIGHT : LEFT;
t->action = CATCH;
ADD_ELEMENT(Trajectory, nt, p);
if(nt == NULL){
- free_juggle(sp);
+ free_juggle(mi);
return False;
}
nt->object = NULL;
int soffx = 10;
int soffy = 11;
+ glFrontFace(GL_CCW);
+
j = 1;
for(side = LEFT; side <= RIGHT; side = (Hand)((int)side + 1)) {
/* Translate into device coords */
glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gcolor);
+ glFrontFace(GL_CCW);
+
{
GLfloat scale = ((GLfloat) a[10].x - a[9].x) / 2;
int slices = 12;
gcolor2[1] = gcolor1[1] / 3;
gcolor2[2] = gcolor1[2] / 3;
+ glFrontFace(GL_CCW);
+
{
GLfloat scale = BALLRADIUS;
glPushMatrix();
GLfloat gcolor1[4] = { 0, 0, 0, 1 };
GLfloat gcolor2[4] = { 1, 1, 1, 1 };
int slices = 16;
- int divs = s->divisions;
- divs = 4;
+ int divs = 4;
/* 6 6
+-+
gcolor1[1] = mi->colors[color].green / 65536.0;
gcolor1[2] = mi->colors[color].blue / 65536.0;
+ glFrontFace(GL_CCW);
+
{
GLfloat scale = radius;
glPushMatrix();
gcolor1[1] = mi->colors[color].green / 65536.0;
gcolor1[2] = mi->colors[color].blue / 65536.0;
+ glFrontFace(GL_CCW);
+
glPushMatrix();
glTranslatef(x, y, 0);
glScalef (2, 2, 2);
gcolor2[1] = gcolor1[1] / 3;
gcolor2[2] = gcolor1[2] / 3;
+ glFrontFace(GL_CCW);
+
glPushMatrix();
glTranslatef(0, 0, 12); /* back of ring in hand */
gcolor1[1] = mi->colors[color].green / 65536.0;
gcolor1[2] = mi->colors[color].blue / 65536.0;
+ glFrontFace(GL_CCW);
+
{
GLfloat scale = radius;
glPushMatrix();
**************************************************************************/
-ENTRYPOINT void
-release_juggle (ModeInfo * mi)
-{
- if (juggles != NULL) {
- int screen;
-
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
- free_juggle(&juggles[screen]);
- free(juggles);
- juggles = (jugglestruct *) NULL;
- }
-}
-
/* FIXME: refill_juggle currently just appends new throws to the
* programme. This is fine if the programme is empty, but if there
* are still some trajectories left then it really should take these
name(sp);
- if (!part(sp))
+ if (!part(mi))
return;
lob(mi);
positions(sp);
if (!projectile(sp)) {
- free_juggle(sp);
+ free_juggle(mi);
return;
}
jugglestruct *sp = 0;
int wire = MI_IS_WIREFRAME(mi);
- if (!juggles) {
- juggles = (jugglestruct *)
- calloc (MI_NUM_SCREENS(mi), sizeof (jugglestruct));
- if (!juggles) {
- fprintf(stderr, "%s: out of memory\n", progname);
- exit(1);
- }
- }
+ MI_INIT (mi, juggles, free_juggle);
sp = &juggles[MI_SCREEN(mi)];
- sp->glx_context = init_GL(mi);
+ if (!sp->glx_context) /* re-initting breaks print_texture_label */
+ sp->glx_context = init_GL(mi);
- load_font (mi->dpy, "titleFont", &sp->mode_font, &sp->font_dlist);
+ sp->font_data = load_texture_font (mi->dpy, "titleFont");
reshape_juggle (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+ clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */
if (!wire)
{
double spin_accel = 0.05;
sp->rot = make_rotator (0, spin_speed, 0,
spin_accel, wander_speed, False);
- sp->trackball = gltrackball_init ();
+ sp->trackball = gltrackball_init (False);
}
if (only && *only && strcmp(only, " ")) {
/* create circular trajectory list */
ADD_ELEMENT(Trajectory, sp->head, sp->head);
if(sp->head == NULL){
- free_juggle(sp);
+ free_juggle(mi);
return;
}
/* create circular object list */
ADD_ELEMENT(Object, sp->objects, sp->objects);
if(sp->objects == NULL){
- free_juggle(sp);
+ free_juggle(mi);
return;
}
{
jugglestruct *sp = &juggles[MI_SCREEN(mi)];
- if (event->xany.type == ButtonPress &&
- event->xbutton.button == Button1)
- {
- sp->button_down_p = True;
- gltrackball_start (sp->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)
- {
- sp->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))
+ if (gltrackball_event_handler (event, sp->trackball,
+ MI_WIDTH (mi), MI_HEIGHT (mi),
+ &sp->button_down_p))
+ return True;
+ else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event))
{
- gltrackball_mousewheel (sp->trackball, event->xbutton.button, 10,
- !!event->xbutton.state);
+ change_juggle (mi);
return True;
}
- else if (event->xany.type == MotionNotify &&
- sp->button_down_p)
- {
- gltrackball_track (sp->trackball,
- event->xmotion.x, event->xmotion.y,
- MI_WIDTH (mi), MI_HEIGHT (mi));
- return True;
- }
- else if (event->xany.type == KeyPress)
- {
- KeySym keysym;
- char c = 0;
- XLookupString (&event->xkey, &c, 1, &keysym, 0);
- if (c == ' ' || c == '\n' || c == '\r' || c == '\t')
- {
- change_juggle (mi);
- return True;
- }
- }
-
return False;
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
+ glRotatef(current_device_rotation(), 0, 0, 1);
glTranslatef(0,-3,0);
}
}
- if(sp->mode_font != None) {
- print_gl_string (mi->dpy, sp->mode_font, sp->font_dlist,
- mi->xgwa.width, mi->xgwa.height,
- 10, mi->xgwa.height - 10,
- sp->pattern, False);
- }
+ glColor3f (1, 1, 0);
+ print_texture_label (mi->dpy, sp->font_data,
+ mi->xgwa.width, mi->xgwa.height,
+ 1, sp->pattern);
#ifdef MEMTEST
if((int)(sp->time/10) % 1000 == 0)
if (future < sp->time + 100 * THROW_CATCH_INTERVAL) {
refill_juggle(mi);
} else if (sp->time > 1<<30) { /* Hard Reset before the clock wraps */
- release_juggle(mi);
init_juggle(mi);
}