package org.lwjgl.opengl.awt;

import static org.lwjgl.opengl.GL11.glClearColor;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ComponentAdapter;

import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import org.lwjgl.opengl.GL;
import org.lwjgl.opengl.GL11;

public class DrawOnDemandTest {
	
	static Color quadColor = new Color(0x77aadd);

	public static void main(String[] args) {
		
		AWTGLCanvas canvas = new AWTGLCanvas() {
			private static final long serialVersionUID = 1L;

			@Override
			public void initGL() {
				GL.createCapabilities();
				glClearColor(0.3f, 0.4f, 0.5f, 1);
			}
			
			@Override
			public void paintGL() {
				int w = getWidth();
				int h = getHeight();
				if (w == 0 || h == 0) {
					return;
				}
				float aspect = (float) w / h;
				GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
				GL11.glViewport(0, 0, w, h);
				GL11.glBegin(GL11.GL_QUADS);
				GL11.glColor3f(quadColor.getRed()/255f, quadColor.getGreen()/255f, quadColor.getBlue()/255f);
				GL11.glVertex2f(-0.75f / aspect, 0.0f);
				GL11.glVertex2f(0, -0.75f);
				GL11.glVertex2f(+0.75f / aspect, 0);
				GL11.glVertex2f(0, +0.75f);
				GL11.glEnd();
				swapBuffers();
			}

			@Override
			public void repaint() {
				if (SwingUtilities.isEventDispatchThread()) {
					render();
				} else {
					SwingUtilities.invokeLater(() -> render());
				}
			}

		};

		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(new BorderLayout());
		frame.getContentPane().add(canvas, BorderLayout.CENTER);
		canvas.setPreferredSize(new Dimension(200, 200));
		canvas.addComponentListener(new ComponentAdapter() {
			public void componentResized(java.awt.event.ComponentEvent e) {
				canvas.repaint();
			};
		});
		JColorChooser colorChooser = new JColorChooser(quadColor);
		frame.getContentPane().add(colorChooser, BorderLayout.SOUTH);
		colorChooser.getSelectionModel().addChangeListener((e)->{
			quadColor = colorChooser.getColor();
			canvas.repaint();
		});
		

		SwingUtilities.invokeLater(() -> {
			frame.pack();
			frame.setVisible(true);
		});
	}

}