# define DEFAULTS "*delay: 20000\n" \
"*showFPS: False\n" \
"*wireframe: False\n" \
+ "*suppressRotationAnimation: True\n" \
-# define refresh_jigglypuff 0
+# define free_jigglypuff 0
# define release_jigglypuff 0
# include "xlockmore.h"
#else
# include "config.h"
#endif
-#include "xpm-ximage.h"
+#include "ximage-loader.h"
#include "gltrackball.h"
-#include "../images/jigglymap.xpm"
+#include "images/gen/jigglymap_png.h"
#ifdef USE_GL
v[2] *= s;
}
+/*
static inline coord dot(vector v1, vector v2)
{
return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
}
+*/
static inline void cross(vector v1, vector v2, vector v)
{
static void init_texture(ModeInfo *mi)
{
- XImage *img = xpm_to_ximage(mi->dpy, mi->xgwa.visual,
- mi->xgwa.colormap, jigglymap_xpm);
+ XImage *img = image_data_to_ximage(mi->dpy, mi->xgwa.visual,
+ jigglymap_png, sizeof(jigglymap_png));
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
img->width, img->height, 0, GL_RGBA,
{
jigglystruct *js = &jss[MI_SCREEN(mi)];
- if(event->xany.type == ButtonPress &&
- event->xbutton.button == Button1) {
- js->button_down = 1;
- gltrackball_start(js->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) {
- js->button_down = 0;
- 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 (js->trackball, event->xbutton.button, 10,
- !!event->xbutton.state);
- return True;
- }
- else if(event->xany.type == MotionNotify && js->button_down) {
- gltrackball_track(js->trackball, event->xmotion.x, event->xmotion.y,
- MI_WIDTH(mi), MI_HEIGHT(mi));
- return True;
- }
+ if (gltrackball_event_handler (event, js->trackball,
+ MI_WIDTH (mi), MI_HEIGHT (mi),
+ &js->button_down))
+ return True;
+
return False;
}
ENTRYPOINT void reshape_jigglypuff(ModeInfo *mi, int width, int height)
{
- GLfloat aspect = (GLfloat)width / (GLfloat)height;
-
- glViewport(0, 0, width, height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-0.5*aspect, 0.5*aspect, -0.5, 0.5, 1, 20);
-/* glTranslatef(0, 0, -10);*/
+ double h = (GLfloat) height / (GLfloat) width;
+ int y = 0;
+
+ if (width > height * 5) { /* tiny window: show middle */
+ height = width * 9/16;
+ y = -height/2;
+ h = height / (GLfloat) width;
+ }
+
+ glViewport(0, y, width, height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-0.5*(1/h), 0.5*(1/h), -0.5, 0.5, 1, 20);
}
ENTRYPOINT void draw_jigglypuff(ModeInfo *mi)
glLoadIdentity();
glTranslatef(0,0,-10);
+
+# ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */
+ {
+ GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi);
+ int o = (int) current_device_rotation();
+ if (o != 0 && o != 180 && o != -180)
+ glScalef (1/h, 1/h, 1/h);
+ }
+# endif
+
glRotatef(js->angle, sin(js->axis), cos(js->axis), -sin(js->axis));
glTranslatef(0, 0, 5);
if(!(js->button_down)) {
}
}
- /* Do it twice because we don't track the device's orientation. */
- glRotatef( current_device_rotation(), 0, 0, 1);
gltrackball_rotate(js->trackball);
- glRotatef(-current_device_rotation(), 0, 0, 1);
if(js->color_style == COLOR_STYLE_CYCLE) {
int i;
jigglystruct *js;
int subdivs;
- if(!jss) {
- jss = (jigglystruct*)
- calloc(MI_NUM_SCREENS(mi), sizeof(jigglystruct));
- if(!jss) {
- fprintf(stderr, "%s: No..memory...must...abort..\n", progname);
- exit(1);
- }
- }
+ MI_INIT(mi, jss);
js = &jss[MI_SCREEN(mi)];
else {
MI_CLEARWINDOW(mi);
}
- js->trackball = gltrackball_init();
+ js->trackball = gltrackball_init(True);
/* _DEBUG("distance : %f\nhold : %f\nspherify : %f\ndamping : %f\ndfact : %f\n",
js->stable_distance, js->hold_strength, js->spherify_strength,
js->damping_velocity, js->damping_factor);