- float old_zoom = mwindow->edl->session->cwindow_zoom;
- float new_zoom = value;
- float x = canvas->w / 2.0;
- float y = canvas->h / 2.0;
- canvas->canvas_to_output(mwindow->edl,
- 0,
- x,
- y);
- x -= canvas->w_visible / 2 * old_zoom / new_zoom;
- y -= canvas->h_visible / 2 * old_zoom / new_zoom;
- if(update_menu)
- {
- if(do_auto)
- {
- zoom_panel->update(auto_zoom);
- }
- else
- {
- zoom_panel->update(value);
- }
+void CWindowGUI::zoom_canvas(double value, int update_menu)
+{
+ float x = 0, y = 0;
+ float zoom = !value ? get_auto_zoom() : value;
+ mwindow->edl->session->cwindow_scrollbars = !value ? 0 : 1;
+ if( value ) {
+ float cx = canvas->get_xscroll() + 0.5f*canvas->w_visible;
+ float cy = canvas->get_yscroll() + 0.5f*canvas->h_visible;
+ float output_x = cx, output_y = cy;
+ canvas->output_to_canvas(mwindow->edl, 0, cx, cy);
+ x = output_x - cx / zoom;
+ y = output_y - cy / zoom;