The Movie Toolbox allows your application to define functions that are invoked during specific operations. For example, you can create a progress function that monitors the Movie Toolbox’s progress on long operations, and you can create a cover function that allows your application to perform custom display processing.
Listing 4-1 shows two sample cover functions. Whenever a movie covers a portion of a window, the MyCoverProc
function removes the covered region from the window’s clipping region. When a movie uncovers a screen region, the MyUncoverProc
function invalidates the region and adds it to the window’s clipping region. By invalidating the region, this function causes the application to receive an update event, informing the application to redraw its window. The InitCoverProcs
function initializes the window’s clipping region and installs these cover functions.
Listing 4-1 Two sample movie cover functions
pascal OSErr MyCoverProc (Movie aMovie, RgnHandle changedRgn, |
long refcon) |
{ |
CGrafPtr mPort; |
GDHandle mGD; |
GetMovieGWorld (aMovie, &mPort, &mGD); |
DiffRgn (mPort->clipRgn, changedRgn, mPort->clipRgn); |
return noErr; |
} |
pascal OSErr MyUnCoverProc (Movie aMovie, RgnHandle changedRgn, |
long refcon) |
{ |
CGrafPtr mPort, curPort; |
GDHandle mGD, curGD; |
GetMovieGWorld (aMovie, &mPort, &mGD); |
GetGWorld (&curPort, &curGD); |
SetGWorld (mPort, mGD); |
InvalRgn (changedRgn); |
UnionRgn (mPort->clipRgn, changedRgn, mPort->clipRgn); |
SetGWorld (curPort, curGD); |
return noErr; |
} |
void InitCoverProcs (WindowPtr aWindow, Movie aMovie) |
{ |
RgnHandle displayBounds; |
GrafPtr curPort; |
displayBounds = GetMovieDisplayBoundsRgn (aMovie); |
if (displayBounds == nil) return; |
GetPort (&curPort); |
SetPort (aWindow); |
ClipRect (&aWindow->portRect); |
DiffRgn (aWindow->clipRgn, displayBounds, aWindow->clipRgn); |
DisposeRgn( displayBounds ); |
SetPort (curPort); |
SetMovieCoverProcs (aMovie, &MyUnCoverProc, &MyCoverProc, 0); |
} |
© 2005, 2006 Apple Computer, Inc. All Rights Reserved. (Last updated: 2006-01-10)