"*wireframe: False \n"
# define refresh_flipflop 0
+# define release_flipflop 0
# include "xlockmore.h"
#else
#ifdef USE_MODULES
ModStruct flipflop_description =
- {"flipflop", "init_flipflop", "draw_flipflop", "release_flipflop",
+ {"flipflop", "init_flipflop", "draw_flipflop", NULL,
"draw_flipflop", "init_flipflop", NULL, &flipflop_opts,
1000, 1, 2, 1, 4, 1.0, "",
"Flipflop", 0, NULL};
static int randsheet_draw( randsheet *rs );
static void setup_lights(void);
static int drawBoard(Flipflopcreen *);
-static int display(Flipflopcreen *c);
+static int display(ModeInfo *mi);
static int draw_sheet(float *tex);
glEnable(GL_LIGHT0);
}
+static void get_texture(ModeInfo *);
+
+
ENTRYPOINT Bool
flipflop_handle_event (ModeInfo *mi, XEvent *event)
{
Flipflopcreen *c = &qs[MI_SCREEN(mi)];
- if (event->xany.type == ButtonPress &&
- event->xbutton.button == Button1)
- {
- c->button_down_p = True;
- gltrackball_start (c->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)
- {
- c->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 (c->trackball, event->xbutton.button, 5,
- !event->xbutton.state);
- return True;
- }
- else if (event->xany.type == MotionNotify &&
- c->button_down_p)
+ if (gltrackball_event_handler (event, c->trackball,
+ MI_WIDTH (mi), MI_HEIGHT (mi),
+ &c->button_down_p))
+ return True;
+ else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event))
+ {
+ if (!textured || c->got_texture)
{
- gltrackball_track (c->trackball,
- event->xmotion.x, event->xmotion.y,
- MI_WIDTH (mi), MI_HEIGHT (mi));
- return True;
+ textured = 1;
+ c->got_texture = False;
+ get_texture (mi);
+ return True;
}
+ }
return False;
}
static int
-display(Flipflopcreen *c)
+display(ModeInfo *mi)
{
+ Flipflopcreen *c = &qs[MI_SCREEN(mi)];
GLfloat amb[] = { 0.8, 0.8, 0.8, 1.0 };
int polys = 0;
glClear(clearbits);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
-
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.2);
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.15/board_avg_size );
glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.15/board_avg_size );
glLightfv(GL_LIGHT0, GL_AMBIENT, amb);
+ glRotatef(current_device_rotation(), 0, 0, 1);
+
/** setup perspectif */
glTranslatef(0.0, 0.0, -c->reldist*board_avg_size);
glRotatef(22.5, 1.0, 0.0, 0.0);
if(textured)
glBindTexture(GL_TEXTURE_2D, c->texid);
+# 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
+
polys = drawBoard(c);
if (!c->button_down_p) {
image_loaded_cb, c);
}
+static void free_flipflop(ModeInfo *mi);
+
ENTRYPOINT void
init_flipflop(ModeInfo *mi)
{
screen = MI_SCREEN(mi);
wire = MI_IS_WIREFRAME(mi);
- if(!qs &&
- !(qs = (Flipflopcreen *) calloc(MI_NUM_SCREENS(mi), sizeof(Flipflopcreen))))
- return;
+ MI_INIT(mi, qs, free_flipflop);
c = &qs[screen];
c->window = MI_WINDOW(mi);
- c->trackball = gltrackball_init ();
+ c->trackball = gltrackball_init (False);
c->flipspeed = 0.03;
c->reldist = 1;
c->sheet = (randsheet*) malloc(sizeof(randsheet));
randsheet_create( c->sheet );
- glClearColor(0.0, 0.0, 0.0, 0.0);
-
clearbits = GL_COLOR_BUFFER_BIT;
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
glXMakeCurrent(disp, w, *(c->glx_context));
- mi->polygon_count = display(c);
+ mi->polygon_count = display(mi);
if(mi->fps_p){
do_fps(mi);
}
-ENTRYPOINT void
-release_flipflop(ModeInfo *mi)
+static void
+free_flipflop(ModeInfo *mi)
{
- if(qs) {
- int screen;
-
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
- {
- Flipflopcreen *c = &qs[MI_SCREEN(mi)];
- if (c->glx_context)
- c->glx_context = 0;
- if (c->sheet) {
- randsheet_free(c->sheet);
- free (c->sheet);
- c->sheet = 0;
- }
- }
- free(qs);
- qs = 0;
+ Flipflopcreen *c = &qs[MI_SCREEN(mi)];
+ if (c->sheet) {
+ randsheet_free(c->sheet);
+ free (c->sheet);
}
-
- FreeAllGL(mi);
}
/*** ADDED RANDSHEET FUNCTIONS ***/