From a4afd5d6682accf2e2d0f414fb2e16813786eff3 Mon Sep 17 00:00:00 2001 From: Diane Trout Date: Thu, 26 Apr 2007 04:18:23 +0000 Subject: [PATCH] simplify zoom code 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 | 73 ++++-------------------------- 1 file changed, 8 insertions(+), 65 deletions(-) diff --git a/qui/seqbrowser/SequenceBrowser.cpp b/qui/seqbrowser/SequenceBrowser.cpp index 71eb3d2..4e1fbcd 100644 --- a/qui/seqbrowser/SequenceBrowser.cpp +++ b/qui/seqbrowser/SequenceBrowser.cpp @@ -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() -- 2.30.2