-/* pinion, Copyright (c) 2004-2012 Jamie Zawinski <jwz@jwz.org>
+/* pinion, Copyright (c) 2004-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 DEFAULTS "*delay: 15000 \n" \
"*showFPS: False \n" \
"*wireframe: False \n" \
- "*titleFont: -*-helvetica-medium-r-normal-*-180-*\n" \
- "*titleFont2: -*-helvetica-medium-r-normal-*-120-*\n" \
- "*titleFont3: -*-helvetica-medium-r-normal-*-80-*\n" \
+ "*titleFont: -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" \
+ "*titleFont2: -*-helvetica-medium-r-normal-*-*-120-*-*-*-*-*-*\n" \
+ "*titleFont3: -*-helvetica-medium-r-normal-*-*-80-*-*-*-*-*-*\n" \
# define refresh_pinion 0
# define release_pinion 0
#include "xlockmore.h"
#include "normals.h"
#include "gltrackball.h"
-#include "glxfonts.h"
+#include "texfont.h"
#include "involute.h"
#include <ctype.h>
Bool button_down_p;
unsigned long mouse_gear_id;
-# ifdef HAVE_GLBITMAP
- XFontStruct *xfont1, *xfont2, *xfont3;
- GLuint font1_dlist, font2_dlist, font3_dlist;
-# else
texture_font_data *font1, *font2, *font3;
-# endif
- GLuint title_list;
int draw_tick;
GLfloat plane_displacement; /* distance between coaxial gears */
load_fonts (ModeInfo *mi)
{
pinion_configuration *pp = &pps[MI_SCREEN(mi)];
-# ifdef HAVE_GLBITMAP
- load_font (mi->dpy, "titleFont", &pp->xfont1, &pp->font1_dlist);
- load_font (mi->dpy, "titleFont2", &pp->xfont2, &pp->font2_dlist);
- load_font (mi->dpy, "titleFont3", &pp->xfont3, &pp->font3_dlist);
-# else
pp->font1 = load_texture_font (mi->dpy, "titleFont");
pp->font2 = load_texture_font (mi->dpy, "titleFont2");
pp->font3 = load_texture_font (mi->dpy, "titleFont3");
-# endif
}
static void rpm_string (double rpm, char *s);
static void
-new_label (ModeInfo *mi)
+draw_label (ModeInfo *mi)
{
pinion_configuration *pp = &pps[MI_SCREEN(mi)];
char label[1024];
g->tooth_h * MI_HEIGHT(mi));
}
- glNewList (pp->title_list, GL_COMPILE);
if (*label)
{
-# ifdef HAVE_GLBITMAP
- XFontStruct *f;
- GLuint fl;
-# else
texture_font_data *fd;
-# endif
if (MI_WIDTH(mi) >= 500 && MI_HEIGHT(mi) >= 375)
-# ifdef HAVE_GLBITMAP
- f = pp->xfont1, fl = pp->font1_dlist; /* big font */
-# else
fd = pp->font1;
-# endif
else if (MI_WIDTH(mi) >= 350 && MI_HEIGHT(mi) >= 260)
-# ifdef HAVE_GLBITMAP
- f = pp->xfont2, fl = pp->font2_dlist; /* small font */
-# else
fd = pp->font2;
-# endif
else
-# ifdef HAVE_GLBITMAP
- f = pp->xfont3, fl = pp->font3_dlist; /* tiny font */
-# else
fd = pp->font3;
-# endif
glColor3f (0.8, 0.8, 0);
- print_gl_string (mi->dpy,
-# ifdef HAVE_GLBITMAP
- f, fl,
-# else
- fd,
-# endif
- mi->xgwa.width, mi->xgwa.height,
- 10, mi->xgwa.height - 10,
- label, False);
+ print_texture_label (mi->dpy, fd,
+ mi->xgwa.width, mi->xgwa.height,
+ 1, label);
}
- glEndList ();
}
\f
/* g->tooth_slope = (parent ? -parent->tooth_slope : 4); */
+ if (debug_one_gear_p)
+ g->tooth_slope = frand(20)-10;
+
+
/* Colorize
*/
g->color[0] = 0.5 + frand(0.5);
double pix = g->tooth_h * MI_HEIGHT(mi); /* approx. tooth size in pixels */
if (pix <= 2.5) g->size = INVOLUTE_SMALL;
else if (pix <= 3.5) g->size = INVOLUTE_MEDIUM;
- else g->size = INVOLUTE_LARGE;
+ else if (pix <= 25) g->size = INVOLUTE_LARGE;
+ else g->size = INVOLUTE_HUGE;
}
g->base_p = !parent;
#else /* HAVE_JWZGLES */
/* #### not yet implemented */
- pp->mouse_gear_id = pp->gears[1]->id;
+ pp->mouse_gear_id = (pp->ngears > 1 ? pp->gears[1]->id : 0);
return;
#endif /* HAVE_JWZGLES */
{
pinion_configuration *pp = &pps[MI_SCREEN(mi)];
- if (event->xany.type == ButtonPress &&
- event->xbutton.button == Button1)
- {
- pp->button_down_p = True;
- gltrackball_start (pp->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)
- {
- pp->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 (pp->trackball, event->xbutton.button, 5,
- !!event->xbutton.state);
- return True;
- }
- else if (event->xany.type == MotionNotify &&
- pp->button_down_p)
- {
- gltrackball_track (pp->trackball,
- event->xmotion.x, event->xmotion.y,
- MI_WIDTH (mi), MI_HEIGHT (mi));
- return True;
- }
+ if (gltrackball_event_handler (event, pp->trackball,
+ MI_WIDTH (mi), MI_HEIGHT (mi),
+ &pp->button_down_p))
+ return True;
else if (event->xany.type == KeyPress)
{
KeySym keysym;
{
pinion_configuration *pp;
- if (!pps) {
- pps = (pinion_configuration *)
- calloc (MI_NUM_SCREENS(mi), sizeof (pinion_configuration));
- if (!pps) {
- fprintf(stderr, "%s: out of memory\n", progname);
- exit(1);
- }
- }
+ MI_INIT (mi, pps, NULL);
pp = &pps[MI_SCREEN(mi)];
reshape_pinion (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */
- pp->title_list = glGenLists (1);
-
pp->ngears = 0;
pp->gears_size = 0;
pp->gears = 0;
pp->plane_displacement = gear_size * 0.1;
- pp->trackball = gltrackball_init ();
+ pp->trackball = gltrackball_init (False);
ffwd (mi);
}
{
pp->draw_tick = 0;
find_mouse_gear (mi);
- new_label (mi);
}
}
glPopMatrix ();
- glCallList (pp->title_list);
+ draw_label (mi);
glPopMatrix ();
if (mi->fps_p) do_fps (mi);