- 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);