Don't offer 'Manual' as an interpolation type. It's not clear what it is supposed...
[synfig.git] / synfig-studio / trunk / src / gtkmm / workarea.cpp
index af6f2f3..57d079d 100644 (file)
@@ -828,18 +828,22 @@ WorkArea::~WorkArea()
                render_idle_func_id=0;
 }
 
+#ifdef SINGLE_THREADED
 bool
 WorkArea::get_updating()const
 {
        return App::single_threaded && async_renderer && async_renderer->updating;
 }
+#endif
 
+#ifdef SINGLE_THREADED
 void
 WorkArea::stop_updating(bool cancel)
 {
        async_renderer->stop();
        if (cancel) canceled_=true;
 }
+#endif
 
 void
 WorkArea::save_meta_data()
@@ -2216,12 +2220,14 @@ public:
 bool
 studio::WorkArea::async_update_preview()
 {
+#ifdef SINGLE_THREADED
        if (get_updating())
        {
                stop_updating();
                queue_render_preview();
                return false;
        }
+#endif
 
        async_renderer=0;
 
@@ -2573,20 +2579,18 @@ studio::WorkArea::zoom_out()
 void
 studio::WorkArea::zoom_fit()
 {
-       // This really doesn't zoom to fit. Bug.
-       zoom_norm();
+       float new_zoom(min(drawing_area->get_width() * zoom / w, drawing_area->get_height() * zoom / h));
+       if (zoom == new_zoom) return set_zoom(prev_zoom);
+       prev_zoom = zoom;
+       set_zoom(new_zoom);
 }
 
 void
 studio::WorkArea::zoom_norm()
 {
-       if(zoom==1.0)
-               set_zoom(prev_zoom);
-       else
-       {
-               prev_zoom=zoom;
-               set_zoom(1.0f);
-       }
+       if (zoom == 1.0) return set_zoom(prev_zoom);
+       prev_zoom = zoom;
+       set_zoom(1.0f);
 }
 
 gboolean