Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
Module10- QTZoo/Source/MainFrame.java
import java.awt.*; |
import java.awt.event.*; |
import java.util.Vector; |
import java.util.StringTokenizer; |
import quicktime.QTException; |
import quicktime.QTSession; |
import quicktime.app.display.QTCanvas; |
import quicktime.app.anim.Compositor; |
import quicktime.app.image.QTTransition; |
import quicktime.std.movies.Atom; |
import quicktime.std.movies.AtomContainer; |
import quicktime.std.StdQTConstants; |
import quicktime.qd.QDDimension; |
import quicktime.util.EndianOrder; |
/** |
* QTZoo Module 8 - Using QuickTime Transitions |
* This application requires QuickTime for Java |
* |
* @author Levi Brown |
* @author Michael Hopkins |
* @author Apple Computer, Inc. |
* @version 8.0 4/10/2000 |
* Copyright: © Copyright 1999 Apple Computer, Inc. All rights reserved. |
* |
* Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. |
* ("Apple") in consideration of your agreement to the following terms, and your |
* use, installation, modification or redistribution of this Apple software |
* constitutes acceptance of these terms. If you do not agree with these terms, |
* please do not use, install, modify or redistribute this Apple software. |
* |
* In consideration of your agreement to abide by the following terms, and subject |
* to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs |
* copyrights in this original Apple software (the "Apple Software"), to use, |
* reproduce, modify and redistribute the Apple Software, with or without |
* modifications, in source and/or binary forms; provided that if you redistribute |
* the Apple Software in its entirety and without modifications, you must retain |
* this notice and the following text and disclaimers in all such redistributions of |
* the Apple Software. Neither the name, trademarks, service marks or logos of |
* Apple Computer, Inc. may be used to endorse or promote products derived from the |
* Apple Software without specific prior written permission from Apple. Except as |
* expressly stated in this notice, no other rights or licenses, express or implied, |
* are granted by Apple herein, including but not limited to any patent rights that |
* may be infringed by your derivative works or by other works in which the Apple |
* Software may be incorporated. |
* |
* The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO |
* WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED |
* WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
* PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN |
* COMBINATION WITH YOUR PRODUCTS. |
* |
* IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION |
* OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT |
* (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN |
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
* |
* |
*/ |
public class MainFrame extends Frame |
{ |
public static final int WIDTH = 640; |
public static final int HEIGHT = 480; |
/** |
* Creates the QTCanvas, loads media, and displays window contents |
*/ |
public MainFrame( String s ) |
{ |
super( s ); |
setResizable( false ); |
setBounds( 0, 0, WIDTH, HEIGHT ); |
myQTCanvas = new QTCanvas( QTCanvas.kInitialSize, 0.5F, 0.5F ); // Create new QT Canvas |
add( myQTCanvas ); |
loadPanes( ); |
try |
{ |
myQTCanvas.setClient (mapPane.getCompositor(), true); //Set the canvas to display the map pane |
} |
catch (QTException exc) |
{ |
exc.printStackTrace(); |
} |
addWindowListener( new WindowAdapter() |
{ |
public void windowClosing( WindowEvent we ) |
{ |
QTSession.close(); |
dispose(); |
} |
public void windowClosed( WindowEvent we ) |
{ |
System.exit( 0 ); |
} |
}); |
show(); |
toFront(); |
} |
/** |
* Loads the data displayed in each of the animal panes |
*/ |
public void loadPanes() |
{ |
actionListener = new Action(); |
mapPane = new MapPane( ); |
mapPane.addActionListener(actionListener); |
zebraPane = new AnimalPane( ); |
zebraPane.addActionListener(actionListener); |
} |
protected void transition(ZooPane fromPane, ZooPane toPane, Point effectLoc ) |
{ |
Compositor fromComp = fromPane.getCompositor(); |
Compositor toComp = toPane.getCompositor(); |
try |
{ |
//Make sure the compositor has had a chance to drawn itself |
toComp.setGWorld(quicktime.qd.QDGraphics.validScratch); |
toComp.redraw(null); |
QTTransition transition = new QTTransition(new QDDimension(MainFrame.WIDTH, MainFrame.HEIGHT)); |
transition.setTime(1000); |
transition.setSourceImage(fromComp); |
transition.setDestinationImage(toComp); |
transition.setProfiled(false); |
myQTCanvas.setClient (transition, true); |
AtomContainer effectSample = new AtomContainer(); |
if (effectLoc == null) |
{ |
// We are using SMPTE Effects so set the what atom to smpt |
effectSample.insertChild (Atom.kParentIsContainer, StdQTConstants.kEffectWhatAtom, 1, 0, EndianOrder.flipNativeToBigEndian32(StdQTConstants.kWipeTransitionType)); |
// We are using SMPTE effect number 74 - start at 0%, stop at 100% |
effectSample.insertChild(Atom.kParentIsContainer, StdQTConstants.kEffectWipe, 1, 0, EndianOrder.flipNativeToBigEndian32(StdQTConstants.kRandomWipeTransitionType)); |
} |
else |
{ |
effectSample.insertChild(Atom.kParentIsContainer, StdQTConstants.kEffectWhatAtom, 1, 0, EndianOrder.flipNativeToBigEndian32(StdQTConstants.kExplodeTransitionType)); |
effectSample.insertChild(Atom.kParentIsContainer, StdQTConstants.kExplodeTransitionType, 1, 0, EndianOrder.flipNativeToBigEndian32(StdQTConstants.kExplodeTransitionType)); |
} |
transition.setEffect(effectSample); |
transition.doTransition(); |
myQTCanvas.setClient (toComp, true); |
toPane.start(); |
fromPane.stop(); |
} |
catch (QTException exc) |
{ |
exc.printStackTrace(); |
} |
} |
/** |
* Responds to actions targeting the MainFrame |
* Responsible for handling clicks in the animal regions in the Map Pane |
*/ |
class Action implements ActionListener |
{ |
public void actionPerformed(ActionEvent event) |
{ |
Object source = event.getSource(); |
String command = event.getActionCommand(); |
StringTokenizer st = new StringTokenizer(command, ";"); |
Vector params = new Vector(); |
while (st.hasMoreTokens()) |
{ |
params.addElement(st.nextToken()); |
} |
//Minimalistic error checking... |
if (params.size() < 3) |
{ |
System.err.println("Not enough parameters in command"); |
return; |
} |
//Parse our action command for pertinate info |
String area = (String)params.elementAt(0); |
int xLoc = 0; |
int yLoc = 0; |
try |
{ |
xLoc = Integer.parseInt((String)params.elementAt(1)); |
} catch (NumberFormatException exc) |
{ |
exc.printStackTrace(); |
} |
try |
{ |
yLoc = Integer.parseInt((String)params.elementAt(2)); |
} catch (NumberFormatException exc) |
{ |
exc.printStackTrace(); |
} |
//Distribute appropriately |
if (source.equals(mapPane)) |
{ |
zebraPane.playSound(); |
transition(mapPane, zebraPane, new Point(xLoc, yLoc)); |
} |
else if (source instanceof AnimalPane) |
{ |
if (area.equals("map")) |
{ |
transition((AnimalPane)source, mapPane, null ); |
} |
} |
} |
} |
protected ActionListener actionListener; |
protected QTCanvas myQTCanvas; |
protected MapPane mapPane; |
protected AnimalPane zebraPane; |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14