X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fgltrackball.c;h=ee54cf91d2432f4a541774a742621d77286a54c4;hb=4ade52359b6eba3621566dac79793a33aa4c915f;hp=d02e316ae62e85a1b9f1cade3f3055bcca0b7013;hpb=c1b9b55ad8d59dc05ef55e316aebf5863e7dfa56;p=xscreensaver diff --git a/hacks/glx/gltrackball.c b/hacks/glx/gltrackball.c index d02e316a..ee54cf91 100644 --- a/hacks/glx/gltrackball.c +++ b/hacks/glx/gltrackball.c @@ -1,4 +1,4 @@ -/* gltrackball, Copyright (c) 2002-2008 Jamie Zawinski +/* gltrackball, Copyright (c) 2002-2012 Jamie Zawinski * GL-flavored wrapper for trackball.c * * Permission to use, copy, modify, distribute, and sell this software and its @@ -18,15 +18,19 @@ # include "config.h" #endif -#ifdef HAVE_COCOA -# include -#else +#ifndef HAVE_COCOA # include #endif +#ifdef HAVE_JWZGLES +# include "jwzgles.h" +#endif /* HAVE_JWZGLES */ + #include "trackball.h" #include "gltrackball.h" +extern double current_device_rotation (void); /* Bah, it's in fps.h */ + struct trackball_state { int x, y; GLfloat q[4]; @@ -53,6 +57,7 @@ gltrackball_reset (trackball_state *ts) trackball (ts->q, 0, 0, 0, 0); } + /* Begin tracking the mouse: Call this when the mouse button goes down. x and y are the mouse position relative to the window. w and h are the size of the window. @@ -111,8 +116,8 @@ gltrackball_mousewheel (trackball_state *ts, int button, int percent, int flip_p) { int up_p; - double move; int horizontal_p; + int mx, my, move, scale; #ifdef HAVE_COCOA flip_p = 0; /* MacOS has already handled this. */ @@ -132,15 +137,14 @@ gltrackball_mousewheel (trackball_state *ts, up_p = !up_p; } + scale = mx = my = 1000; move = (up_p - ? 1.0 - (percent / 100.0) - : 1.0 + (percent / 100.0)); - - gltrackball_start (ts, 50, 50, 100, 100); - if (horizontal_p) - gltrackball_track (ts, 50*move, 50, 100, 100); - else - gltrackball_track (ts, 50, 50*move, 100, 100); + ? floor (scale * (1.0 - (percent / 100.0))) + : ceil (scale * (1.0 + (percent / 100.0)))); + if (horizontal_p) mx = move; + else my = move; + gltrackball_start (ts, scale, scale, scale*2, scale*2); + gltrackball_track (ts, mx, my, scale*2, scale*2); } void