This got lost, almost surely accidentally, in 706c8e8ad6 (Merge branch
'disable-native-animation', 2020-04-07), so just restore it now.
See https://github.com/wxWidgets/wxWidgets/pull/1768
Closes #18725.
		
	
		
			
				
	
	
		
			463 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			463 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        animate.h
 | 
						|
// Purpose:     interface of wxAnimation* classes
 | 
						|
// Author:      wxWidgets team
 | 
						|
// Licence:     wxWindows licence
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
/**
 | 
						|
    Supported animation types.
 | 
						|
*/
 | 
						|
enum wxAnimationType
 | 
						|
{
 | 
						|
    wxANIMATION_TYPE_INVALID,
 | 
						|
 | 
						|
    /** represents an animated GIF file. */
 | 
						|
    wxANIMATION_TYPE_GIF,
 | 
						|
 | 
						|
    /** represents an ANI file. */
 | 
						|
    wxANIMATION_TYPE_ANI,
 | 
						|
 | 
						|
    /** autodetect the filetype. */
 | 
						|
    wxANIMATION_TYPE_ANY
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
#define wxAC_NO_AUTORESIZE       (0x0010)
 | 
						|
#define wxAC_DEFAULT_STYLE       (wxBORDER_NONE)
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    @class wxAnimationCtrl
 | 
						|
 | 
						|
    This is a static control which displays an animation.
 | 
						|
    wxAnimationCtrl API is as simple as possible and won't give you full control
 | 
						|
    on the animation; if you need it then use wxMediaCtrl.
 | 
						|
 | 
						|
    This control is useful to display a (small) animation while doing a long task
 | 
						|
    (e.g. a "throbber").
 | 
						|
 | 
						|
    It is only available if @c wxUSE_ANIMATIONCTRL is set to 1 (the default).
 | 
						|
 | 
						|
    For the platforms where this control has a native implementation, it may
 | 
						|
    have only limited support for the animation types, see @c
 | 
						|
    wxGenericAnimationCtrl if you need to support all of them.
 | 
						|
 | 
						|
    @beginStyleTable
 | 
						|
    @style{wxAC_DEFAULT_STYLE}
 | 
						|
           The default style: wxBORDER_NONE.
 | 
						|
    @style{wxAC_NO_AUTORESIZE}
 | 
						|
           By default, the control will adjust its size to exactly fit to the
 | 
						|
           size of the animation when SetAnimation is called. If this style
 | 
						|
           flag is given, the control will not change its size
 | 
						|
    @endStyleTable
 | 
						|
 | 
						|
    @library{wxcore}
 | 
						|
    @category{ctrl}
 | 
						|
 | 
						|
    @nativeimpl{wxgtk,wxmsw}
 | 
						|
 | 
						|
    @appearance{animationctrl}
 | 
						|
 | 
						|
    @see wxAnimation, @sample{animate}
 | 
						|
*/
 | 
						|
class wxAnimationCtrl : public wxControl
 | 
						|
{
 | 
						|
public:
 | 
						|
    /**
 | 
						|
        Initializes the object and calls Create() with
 | 
						|
        all the parameters.
 | 
						|
    */
 | 
						|
    wxAnimationCtrl(wxWindow* parent, wxWindowID id,
 | 
						|
                    const wxAnimation& anim = wxNullAnimation,
 | 
						|
                    const wxPoint& pos = wxDefaultPosition,
 | 
						|
                    const wxSize& size = wxDefaultSize,
 | 
						|
                    long style = wxAC_DEFAULT_STYLE,
 | 
						|
                    const wxString& name = wxAnimationCtrlNameStr);
 | 
						|
 | 
						|
    /**
 | 
						|
        Creates the control with the given @a anim animation.
 | 
						|
 | 
						|
        After control creation you must explicitly call Play() to start to play
 | 
						|
        the animation. Until that function won't be called, the first frame
 | 
						|
        of the animation is displayed.
 | 
						|
 | 
						|
        @param parent
 | 
						|
            Parent window, must be non-@NULL.
 | 
						|
        @param id
 | 
						|
            The identifier for the control.
 | 
						|
        @param anim
 | 
						|
            The initial animation shown in the control.
 | 
						|
        @param pos
 | 
						|
            Initial position.
 | 
						|
        @param size
 | 
						|
            Initial size.
 | 
						|
        @param style
 | 
						|
            The window style, see wxAC_* flags.
 | 
						|
        @param name
 | 
						|
            Control name.
 | 
						|
 | 
						|
        @return @true if the control was successfully created or @false if
 | 
						|
                creation failed.
 | 
						|
    */
 | 
						|
    bool Create(wxWindow* parent, wxWindowID id,
 | 
						|
                const wxAnimation& anim = wxNullAnimation,
 | 
						|
                const wxPoint& pos = wxDefaultPosition,
 | 
						|
                const wxSize& size = wxDefaultSize,
 | 
						|
                long style = wxAC_DEFAULT_STYLE,
 | 
						|
                const wxString& name = wxAnimationCtrlNameStr);
 | 
						|
 | 
						|
    /**
 | 
						|
        Create a new animation object compatible with this control.
 | 
						|
 | 
						|
        A wxAnimation object created using this function is always compatible
 | 
						|
        with controls of this type, see wxAnimation::IsCompatibleWith().
 | 
						|
 | 
						|
        @see CreateCompatibleAnimation()
 | 
						|
 | 
						|
        @since 3.1.4
 | 
						|
     */
 | 
						|
    wxAnimation CreateAnimation() const;
 | 
						|
 | 
						|
    /**
 | 
						|
        Create a new animation object compatible with this control.
 | 
						|
 | 
						|
        This method does the same thing as CreateAnimation() but is static,
 | 
						|
        i.e. can be called without creating any wxAnimationCtrl objects.
 | 
						|
 | 
						|
        @since 3.1.4
 | 
						|
     */
 | 
						|
    static wxAnimation CreateCompatibleAnimation();
 | 
						|
 | 
						|
    /**
 | 
						|
        Returns the animation associated with this control.
 | 
						|
    */
 | 
						|
    virtual wxAnimation GetAnimation() const;
 | 
						|
 | 
						|
    /**
 | 
						|
        Returns the inactive bitmap shown in this control when the;
 | 
						|
        see SetInactiveBitmap() for more info.
 | 
						|
    */
 | 
						|
    wxBitmap GetInactiveBitmap() const;
 | 
						|
 | 
						|
    /**
 | 
						|
        Returns @true if the animation is being played.
 | 
						|
    */
 | 
						|
    virtual bool IsPlaying() const;
 | 
						|
 | 
						|
    /**
 | 
						|
        Loads the animation from the given file and calls SetAnimation().
 | 
						|
        See wxAnimation::LoadFile for more info.
 | 
						|
    */
 | 
						|
    virtual bool LoadFile(const wxString& file,
 | 
						|
                          wxAnimationType animType = wxANIMATION_TYPE_ANY);
 | 
						|
 | 
						|
    /**
 | 
						|
        Loads the animation from the given stream and calls SetAnimation().
 | 
						|
        See wxAnimation::Load() for more info.
 | 
						|
    */
 | 
						|
    virtual bool Load(wxInputStream& file,
 | 
						|
                      wxAnimationType animType = wxANIMATION_TYPE_ANY);
 | 
						|
 | 
						|
    /**
 | 
						|
        Starts playing the animation.
 | 
						|
 | 
						|
        The animation is always played in loop mode (unless the last frame of the
 | 
						|
        animation has an infinite delay time) and always start from the first frame
 | 
						|
        even if you @ref Stop "stopped" it while some other frame was displayed.
 | 
						|
    */
 | 
						|
    virtual bool Play();
 | 
						|
 | 
						|
    /**
 | 
						|
        Sets the animation to play in this control.
 | 
						|
 | 
						|
        If the previous animation is being played, it's @ref Stop() stopped.
 | 
						|
        Until Play() isn't called, a static image, the first frame of the given
 | 
						|
        animation or the background colour will be shown
 | 
						|
        (see SetInactiveBitmap() for more info).
 | 
						|
    */
 | 
						|
    virtual void SetAnimation(const wxAnimation& anim);
 | 
						|
 | 
						|
    /**
 | 
						|
        Sets the bitmap to show on the control when it's not playing an animation.
 | 
						|
 | 
						|
        If you set as inactive bitmap ::wxNullBitmap (which is the default), then the
 | 
						|
        first frame of the animation is instead shown when the control is inactive;
 | 
						|
        in this case, if there's no valid animation associated with the control
 | 
						|
        (see SetAnimation()), then the background colour of the window is shown.
 | 
						|
 | 
						|
        If the control is not playing the animation, the given bitmap will be
 | 
						|
        immediately shown, otherwise it will be shown as soon as Stop() is called.
 | 
						|
 | 
						|
        Note that the inactive bitmap, if smaller than the control's size, will be
 | 
						|
        centered in the control; if bigger, it will be stretched to fit it.
 | 
						|
    */
 | 
						|
    virtual void SetInactiveBitmap(const wxBitmap& bmp);
 | 
						|
 | 
						|
    /**
 | 
						|
        Stops playing the animation.
 | 
						|
        The control will show the first frame of the animation, a custom static image or
 | 
						|
        the window's background colour as specified by the last SetInactiveBitmap() call.
 | 
						|
    */
 | 
						|
    virtual void Stop();
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    @class wxGenericAnimationCtrl
 | 
						|
 | 
						|
    Generic implementation of wxAnimationCtrl interface.
 | 
						|
 | 
						|
    If the platform supports a native animation control (currently just wxGTK)
 | 
						|
    then this class implements the same interface internally in wxWidgets.
 | 
						|
    One advantage of using this class instead of the native version is that
 | 
						|
    this version of the control is capable of using animations in other formats
 | 
						|
    than the ones supported by the @c gdk-pixbuf library used by wxGTK, which
 | 
						|
    typically only supports @c wxANIMATION_TYPE_GIF.
 | 
						|
 | 
						|
    Note that to use this class you need to explicitly include the generic
 | 
						|
    header after including the main one before using it, i.e.
 | 
						|
    @code
 | 
						|
    #include <wx/animate.h>
 | 
						|
    #include <wx/generic/animate.h>
 | 
						|
    @endcode
 | 
						|
 | 
						|
    @library{wxcore}
 | 
						|
    @category{gdi}
 | 
						|
*/
 | 
						|
 | 
						|
class wxGenericAnimationCtrl : public wxAnimationCtrl
 | 
						|
{
 | 
						|
public:
 | 
						|
    /**
 | 
						|
        Initializes the object and calls Create() with
 | 
						|
        all the parameters.
 | 
						|
    */
 | 
						|
    wxGenericAnimationCtrl(wxWindow* parent, wxWindowID id,
 | 
						|
                    const wxAnimation& anim = wxNullAnimation,
 | 
						|
                    const wxPoint& pos = wxDefaultPosition,
 | 
						|
                    const wxSize& size = wxDefaultSize,
 | 
						|
                    long style = wxAC_DEFAULT_STYLE,
 | 
						|
                    const wxString& name = wxAnimationCtrlNameStr);
 | 
						|
 | 
						|
    /**
 | 
						|
        Creates the control with the given @a anim animation.
 | 
						|
 | 
						|
        After control creation you must explicitly call Play() to start to play
 | 
						|
        the animation. Until that function won't be called, the first frame
 | 
						|
        of the animation is displayed.
 | 
						|
 | 
						|
        @param parent
 | 
						|
            Parent window, must be non-@NULL.
 | 
						|
        @param id
 | 
						|
            The identifier for the control.
 | 
						|
        @param anim
 | 
						|
            The initial animation shown in the control.
 | 
						|
        @param pos
 | 
						|
            Initial position.
 | 
						|
        @param size
 | 
						|
            Initial size.
 | 
						|
        @param style
 | 
						|
            The window style, see wxAC_* flags.
 | 
						|
        @param name
 | 
						|
            Control name.
 | 
						|
 | 
						|
        @return @true if the control was successfully created or @false if
 | 
						|
                creation failed.
 | 
						|
    */
 | 
						|
    bool Create(wxWindow* parent, wxWindowID id,
 | 
						|
                const wxAnimation& anim = wxNullAnimation,
 | 
						|
                const wxPoint& pos = wxDefaultPosition,
 | 
						|
                const wxSize& size = wxDefaultSize,
 | 
						|
                long style = wxAC_DEFAULT_STYLE,
 | 
						|
                const wxString& name = wxAnimationCtrlNameStr);
 | 
						|
 | 
						|
    /**
 | 
						|
       Draw the current frame of the animation into given DC.
 | 
						|
       This is fast as current frame is always cached.
 | 
						|
    */
 | 
						|
    void DrawCurrentFrame(wxDC& dc);
 | 
						|
 | 
						|
    /**
 | 
						|
       Returns a wxBitmap with the current frame drawn in it.
 | 
						|
    */
 | 
						|
    wxBitmap& GetBackingStore();
 | 
						|
 | 
						|
    /**
 | 
						|
       This overload of Play() lets you specify if the animation must loop or not
 | 
						|
    */
 | 
						|
    bool Play(bool looped);
 | 
						|
 | 
						|
    /**
 | 
						|
       Specify whether the animation's background colour is to be shown (the default),
 | 
						|
       or whether the window background should show through
 | 
						|
    */
 | 
						|
    void SetUseWindowBackgroundColour(bool useWinBackground = true);
 | 
						|
 | 
						|
    /**
 | 
						|
       Returns @c true if the window's background colour is being used.
 | 
						|
    */
 | 
						|
    bool IsUsingWindowBackgroundColour() const;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
   @class wxAnimation
 | 
						|
 | 
						|
   The @c wxAnimation class handles the interface between the animation
 | 
						|
   control and the details of the animation image or data.
 | 
						|
 | 
						|
    @stdobjects
 | 
						|
    ::wxNullAnimation
 | 
						|
 | 
						|
    @see wxAnimationCtrl, @sample{animate}
 | 
						|
*/
 | 
						|
class wxAnimation : public wxObject
 | 
						|
{
 | 
						|
public:
 | 
						|
    /**
 | 
						|
       Constructs a new empty animation object.
 | 
						|
 | 
						|
       Call Load() to initialize it.
 | 
						|
 | 
						|
       @see wxAnimationCtrl::CreateAnimation()
 | 
						|
     */
 | 
						|
    wxAnimation();
 | 
						|
 | 
						|
    /**
 | 
						|
       Constructs a new animation object and load the animation data from the
 | 
						|
       given filename.
 | 
						|
 | 
						|
        @param name
 | 
						|
            A filename.
 | 
						|
        @param type
 | 
						|
            One of the ::wxAnimationType values; wxANIMATION_TYPE_ANY
 | 
						|
            means that the function should try to autodetect the filetype.
 | 
						|
 | 
						|
        @see wxAnimationCtrl::CreateAnimation()
 | 
						|
     */
 | 
						|
    wxAnimation(const wxString &name, wxAnimationType type = wxANIMATION_TYPE_ANY);
 | 
						|
 | 
						|
    /**
 | 
						|
       Copy constructor.
 | 
						|
    */
 | 
						|
    wxAnimation(const wxAnimation& other);
 | 
						|
 | 
						|
    /**
 | 
						|
        Returns @true if animation data is present.
 | 
						|
    */
 | 
						|
    bool IsOk() const;
 | 
						|
 | 
						|
    /**
 | 
						|
        Returns @true if animation can be used with controls of the given type.
 | 
						|
 | 
						|
        This function checks if this animation object can be used with
 | 
						|
        wxAnimationCtrl of particular type. This will be always the case for
 | 
						|
        the platforms where only a single wxAnimationCtrl implementation is
 | 
						|
        available, but not necessarily under e.g. wxGTK where both native (but
 | 
						|
        limited) GTK implementation and generic implementation can be used.
 | 
						|
 | 
						|
        @since 3.1.4
 | 
						|
     */
 | 
						|
    bool IsCompatibleWith(wxClassInfo* ci) const;
 | 
						|
 | 
						|
    /**
 | 
						|
        Returns the delay for the i-th frame in milliseconds.
 | 
						|
        If @c -1 is returned the frame is to be displayed forever.
 | 
						|
    */
 | 
						|
    int GetDelay(unsigned int frame) const;
 | 
						|
 | 
						|
    /**
 | 
						|
        Returns the number of frames for this animation.
 | 
						|
 | 
						|
        This method is not implemented in the native wxGTK implementation of
 | 
						|
        this class and always returns 0 there.
 | 
						|
    */
 | 
						|
    unsigned int GetFrameCount() const;
 | 
						|
 | 
						|
    /**
 | 
						|
        Returns the i-th frame as a wxImage.
 | 
						|
 | 
						|
        This method is not implemented in the native wxGTK implementation of
 | 
						|
        this class and always returns an invalid image there.
 | 
						|
    */
 | 
						|
    wxImage GetFrame(unsigned int frame) const;
 | 
						|
 | 
						|
    /**
 | 
						|
       Returns the size of the animation.
 | 
						|
    */
 | 
						|
    wxSize GetSize() const;
 | 
						|
 | 
						|
    /**
 | 
						|
        Loads an animation from a file.
 | 
						|
 | 
						|
        @param name
 | 
						|
            A filename.
 | 
						|
        @param type
 | 
						|
            One of the ::wxAnimationType values; wxANIMATION_TYPE_ANY
 | 
						|
            means that the function should try to autodetect the filetype.
 | 
						|
 | 
						|
        @return @true if the operation succeeded, @false otherwise.
 | 
						|
    */
 | 
						|
    bool LoadFile(const wxString& name, wxAnimationType type = wxANIMATION_TYPE_ANY);
 | 
						|
 | 
						|
    /**
 | 
						|
        Loads an animation from the given stream.
 | 
						|
 | 
						|
        @param stream
 | 
						|
            The stream to use to load the animation.
 | 
						|
            Under wxGTK may be any kind of stream; under other platforms
 | 
						|
            this must be a seekable stream.
 | 
						|
        @param type
 | 
						|
            One of the ::wxAnimationType enumeration values.
 | 
						|
 | 
						|
        @return @true if the operation succeeded, @false otherwise.
 | 
						|
    */
 | 
						|
    bool Load(wxInputStream& stream, wxAnimationType type = wxANIMATION_TYPE_ANY);
 | 
						|
 | 
						|
 | 
						|
    /**
 | 
						|
       Returns the list of animation decoders used by the generic animation
 | 
						|
       and @c wxGenericAnimationCtrl.
 | 
						|
     */
 | 
						|
    static inline wxAnimationDecoderList& GetHandlers();
 | 
						|
 | 
						|
    /**
 | 
						|
       Add a new decoder to the list of animation decoders.
 | 
						|
     */
 | 
						|
    static void AddHandler(wxAnimationDecoder *handler);
 | 
						|
 | 
						|
    /**
 | 
						|
       Insert a new decoder to the front of the list of animation decoders.
 | 
						|
     */
 | 
						|
    static void InsertHandler(wxAnimationDecoder *handler);
 | 
						|
 | 
						|
    /**
 | 
						|
       Search for an animation decoder by type.
 | 
						|
     */
 | 
						|
    static const wxAnimationDecoder *FindHandler( wxAnimationType animType );
 | 
						|
 | 
						|
    /**
 | 
						|
       Load the stock animation decoders (currently GIF and ANI) into the list
 | 
						|
       of decoders. This is called automatically at program startup.
 | 
						|
    */
 | 
						|
    static void InitStandardHandlers();
 | 
						|
 | 
						|
    /**
 | 
						|
       Clear out the animation decoder list. This is called automatically at
 | 
						|
       program shutdown.
 | 
						|
     */
 | 
						|
    static void CleanUpHandlers();
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
 | 
						|
// ============================================================================
 | 
						|
// Global functions/macros
 | 
						|
// ============================================================================
 | 
						|
 | 
						|
/**
 | 
						|
    An empty animation object.
 | 
						|
*/
 | 
						|
wxAnimation wxNullAnimation;
 |