simplify zoom code
authorDiane Trout <diane@caltech.edu>
Thu, 26 Apr 2007 04:18:23 +0000 (04:18 +0000)
committerDiane Trout <diane@caltech.edu>
Thu, 26 Apr 2007 04:18:23 +0000 (04:18 +0000)
while describing my first stab at trying to simplify Brandons code to brandon
I mentioned the magic word "log" scaling. Which after some digging in
the depths of my memory produced a useful function for more simply scaling
the scroll wheel.

qui/seqbrowser/SequenceBrowser.cpp

index 71eb3d25e5c8324104f25ca98428ccbd0eb98af6..4e1fbcd74421572b0b587bbe5fd1fc508b33f141 100644 (file)
@@ -286,72 +286,15 @@ void SequenceBrowser::wheelEvent(QWheelEvent *e)
   e->accept();
   double cur_zoom = GlSeqBrowser::zoom();
   
-  // Normalize so one 15 degree turn of the mouse wheel
+  // Normalize so one turn of the mouse wheel
   // is equal to 1 step.
-  int num_degrees = e->delta() / 8;
-  int num_steps = num_degrees / 15;
-  
-  // Positive
-  if (num_steps >= 0)
-  {
-    // Invert number of steps because code was written
-    // thinking that adding a positve num_steps was zooming
-    // in, but because it's bp/pixel, it's actually zooming out.
-    // To get mouse wheel to zoom in, when pushing the wheel
-    // forward, I can use the existing code, by making num_steps
-    // negative here.
-    num_steps = num_steps * (-1);
-    
-    if (cur_zoom + num_steps >= 1.0)
-    {
-      emit mouseWheelZoom(cur_zoom + num_steps);
-    }
-    else if (cur_zoom > 1.0 && cur_zoom + num_steps < 1.0)
-    {
-      emit mouseWheelZoom(1.0);
-    }
-    else if (cur_zoom <= 0.1)
-    {
-      emit mouseWheelZoom(cur_zoom + ((double)num_steps*0.01));
-    }
-    else if (cur_zoom <= 1.0 && cur_zoom + ((double)num_steps*0.1) >= 0.1)
-    {
-      emit mouseWheelZoom(cur_zoom + ((double)num_steps*0.1));
-    }
-    else if (cur_zoom <= 1.0 && cur_zoom + ((double)num_steps*0.1) < 0.1)
-    {
-      emit mouseWheelZoom(0.1);
-    }
-    
-  }
-  // Negative
-  else
-  {
-    
-    // Invert number of steps because code was written
-    // thinking that adding a positve num_steps was zooming
-    // in, but because it's bp/pixel, it's actually zooming out.
-    // To get mouse wheel to zoom out, when pulling the wheel
-    // backwards, I can use the existing code, by making num_steps
-    // positive here.
-    num_steps = num_steps * (-1);
-    
-    if (cur_zoom >= 1.0)
-    {
-      emit mouseWheelZoom(cur_zoom+num_steps);
-    }
-    else if (cur_zoom < 1.0 && cur_zoom >= 0.1)
-    {
-      emit mouseWheelZoom(cur_zoom + ((double)num_steps*0.1));
-    }
-    else if (cur_zoom < 0.1)
-    {
-      emit mouseWheelZoom(cur_zoom + ((double)num_steps*0.01));
-    }
-    
-  }
-  
-  //cout << "Mouse wheel delta: " << num_degrees << "; " << num_steps << "\n";
+  const int normalize_tick = 120;
+  // arbitrary scaling factor that seems to "work"
+  const int scaling = 50;
+  int num_steps = e->delta() / normalize_tick;
+
+  cur_zoom = pow(10, log10(cur_zoom) - ((double)num_steps/scaling));
+  emit mouseWheelZoom(cur_zoom);
 }
 
 void SequenceBrowser::clearSelection()