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