+
+
+void mouse_orbit_update(float *theta, float *phi, float *dist)
+{
+ static int prev_mx, prev_my;
+ static unsigned int prev_bmask;
+
+ if(mouse_bmask) {
+ if((mouse_bmask ^ prev_bmask) == 0) {
+ int dx = mouse_x - prev_mx;
+ int dy = mouse_y - prev_my;
+
+ if(dx || dy) {
+ if(mouse_bmask & MOUSE_BN_LEFT) {
+ float p = *phi;
+ *theta += dx * 1.0;
+ p += dy * 1.0;
+
+ if(p < -90) p = -90;
+ if(p > 90) p = 90;
+ *phi = p;
+ }
+ if(mouse_bmask & MOUSE_BN_RIGHT) {
+ *dist += dy * 0.5;
+
+ if(*dist < 0) *dist = 0;
+ }
+ }
+ }
+ }
+
+ prev_mx = mouse_x;
+ prev_my = mouse_y;
+ prev_bmask = mouse_bmask;
+}