Hi, Carlos! I've tested the fix and it works for me! Thank you. ^__^
Also, I have tested the Windows build (my latest master branch) and have some not good news: 1. Resize bug happened for me 5 times in a row (for empty canvas!) O_O I suspect that was triggered by the high load of CPU during that moment, but in any case that was striking. I think I would better try to give a shot at stabilizing the multithreading render, rather than keep fixing the issue... 2. The slowdown for cairo is confirmed. I have creted the simple outline with 5 vertices and yes - it's slower than regular render. 3. Drag'n'drop isn't working on Winows at all. Not only the in-canvas drop, but also if I drop sif file onto toolbar - nothing works. Quick investigation shows that drag_n_drop callback isn't fired at all. I need to dig on this further. That's it. Sorry for sad new, but that's how it is. ^__^ K. 2013/8/8 Carlos López González <[email protected]>: > I've made some tests with different epsilon values and the bug still there. > But I've found the reason of the persistence of the bug. For the curious > I'll explain it below (I hadn't time yesterday to test the solution). > > This is the current code of the find_duck function: > > https://github.com/synfig/synfig/blob/master/synfig-studio/src/gui/duckmatic.cpp#L1041 > > The interesting part is the one where the current ducks are iterated to see > which is the one closest to the current mouse position: > > DuckMap::const_iterator iter; > > for(iter=duck_map.begin();iter!=duck_map.end();++iter) > { > const Duck::Handle& duck(iter->second); > > if(duck->get_ignore() || > (duck->get_type() && !(type & duck->get_type()))) > continue; > > Real dist((duck->get_trans_point()-point).mag_squared()); > > if(dist<=closest) > { > // if there are two ducks at the "same" position, keep track of > them > bool equal; > equal=fabs(dist-closest)<0.0000001?true:false; > if(equal) > { > // if we haven't any duck stored keep track of last > found > if(!ret_vector.size()) > ret_vector.push_back(ret); > // and also keep track of the one on the same place > ret_vector.push_back(duck); > } > // we have another closer duck then discard the stored > else if (!equal && ret_vector.size()) > ret_vector.clear(); > closest=dist; > ret=duck; > } > } > > > The code considers that two dusks (the closest and one we are comparing to) > are at the "same" place if their relative distance is small enough. > > bool equal; > equal=fabs(dist-closest)<0.0000001?true:false; > if(equal) ... > > > But that's biased, because that portion of code is only executed when dist > is less or equal than closest. But what if dist is slightly greater than > closest? It can be considered that they are at the "same" position but that > conclusion is never reached because there is a previous "<=" comparison that > avoid that situation. So the code inside the if(dist<=closest) is never > reached because dist>closest but in fact (dist-closest) ≈ 0 > > So the solution for that bug should be move the "equal" lines before the > comparison and use it in replacement of the '=' part: > > bool equal; > equal=fabs(dist-closest)<0.0000001?true:false; > if(dist<closest || equal) > { > // if there are two ducks at the "same" position, keep track of > them > if(equal) > { > // if we haven't any duck stored keep track of last > found > if(!ret_vector.size()) > ret_vector.push_back(ret); > // and also keep track of the one on the same place > ret_vector.push_back(duck); > } > // we have another closer duck then discard the stored > else if (!equal && ret_vector.size()) > ret_vector.clear(); > closest=dist; > ret=duck; > } > > That is :) > Cheers! > > > 2013/8/8 Konstantin Dmitriev <[email protected]> >> >> 2013/8/8 Carlos López González <[email protected]>: >> > I think it still has solution just increasing the "epsilon" value. I'll >> > take >> > a look as soon as possible. >> >> Thanks! But I'm afraid the "correct" epsilon value would depend on the >> zoom value of parent group. Maybe I'm wrong. >> K. >> >> >> ------------------------------------------------------------------------------ >> Get 100% visibility into Java/.NET code with AppDynamics Lite! >> It's a free troubleshooting tool designed for production. >> Get down to code-level detail for bottlenecks, with <2% overhead. >> Download for free and get started troubleshooting in minutes. >> >> http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk >> _______________________________________________ >> Synfig-devl mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/synfig-devl > > > > > -- > Carlos > http://synfig.org > > ------------------------------------------------------------------------------ > Get 100% visibility into Java/.NET code with AppDynamics Lite! > It's a free troubleshooting tool designed for production. > Get down to code-level detail for bottlenecks, with <2% overhead. > Download for free and get started troubleshooting in minutes. > http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk > _______________________________________________ > Synfig-devl mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/synfig-devl > -- http://morevnaproject.org/ ------------------------------------------------------------------------------ Get 100% visibility into Java/.NET code with AppDynamics Lite! It's a free troubleshooting tool designed for production. Get down to code-level detail for bottlenecks, with <2% overhead. Download for free and get started troubleshooting in minutes. http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk _______________________________________________ Synfig-devl mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/synfig-devl
