Author: Carlos López <[email protected]>
Date:   Tue Apr 17 18:48:34 2012 +0200

Fix bug ID: 3474332: Play/pause by shortcut causes canvas to stop updating.

---

 synfig-studio/src/gui/canvasview.cpp      |   29 +++++++++--------------------
 synfig-studio/src/gui/dials/framedial.cpp |   21 +++++++++++++++++++--
 synfig-studio/src/gui/dials/framedial.h   |   22 ++++++++++++----------
 3 files changed, 40 insertions(+), 32 deletions(-)

diff --git a/synfig-studio/src/gui/canvasview.cpp 
b/synfig-studio/src/gui/canvasview.cpp
index c13895f..4050c59 100644
--- a/synfig-studio/src/gui/canvasview.cpp
+++ b/synfig-studio/src/gui/canvasview.cpp
@@ -1025,7 +1025,8 @@ CanvasView::create_time_bar()
        );
        
framedial->signal_seek_prev_keyframe().connect(sigc::mem_fun(*canvas_interface().get(),
 &synfigapp::CanvasInterface::jump_to_prev_keyframe));
        
framedial->signal_seek_prev_frame().connect(sigc::bind(sigc::mem_fun(*canvas_interface().get(),
 &synfigapp::CanvasInterface::seek_frame), -1));
-       framedial->signal_play_pause().connect(sigc::mem_fun(*this, 
&studio::CanvasView::on_play_pause_pressed));
+       framedial->signal_play().connect(sigc::mem_fun(*this, 
&studio::CanvasView::on_play_pause_pressed));
+       framedial->signal_pause().connect(sigc::mem_fun(*this, 
&studio::CanvasView::on_play_pause_pressed));
        
framedial->signal_seek_next_frame().connect(sigc::bind(sigc::mem_fun(*canvas_interface().get(),
 &synfigapp::CanvasInterface::seek_frame), 1));
        
framedial->signal_seek_next_keyframe().connect(sigc::mem_fun(*canvas_interface().get(),
 &synfigapp::CanvasInterface::jump_to_next_keyframe));
        
framedial->signal_seek_end().connect(sigc::bind(sigc::mem_fun(*canvas_interface().get(),
 &synfigapp::CanvasInterface::seek_time), Time::end()));
