| @@ -72,6 +72,7 @@ public: | |||||
| m_dirty[i] = 2; | m_dirty[i] = 2; | ||||
| } | } | ||||
| m_center = -0.75; | m_center = -0.75; | ||||
| m_zoom_speed = 0.0; | |||||
| m_radius = 5.0; | m_radius = 5.0; | ||||
| m_ready = false; | m_ready = false; | ||||
| @@ -154,24 +155,37 @@ public: | |||||
| ivec3 buttons = Input::GetMouseButtons(); | ivec3 buttons = Input::GetMouseButtons(); | ||||
| #ifdef __CELLOS_LV2__ | #ifdef __CELLOS_LV2__ | ||||
| if (true) | |||||
| m_zoom_speed = 0.0005; | |||||
| #else | #else | ||||
| if ((buttons[0] || buttons[2]) && mousepos.x != -1) | if ((buttons[0] || buttons[2]) && mousepos.x != -1) | ||||
| { | |||||
| double zoom = buttons[0] ? -0.0005 : 0.0005; | |||||
| m_zoom_speed += deltams * zoom; | |||||
| if (m_zoom_speed / zoom > 5) | |||||
| m_zoom_speed = 5 * zoom; | |||||
| } | |||||
| else if (m_zoom_speed) | |||||
| { | |||||
| m_zoom_speed *= pow(2.0, -deltams * 0.005); | |||||
| if (abs(m_zoom_speed) < 1e-5) | |||||
| m_zoom_speed = 0.0; | |||||
| } | |||||
| #endif | #endif | ||||
| if (m_zoom_speed) | |||||
| { | { | ||||
| f64cmplx oldcenter = m_center; | f64cmplx oldcenter = m_center; | ||||
| double oldradius = m_radius; | double oldradius = m_radius; | ||||
| #ifdef __CELLOS_LV2__ | |||||
| m_radius *= pow(2.0, -deltams * 0.00005); | |||||
| m_center = f64cmplx(-.22815528839841, -1.11514249704382); | |||||
| //m_center = f64cmplx(0.001643721971153, 0.822467633298876); | |||||
| #else | |||||
| double zoom = pow(2.0, (buttons[0] ? -deltams : deltams) * 0.0025); | |||||
| double zoom = pow(2.0, deltams * m_zoom_speed); | |||||
| if (m_radius * zoom > 8.0) | if (m_radius * zoom > 8.0) | ||||
| zoom = 8.0 / m_radius; | zoom = 8.0 / m_radius; | ||||
| else if (m_radius * zoom < 1e-14) | else if (m_radius * zoom < 1e-14) | ||||
| zoom = 1e-14 / m_radius; | zoom = 1e-14 / m_radius; | ||||
| m_radius *= zoom; | m_radius *= zoom; | ||||
| #ifdef __CELLOS_LV2__ | |||||
| m_center = f64cmplx(-.22815528839841, -1.11514249704382); | |||||
| //m_center = f64cmplx(0.001643721971153, 0.822467633298876); | |||||
| #else | |||||
| m_center = (m_center - worldmouse) * zoom + worldmouse; | m_center = (m_center - worldmouse) * zoom + worldmouse; | ||||
| worldmouse = m_center + ScreenToWorldOffset(mousepos); | worldmouse = m_center + ScreenToWorldOffset(mousepos); | ||||
| #endif | #endif | ||||
| @@ -573,7 +587,7 @@ private: | |||||
| bool m_ready; | bool m_ready; | ||||
| f64cmplx m_center; | f64cmplx m_center; | ||||
| double m_radius; | |||||
| double m_zoom_speed, m_radius; | |||||
| vec4 m_texel_settings; | vec4 m_texel_settings; | ||||
| mat4 m_zoom_settings; | mat4 m_zoom_settings; | ||||
| f64cmplx m_deltashift[4]; | f64cmplx m_deltashift[4]; | ||||