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.
src/MediaPresenter.java
/* |
* QuickTime for Java SDK Sample Code |
Usage subject to restrictions in SDK License Agreement |
* Copyright: © 1996-1999 Apple Computer, Inc. |
*/ |
import java.awt.*; |
import java.awt.event.*; |
import java.io.*; |
import quicktime.qd.*; |
import quicktime.*; |
import quicktime.io.*; |
import quicktime.std.*; |
import quicktime.std.movies.*; |
import quicktime.std.image.*; |
import quicktime.app.QTFactory; |
import quicktime.app.display.*; |
import quicktime.app.players.*; |
import quicktime.app.image.*; |
import quicktime.app.actions.*; |
import quicktime.app.anim.*; |
public class MediaPresenter extends Frame implements StdQTConstants { |
public static void main (String args[]) { |
try { |
QTSession.open(); |
MediaPresenter gd = new MediaPresenter("QT in Java"); |
gd.pack(); |
gd.show(); |
gd.toFront(); |
} catch (Exception e) { |
e.printStackTrace(); |
QTSession.close(); |
} |
} |
MediaPresenter (String title) throws Exception { |
super (title); |
setBackground (Color.white); |
QTCanvas myQTCanvas = new QTCanvas (); |
add ("Center", myQTCanvas); |
add ("North", new ControlPanel (this)); |
addWindowListener(new WindowAdapter () { |
public void windowClosing (WindowEvent e) { |
QTSession.close(); |
dispose(); |
} |
public void windowClosed (WindowEvent e) { |
System.exit(0); |
} |
}); |
int kWidth = 300, kHeight = 300; |
QDDimension d = new QDDimension (kWidth, kHeight); |
groupDrawer = new DirectGroup (d, QDColor.white); |
myQTCanvas.setClient (groupDrawer, true); |
groupDrawer.getTimer().setRate (1); |
} |
DirectGroup groupDrawer; |
QTDrawable myDrawer; |
void stopPlayer () throws QTException { |
if (myDrawer instanceof Playable) |
((Playable)myDrawer).setRate(0); |
} |
void openFromURL (String url) throws QTException { |
QTDrawable d = QTFactory.makeDrawable (url); |
groupDrawer.removeMember (myDrawer); |
myDrawer = null; |
groupDrawer.addMember (d); |
myDrawer = d; |
} |
private void redrawDrawer () throws QTException { |
groupDrawer.memberChanged (myDrawer); |
if (myDrawer instanceof QTPlayer) { |
((QTPlayer)myDrawer).getMovieController().movieChanged(); |
} |
groupDrawer.redraw (null); |
} |
boolean hasDrawer () { return myDrawer != null; } |
void reset () throws QTException { |
myDrawer.setMatrix (new Matrix()); |
redrawDrawer (); |
} |
void setScaling (float scale) throws QTException { |
Matrix mat = myDrawer.getMatrix(); |
mat.scale (scale, scale, 0, 0); |
myDrawer.setMatrix (mat); |
redrawDrawer (); |
} |
void rotateDrawer () throws QTException { |
Matrix mat = myDrawer.getMatrix(); |
// rotate 90 degress and keep origin at 0,0 of group |
// this rotation bounds stuff ONLY works currently |
// with 90 degree rotations - there are some bounds stuff |
// on the matrix class which WILL be added to this code |
// so that any rotation can be done and the result positioned at top / left |
float rx = 0; |
float ry = 0; |
mat.rotate (90, rx, ry); |
if (myDrawer instanceof QTPlayer) { |
myDrawer.setMatrix (mat); |
myDrawer.setLocation (0, 0); |
} else { |
QDDimension d = myDrawer.getOriginalSize(); |
if (mat.getSx() == 0) { |
if (mat.getB() > 0) { |
float xLoc = mat.getC() * -d.getHeight(); |
mat.setTx (xLoc); |
mat.setTy (0); |
} else { |
float yLoc = mat.getB() * -d.getWidth(); |
mat.setTy (yLoc); |
mat.setTx (0); |
} |
} else { |
if (mat.getSx () > 0) |
mat.setTx (0); |
else |
mat.setTx (d.getWidth() * Math.abs (mat.getSx())); |
if (mat.getSy () > 0) |
mat.setTy (0); |
else |
mat.setTy (d.getHeight()* Math.abs (mat.getSy())); |
} |
myDrawer.setMatrix (mat); |
} |
redrawDrawer (); |
} |
} |
class ControlPanel extends Panel { |
ControlPanel (MediaPresenter mp) { |
myPresenter = mp; |
openButton.addActionListener (new ActionListener () { |
public void actionPerformed(ActionEvent event) { |
// creat a movie through the file-open dialog of QT |
try { |
myPresenter.stopPlayer(); |
QTFile qtf = QTFile.standardGetFilePreview(QTFile.kStandardQTFileTypes); |
myPresenter.openFromURL ("file://" + qtf.getPath()); |
enableButtons (); |
} catch (QTException e) { |
if (e.errorCode() != Errors.userCanceledErr) |
e.printStackTrace(); |
} |
} |
}); |
rotateButton.addActionListener (new ActionListener () { |
public void actionPerformed(ActionEvent event) { |
try { |
myPresenter.rotateDrawer (); |
} catch (QTException e) { |
// with rotated members of a direct group |
// a QuickDraw bug will occassionally throw |
// this error - it can be ignored |
if (e.errorCode() != Errors.rgnTooBigErr) |
e.printStackTrace(); |
} |
} |
}); |
scaleField.addActionListener (new ActionListener () { |
public void actionPerformed (ActionEvent event) { |
float f = Float.valueOf (new String (event.getActionCommand())).floatValue(); |
try { |
myPresenter.setScaling (f); |
} catch (QTException e) { |
e.printStackTrace(); |
} |
} |
}); |
resetButton.addActionListener (new ActionListener () { |
public void actionPerformed (ActionEvent event) { |
try { |
myPresenter.reset (); |
} catch (QTException e) { |
e.printStackTrace(); |
} |
} |
}); |
add (openButton); |
add (rotateButton); |
add (scaleLabel); |
add (scaleField); |
add (resetButton); |
enableButtons(); |
} |
void enableButtons () { |
rotateButton.setEnabled (myPresenter.hasDrawer()); |
scaleField.setEnabled (myPresenter.hasDrawer()); |
resetButton.setEnabled (myPresenter.hasDrawer()); |
} |
public Dimension getPreferredSize () { |
return new Dimension (80, 80); |
} |
MediaPresenter myPresenter; |
Button openButton = new Button ("Open File..."); |
Button rotateButton = new Button ("Rotate"); |
Button resetButton = new Button ("Reset"); |
Label scaleLabel = new Label ("Scale"); |
TextField scaleField = new TextField (8); |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14