@@ -1584,7 +1585,7 @@ CanvasView::init_menus()
        }
 
        action_group->add( Gtk::Action::create("play", Gtk::Stock::MEDIA_PLAY),
-               sigc::mem_fun(*this, &studio::CanvasView::play)
+               sigc::mem_fun(*this, &studio::CanvasView::on_play_pause_pressed)
        );
 
        action_group->add( Gtk::Action::create("dialog-flipbook", _("Preview 
Window")),
@@ -3264,7 +3265,6 @@ CanvasView::play()
                        return;
                }
        }
-       on_play_pause_pressed();
        is_playing_=false;
        time_adjustment().set_value(endtime);
        time_adjustment().value_changed();
@@ -4106,26 +4106,15 @@ CanvasView::on_delete_event(GdkEventAny* event 
__attribute__ ((unused)))
 void
 CanvasView::on_play_pause_pressed()
 {
-       Gtk::IconSize 
iconsize=Gtk::IconSize::from_name("synfig-small_icon_16x16");
-       Gtk::Image *icon;
-       Gtk::Button *pause_button;
-       pause_button=framedial->get_play_button();
-       bool play_flag;
        if(!is_playing())
        {
-               icon = manage(new 
Gtk::Image(Gtk::StockID("synfig-animate_pause"),iconsize));
-               pause_button->set_relief(Gtk::RELIEF_NORMAL);
-               play_flag=true;
+               framedial->toggle_play_pause_button(is_playing());
+               play();
+               framedial->toggle_play_pause_button(true); // this call is to 
restore the play button after play reaches end time.
        }
        else
        {
-               icon = manage(new 
Gtk::Image(Gtk::StockID("synfig-animate_play"),iconsize));
-               pause_button->set_relief(Gtk::RELIEF_NONE);
-               play_flag=false;
+               framedial->toggle_play_pause_button(is_playing());
+               stop();
        }
-       pause_button->remove();
-       pause_button->add(*icon);
-       icon->set_padding(0, 0);
-       icon->show();
-       if(play_flag) play(); else stop();
-}
+}
\ No newline at end of file
diff --git a/synfig-studio/src/gui/dials/framedial.cpp 
b/synfig-studio/src/gui/dials/framedial.cpp
index e6dde9d..236eecf 100644
--- a/synfig-studio/src/gui/dials/framedial.cpp
+++ b/synfig-studio/src/gui/dials/framedial.cpp
@@ -56,7 +56,8 @@ FrameDial::FrameDial(): Gtk::Table(7, 1, false)
        seek_begin =  create_icon(Gtk::ICON_SIZE_BUTTON, 
"synfig-animate_seek_begin",_("Seek to begin"));
        seek_prev_keyframe =  create_icon(Gtk::ICON_SIZE_BUTTON, 
"synfig-animate_seek_prev_keyframe",_("Seek to previous keyframe"));
        seek_prev_frame =  create_icon(Gtk::ICON_SIZE_BUTTON, 
"synfig-animate_seek_prev_frame",_("Seek to previous frame"));
-       play_pause =  create_icon(Gtk::ICON_SIZE_BUTTON, 
"synfig-animate_play",_("Play"));
+       play =  create_icon(Gtk::ICON_SIZE_BUTTON, 
"synfig-animate_play",_("Play"));
+       pause = create_icon(Gtk::ICON_SIZE_BUTTON, 
"synfig-animate_pause",_("Pause"));
        seek_next_frame =  create_icon(Gtk::ICON_SIZE_BUTTON, 
"synfig-animate_seek_next_frame",_("Seek to next frame"));
        seek_next_keyframe =  create_icon(Gtk::ICON_SIZE_BUTTON, 
"synfig-animate_seek_next_keyframe",_("Seek to next keyframe"));
        seek_end =  create_icon(Gtk::ICON_SIZE_BUTTON, 
"synfig-animate_seek_end",_("Seek to end"));
@@ -64,10 +65,12 @@ FrameDial::FrameDial(): Gtk::Table(7, 1, false)
        attach(*seek_begin, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
        attach(*seek_prev_keyframe, 1, 2, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
        attach(*seek_prev_frame, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
-       attach(*play_pause, 3, 4, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
+       attach(*play, 3, 4, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
+       attach(*pause, 3, 4, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
        attach(*seek_next_frame, 4, 5, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
        attach(*seek_next_keyframe, 5, 6, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
        attach(*seek_end, 6, 7, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
+       pause->hide();
 }
 
 Gtk::Button *
@@ -86,3 +89,17 @@ FrameDial::create_icon(Gtk::IconSize iconsize, const char * 
stockid, const char
        return button;
 }
 
+void
+FrameDial::toggle_play_pause_button(bool is_playing)
+{
+       if(!is_playing)
+       {
+               play->hide();
+               pause->show();
+       }
+       else
+       {
+               pause->hide();
+               play->show();
+       }
+}
diff --git a/synfig-studio/src/gui/dials/framedial.h 
b/synfig-studio/src/gui/dials/framedial.h
index 100c819..9adefd5 100644
--- a/synfig-studio/src/gui/dials/framedial.h
+++ b/synfig-studio/src/gui/dials/framedial.h
@@ -50,7 +50,8 @@ class FrameDial : public Gtk::Table
        Gtk::Button *seek_begin;
        Gtk::Button *seek_prev_keyframe;
        Gtk::Button *seek_prev_frame;
-       Gtk::Button *play_pause;
+       Gtk::Button *play;
+       Gtk::Button *pause;
        Gtk::Button *seek_next_frame;
        Gtk::Button *seek_next_keyframe;
        Gtk::Button *seek_end;
@@ -59,15 +60,16 @@ class FrameDial : public Gtk::Table
 
 public:
        FrameDial();
-       Glib::SignalProxy0<void> signal_seek_begin()            { return 
seek_begin->signal_clicked(); }
-       Glib::SignalProxy0<void> signal_seek_prev_keyframe()    { return 
seek_prev_keyframe->signal_clicked(); }
-       Glib::SignalProxy0<void> signal_seek_prev_frame()       { return 
seek_prev_frame->signal_clicked(); }
-       Glib::SignalProxy0<void> signal_play_pause()            { return 
play_pause->signal_clicked(); }
-       Glib::SignalProxy0<void> signal_seek_next_frame()       { return 
seek_next_frame->signal_clicked(); }
-       Glib::SignalProxy0<void> signal_seek_next_keyframe()    { return 
seek_next_keyframe->signal_clicked(); }
-       Glib::SignalProxy0<void> signal_seek_end()              { return 
seek_end->signal_clicked(); }
-
-       Gtk::Button *get_play_button() { return play_pause; }
+       Glib::SignalProxy0<void> signal_seek_begin()          { return 
seek_begin->signal_clicked(); }
+       Glib::SignalProxy0<void> signal_seek_prev_keyframe()  { return 
seek_prev_keyframe->signal_clicked(); }
+       Glib::SignalProxy0<void> signal_seek_prev_frame()     { return 
seek_prev_frame->signal_clicked(); }
+       Glib::SignalProxy0<void> signal_play()                { return 
play->signal_clicked(); }
+       Glib::SignalProxy0<void> signal_pause()               { return 
pause->signal_clicked();}
+       Glib::SignalProxy0<void> signal_seek_next_frame()     { return 
seek_next_frame->signal_clicked(); }
+       Glib::SignalProxy0<void> signal_seek_next_keyframe()  { return 
seek_next_keyframe->signal_clicked(); }
+       Glib::SignalProxy0<void> signal_seek_end()            { return 
seek_end->signal_clicked(); }
+
+       void toggle_play_pause_button(bool is_playing);
 
 }; // END of class FrameDial
 


------------------------------------------------------------------------------
Better than sec? Nothing is better than sec when it comes to
monitoring Big Data applications. Try Boundary one-second 
resolution app monitoring today. Free.
http://p.sf.net/sfu/Boundary-dev2dev
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to