package com.jogamp.opengl.test.bugs;

import javax.media.nativewindow.WindowClosingProtocol.WindowClosingMode;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;

import org.junit.Test;

import com.jogamp.newt.event.KeyEvent;
import com.jogamp.newt.event.KeyListener;
import com.jogamp.newt.opengl.GLWindow;
import com.jogamp.opengl.util.Animator;

public final class BugNEWTWarpPointerFullscreenCollision
{
  @Test public void testCollision()
    throws InterruptedException
  {
    final GLProfile profile = GLProfile.get(GLProfile.GL3);
    final GLCapabilities caps = new GLCapabilities(profile);
    final GLWindow window = GLWindow.create(caps);
    window.setSize(640, 480);

    final Animator anim = new Animator();
    anim.setUpdateFPSFrames(60, System.err);
    anim.add(window);

    window.addGLEventListener(new GLEventListener() {
      @Override public void init(
        final GLAutoDrawable drawable)
      {
        // Nothing
      }

      @Override public void dispose(
        final GLAutoDrawable drawable)
      {
        // Nothing.
      }

      @Override public void display(
        final GLAutoDrawable drawable)
      {
        window.warpPointer(window.getWidth() / 2, window.getHeight() / 2);
      }

      @Override public void reshape(
        final GLAutoDrawable drawable,
        final int x,
        final int y,
        final int width,
        final int height)
      {
        // Nothing
      }
    });

    window.addKeyListener(new KeyListener() {
      @Override public void keyReleased(
        final KeyEvent e)
      {
        window.setFullscreen(!window.isFullscreen());
      }

      @Override public void keyPressed(
        final KeyEvent e)
      {
        // Nothing
      }
    });

    window.setDefaultCloseOperation(WindowClosingMode.DISPOSE_ON_CLOSE);
    window.setVisible(true);
    anim.start();

    Thread.sleep(10000);
  }
}

