The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
    /*
    ###########################################################################
    # (@)PACKAGE:Win32::GUI::Animation
    #
    # $Id: Animation.xs,v 1.3 2004/03/28 15:02:22 lrocher Exp $
    #
    ###########################################################################
    */

#include "GUI.h"

void 
Animation_onPreCreate(NOTXSPROC LPPERLWIN32GUI_CREATESTRUCT perlcs) {

    perlcs->cs.lpszClass = ANIMATE_CLASS;
    perlcs->cs.style = WS_VISIBLE | WS_CHILD;
}

BOOL
Animation_onParseOption(NOTXSPROC char *option, SV* value, LPPERLWIN32GUI_CREATESTRUCT perlcs) {

    BOOL retval = TRUE;

    if BitmaskOptionValue("-autoplay", perlcs->cs.style, ACS_AUTOPLAY)
    } else if BitmaskOptionValue("-center", perlcs->cs.style, ACS_CENTER)
    } else if BitmaskOptionValue("-transparent", perlcs->cs.style, ACS_TRANSPARENT)
    } else retval = FALSE;

    return retval;
}

void 
Animation_onPostCreate(NOTXSPROC HWND myhandle, LPPERLWIN32GUI_CREATESTRUCT perlcs) {
}

BOOL
Animation_onParseEvent(NOTXSPROC char *name, int* eventID) {

    BOOL retval = TRUE;

         if Parse_Event("Start",    PERLWIN32GUI_NEM_CONTROL1)
    else if Parse_Event("Stop",     PERLWIN32GUI_NEM_CONTROL2)
    else retval = FALSE;

    return retval;
}

int
Animation_onEvent (NOTXSPROC LPPERLWIN32GUI_USERDATA perlud, UINT uMsg, WPARAM wParam, LPARAM lParam) {

    int PerlResult = 1;

    if ( uMsg == WM_COMMAND ) {

        switch(HIWORD(wParam)) {
        case ACN_START:
            /*
             * (@)EVENT:Start()
             * Sent when the AVI clip has started playing.
             * (@)APPLIES_TO:Animation
             */ 
            PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_CONTROL1, "Start", -1 );
            break;
        case ACN_STOP:
            /*
             * (@)EVENT:Stop()
             * Sent when the AVI clip has stopped playing.
             * (@)APPLIES_TO:Animation
             */ 
            PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_CONTROL2, "Stop", -1 );
            break;
        }
    }

    return PerlResult;
}

MODULE = Win32::GUI::Animation      PACKAGE = Win32::GUI::Animation

PROTOTYPES: DISABLE

#pragma message( "*** PACKAGE Win32::GUI::Animation..." )

    ###########################################################################
    # (@)METHOD:Open(FILE)
    # Opens an AVI clip and displays its first frame in an animation control. 
BOOL
Open(handle,file)
    HWND handle
    char * file
CODE:
    RETVAL = Animate_Open(handle, (LPSTR) file);
OUTPUT:
    RETVAL


    ###########################################################################
    # (@)METHOD:OpenEx(FILE,[INSTANCE=NULL])
    # Opens an AVI clip from a resource in a specified module and displays its first frame in an animation control.
BOOL
OpenEx(handle,file,instance=NULL)
    HWND handle
    SV * file
    HINSTANCE instance 
PREINIT:
    LPSTR name;
CODE:
    if (SvIOK(file))
      name = MAKEINTRESOURCE ((WORD ) SvIV(file));
    else if (SvPOK(file))
      name = SvPV_nolen(file);
    else
      name = NULL;

    if (name != NULL)
        RETVAL = Animate_OpenEx(handle, instance, (LPSTR) file);
    else
        RETVAL = FALSE;
OUTPUT:
    RETVAL


    ###########################################################################
    # (@)METHOD:Close()
    # Closes an AVI clip and displays its first frame in an animation control
BOOL
Close(handle)
    HWND handle
CODE:
    RETVAL = Animate_Close(handle);
OUTPUT:
    RETVAL


    ###########################################################################
    # (@)METHOD:Play([FROM], [TO], [REPEAT])
    # Plays an AVI clip in an animation control.     
BOOL
Play(handle,from=0,to=(UINT)-1,repeat=(UINT)-1)
    HWND handle
    UINT from
    UINT to
    UINT repeat
CODE:
    RETVAL = Animate_Play(handle, from, to, repeat);
OUTPUT:
    RETVAL


    ###########################################################################
    # (@)METHOD:Stop()
    # Stops playing an AVI clip in an animation control. 
BOOL
Stop(handle)
    HWND handle
CODE:
    RETVAL = Animate_Stop(handle);
OUTPUT:
    RETVAL


    ###########################################################################
    # (@)METHOD:Seek(FRAME)
    # Directs an animation control to display a particular frame of an AVI clip.
BOOL
Seek(handle,frame)
    HWND handle
    UINT frame
CODE:
    RETVAL = Animate_Seek(handle, frame);
OUTPUT:
    RETVAL