package net.beadsproject.touch.examples;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.swing.JFrame;
import javax.swing.JPanel;

import net.beadsproject.beads.core.AudioContext;
import net.beadsproject.beads.core.UGen;
import net.beadsproject.beads.data.Pitch;
import net.beadsproject.beads.data.Sample;
import net.beadsproject.beads.data.SampleManager;
import net.beadsproject.beads.events.KillTrigger;
import net.beadsproject.beads.ugens.Envelope;
import net.beadsproject.beads.ugens.Gain;
import net.beadsproject.beads.ugens.PolyLimit;
import net.beadsproject.beads.ugens.SamplePlayer;
import net.beadsproject.beads.ugens.Static;
import net.beadsproject.beads.ugens.SamplePlayer.EnvelopeType;
import net.beadsproject.beads.ugens.SamplePlayer.InterpolationType;
import net.beadsproject.touch.hardware.PQLabsTouchSurface;
import net.beadsproject.touch.hardware.TouchSurface;
import net.beadsproject.touch.hardware.TouchSurfaceListener;
import net.beadsproject.touch.world.Region;
import net.beadsproject.touch.world.RegionMap;
import net.beadsproject.touch.world.World;
import processing.core.PGraphics;
import processing.core.PGraphics2D;
import processing.core.PImage;

/**
 * 
 * Fullscreen touch screen base class.
 * 
 * @author ben
 *
 */
public class JFrameFullScreenTouchSurface {

	protected TouchSurface touchSurface;	
	protected JFrame frame;
	public int width, height;
	
	public void paint(Graphics g){}
			
	public JFrameFullScreenTouchSurface()
	{
		//Create and set up the window.
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        
        frame.setUndecorated(true);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setSize(screenSize);
        width = screenSize.width;
        height = screenSize.height;
        
        frame.setCursor(frame.getToolkit().createCustomCursor(
        		new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB),
        		new Point(0, 0), "null"));        
        
        JPanel pane = (JPanel) frame.getContentPane();        
        frame.setVisible(true);
        
		final WorldViewer wv = new WorldViewer(this);
		pane.add(wv);
		
		touchSurface = new PQLabsTouchSurface();
		
		javax.swing.Timer t = new javax.swing.Timer(100, new ActionListener() {
	          public void actionPerformed(ActionEvent e) {
	              wv.repaint();
	          }
	       });
		t.start();			
	}
	
	public static class WorldViewer extends JPanel
	{
		JFrameFullScreenTouchSurface s;
		
		public WorldViewer(JFrameFullScreenTouchSurface s)
		{
			this.s = s;			
		}
		
		public void paint(Graphics g) {
			s.paint(g);			
		}
	}
		
	public static void main(String[] args)
	{
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
		    public void run() 
		    {
		    	new JFrameFullScreenTouchSurface();
		    }
	    });
	}
}
