import java.awt.*;
import java.awt.swing.*;
import java.util.*;
public class ImageCanvas extends Canvas implements Observer {
 Image image;
 Movie movie;
 public void attachObservable (Movie m) {             
  if (m != movie) { 
   if (movie != null) {movie.deleteObserver(this);}   
   movie = m;                                         
   movie.addObserver(this);                           
   movie.changed();                                   
 }}
 public void setImage (String s) {
  if (s == null) {image = null;}
  else {image = MovieAuxiliaries.readMovieImage (s);}
  repaint();
 }
 public void update (Observable o, Object x) {         
  setImage(movie.getPoster());
 }                                                     
 public void paint(Graphics g) {
  Dimension d = getSize();
  if (image != null) {
   int x, y, width, height, border = 20;
   double imageRatio
    = (float) image.getHeight(this) / image.getWidth(this);
   double windowRatio = (float) d.height / d.width;
   if (imageRatio > windowRatio) {
    height = d.height - border;
    width = (int)((float) image.getWidth(this) 
                   * (d.height - border) / image.getHeight(this));
   }
   else {
    width = d.width - border;
    height = (int)((float) image.getHeight(this) 
                    * (d.width - border) / image.getWidth(this));
   }
   x = (d.width - width) / 2; 
   y = (d.height - height) / 2;
   g.drawImage(image, x, y, width, height, this);
 }}
 public Dimension getMinimumSize() {return new Dimension(200, 300);}
 public Dimension getPreferredSize() {return new Dimension(200, 300);}
}
