Author: Yu Chen <jco...@gmail.com> Date: Sat Dec 10 20:00:30 2011 +0800
Use one function for previous/next rendered frame --- synfig-studio/src/gui/preview.cpp | 25 ++++++++++++------------- synfig-studio/src/gui/preview.h | 3 +-- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/synfig-studio/src/gui/preview.cpp b/synfig-studio/src/gui/preview.cpp index 33e054e..10bc916 100644 --- a/synfig-studio/src/gui/preview.cpp +++ b/synfig-studio/src/gui/preview.cpp @@ -366,7 +366,8 @@ playing(false) prev_framebutton->add(*icon0); prev_framebutton->set_relief(Gtk::RELIEF_NONE); prev_framebutton->show(); - prev_framebutton->signal_clicked().connect(sigc::mem_fun(*this,&Widget_Preview::prev_frame)); + prev_framebutton->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this,&Widget_Preview::seek_frame), -1)); + hbox->pack_start(*prev_framebutton, Gtk::PACK_SHRINK, 0); //play pause @@ -391,7 +392,8 @@ playing(false) next_framebutton->add(*icon2); next_framebutton->set_relief(Gtk::RELIEF_NONE); next_framebutton->show(); - next_framebutton->signal_clicked().connect(sigc::mem_fun(*this,&Widget_Preview::next_frame)); + next_framebutton->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this,&Widget_Preview::seek_frame),1)); + hbox->pack_start(*next_framebutton, Gtk::PACK_SHRINK, 0); //space between next frame button and loop button @@ -874,18 +876,15 @@ void studio::Widget_Preview::on_play_pause_pressed() if(play_flag) play(); else pause(); } -void studio::Widget_Preview::next_frame() -{ - if(playing) pause(); - float rate = preview->get_fps(); - adj_time_scrub.set_value((adj_time_scrub.get_value()*rate+1.000001)/rate); -} - -void studio::Widget_Preview::prev_frame() +void studio::Widget_Preview::seek_frame(int frames) { - if(playing) pause(); - float rate = preview->get_fps(); - adj_time_scrub.set_value((adj_time_scrub.get_value()*rate-0.99999)/rate); +// if(!frames) return; + float fps = preview->get_fps(); + float currenttime = adj_time_scrub.get_value(); + Time newtime(currenttime+(float)frames/fps); + newtime = newtime.round(fps); + + adj_time_scrub.set_value(newtime); } bool studio::Widget_Preview::scroll_move_event(GdkEvent *event) diff --git a/synfig-studio/src/gui/preview.h b/synfig-studio/src/gui/preview.h index a194c33..a8c7767 100644 --- a/synfig-studio/src/gui/preview.h +++ b/synfig-studio/src/gui/preview.h @@ -245,8 +245,7 @@ public: void on_play_pause_pressed(); - void prev_frame(); - void next_frame(); + void seek_frame(int frames); void stoprender(); ------------------------------------------------------------------------------ Try before you buy = See our experts in action! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-dev2 _______________________________________________ Synfig-devl mailing list Synfig-devl@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/synfig-devl