Remove .gitignore do nothing is ignored.
[synfig.git] / synfig-studio / trunk / src / gtkmm / dock_navigator.cpp
index 2e1947a..62a18c3 100644 (file)
@@ -2,10 +2,11 @@
 /*!    \file dock_navigator.cpp
 **     \brief Dock Nagivator File
 **
-**     $Id: dock_navigator.cpp,v 1.3 2005/01/12 00:31:11 darco Exp $
+**     $Id$
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007 Chris Moore
 **
 **     This package is free software; you can redistribute it and/or
 **     modify it under the terms of the GNU General Public License as
@@ -43,6 +44,8 @@
 
 #include "asyncrenderer.h"
 
+#include "general.h"
+
 #endif
 
 /* === U S I N G =========================================================== */
@@ -166,8 +169,8 @@ void studio::Widget_NavView::on_start_render()
 
                renderer = new AsyncRenderer(targ);
                renderer->signal_success().connect(sigc::mem_fun(*this,&Widget_NavView::on_finish_render));
-               renderer->start();
                dirty = false;
+               renderer->start();
        }
 }
 
@@ -179,7 +182,6 @@ void studio::Widget_NavView::on_finish_render()
        //synfig::warning("Nav: It hath succeeded!!!");
 
        //assert(renderer && renderer->has_success());
-       DEBUGPOINT();
        //synfig::warning("Nav: now we know it really succeeded");
        if(!*surface)
        {
@@ -219,7 +221,7 @@ void studio::Widget_NavView::on_finish_render()
                        dw,     // width
                        dh,     // height
                        dw*synfig::channels(pf), // stride (pitch)
-                       SigC::slot(freegu8)
+                       sigc::ptr_fun(freegu8)
                );
        }
        else
@@ -255,8 +257,15 @@ static double zoom_to_unit(double f)
        }else return -999999.0;
 }
 
-bool studio::Widget_NavView::on_expose_draw(GdkEventExpose *exp)
+bool studio::Widget_NavView::on_expose_draw(GdkEventExpose */*exp*/)
 {
+#ifdef SINGLE_THREADED
+       // don't redraw if the previous redraw is still running single-threaded
+       // or we end up destroying the renderer that's rendering it
+       if (App::single_threaded && renderer && renderer->updating)
+               return false;
+#endif
+
        //print out the zoom
        //HACK kind of...
        //zoom_print.set_text(strprintf("%.1f%%",100*unit_to_zoom(adj_zoom.get_value())));
@@ -462,7 +471,7 @@ bool studio::Widget_NavView::on_mouse_event(GdkEvent * e)
 
                float max = abs((br[0]-tl[0]) / drawto.get_width());
 
-               if((prev->get_width() / drawto.get_width()) < (prev->get_height() / drawto.get_height()))
+               if((float(prev->get_width()) / drawto.get_width()) < (float(prev->get_height()) / drawto.get_height()))
                        max = abs((br[1]-tl[1]) / drawto.get_height());
 
                float signx = (br[0]-tl[0]) < 0 ? -1 : 1;