X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fdock_navigator.cpp;h=62a18c3a98015d2fb611ec8bce4f769177f0401e;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=2e1947a8c905b06a4ba6075ba88252868bd3d8c6;hpb=c34eaa5441242b3e9a7b7645e9ee4983d14eae85;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/dock_navigator.cpp b/synfig-studio/trunk/src/gtkmm/dock_navigator.cpp index 2e1947a..62a18c3 100644 --- a/synfig-studio/trunk/src/gtkmm/dock_navigator.cpp +++ b/synfig-studio/trunk/src/gtkmm/dock_navigator.cpp @@ -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;