This commit is contained in:
Sam Parkinson 2016-08-02 08:27:30 +10:00
commit f06d510eba
No known key found for this signature in database
GPG Key ID: 34E268B2FA2F8B13

View File

@ -16,7 +16,7 @@
# Boston, MA 02111-1307, USA. # Boston, MA 02111-1307, USA.
""" """
The animator module provides a simple framwork to create animations. The animator module provides a simple framework to create animations.
Example: Example:
Animate the size of a window:: Animate the size of a window::
@ -65,7 +65,7 @@ EASE_IN_EXPO = 1
class Animator(GObject.GObject): class Animator(GObject.GObject):
''' '''
The animator class manages the the timing for calling the The animator class manages the timing for calling the
animations. The animations can be added using the `add` function animations. The animations can be added using the `add` function
and then started with the `start` function. If multiple animations and then started with the `start` function. If multiple animations
are added, then they will be played back at the same time and rate are added, then they will be played back at the same time and rate
@ -90,7 +90,7 @@ class Animator(GObject.GObject):
When creating an animation, take into account the limited cpu power When creating an animation, take into account the limited cpu power
on some devices, such as the XO. Setting the fps too high on can on some devices, such as the XO. Setting the fps too high on can
use signifigant cpu usage on the XO. use significant cpu usage on the XO.
''' '''
__gsignals__ = { __gsignals__ = {
@ -146,6 +146,9 @@ class Animator(GObject.GObject):
''' '''
Stop the animation and emit the `completed` signal Stop the animation and emit the `completed` signal
''' '''
for animation in self._animations:
animation.do_stop()
if self._timeout_sid and \ if self._timeout_sid and \
not hasattr(self._widget, 'add_tick_callback'): not hasattr(self._widget, 'add_tick_callback'):
GObject.source_remove(self._timeout_sid) GObject.source_remove(self._timeout_sid)
@ -203,7 +206,7 @@ class Animation(object):
def do_frame(self, t, duration, easing): def do_frame(self, t, duration, easing):
''' '''
This method is called by the animtor class every frame. This This method is called by the animator class every frame. This
method calculated the `frame` value to then call `next_frame`. method calculated the `frame` value to then call `next_frame`.
Args: Args:
@ -227,7 +230,7 @@ class Animation(object):
def next_frame(self, frame): def next_frame(self, frame):
''' '''
This method is called every frame and should be overriden by This method is called every frame and should be overridden by
subclasses. subclasses.
Args: Args:
@ -235,3 +238,43 @@ class Animation(object):
the current progress in the animation the current progress in the animation
''' '''
pass pass
def do_stop(self):
'''
This method is called whenever the animation is stopped, either
due to the animation ending or being stopped by the animation.
`next_frame` will not be called after do_stop, unless the animation
is restarted.
.. versionadded:: 0.109.0.3
This should be used in subclasses if they bind any signals. Eg.
if they bind the draw signal for a widget:
.. code-block:: python
class SignalAnimation(Animation):
def __init__(self, widget):
Animation.__init__(self, 0, 1)
self._draw_hid = None
self._widget = widget
def next_frame(self, frame):
self._frame = frame
if self._draw_hid is None:
self._draw_hid = self._widget.connect_after(
'draw', self.__draw_cb)
self._widget.queue_draw()
def __draw_cb(self, widget, cr):
cr.save()
# Do the draw
cr.restore()
def do_stop(self):
self._widget.disconnect(self._draw_hid)
self._widget.queue_draw()
'''
pass