package camera;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.image.ImageObserver;

import org.osgi.service.log.LogService;

// TODO: double buffering is pointless right now,
// since it only helps if drawing is more involved
// than drawing the image on-screen (since that's what
// we end up having to do from bufferImage to the screen),
// and right now all we're doing is drawing an image.
// It might be handy once we're overlaying buttons etc.
public class PreviewPanel
	extends Panel
	implements ImageObserver {
	private static final long serialVersionUID = -8250386972024162735L;

	private final LogService log;
	private Image image;

	
	PreviewPanel(LogService log) {
		this.log = log;
	}
	
	public void wipe() {
		log.log(LogService.LOG_DEBUG, "PreviewPanel wiping");
		this.image = null;
		repaint();
	}
	
	public void setImage(Image image) {
		log.log(LogService.LOG_DEBUG, "PreviewPanel set image");
		
		// we receive the full image, so we need to scale it down
		// to fit on our panel before we can display it
		this.image = image.getScaledInstance(getWidth(), getHeight(), Image.SCALE_FAST);		
		repaint();
	}

	// overridden to avoid flicker
	public void update(Graphics g){
		//log.log(LogService.LOG_DEBUG, "PreviewPanel.update");
        paint(g);
    }

	public void paint(Graphics g) {
		if (image != null) {
			//log.log(LogService.LOG_DEBUG, "PreviewPanel drawing image");
			g.drawImage(image, 0, 0, this);
		}
		else {
			// just clear out any old image
			g.clearRect(0, 0, getWidth(), getHeight());
		}
	}
}