package com.clearlyspam23.GLE.debug; import java.awt.BorderLayout; import java.awt.Frame; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.InputEvent; import java.awt.geom.Rectangle2D; import javax.swing.JPanel; import org.piccolo2d.PLayer; import org.piccolo2d.PNode; import org.piccolo2d.event.PInputEventFilter; import org.piccolo2d.event.PInputEventListener; import org.piccolo2d.event.PMouseWheelZoomEventHandler; import org.piccolo2d.extras.pswing.PSwingCanvas; import org.piccolo2d.util.PBounds; import com.clearlyspam23.GLE.Template; import com.clearlyspam23.GLE.basic.layers.tile.TileLayerDefinition; import com.clearlyspam23.GLE.basic.layers.tile.TileLayerTemplate; import com.clearlyspam23.GLE.basic.layers.tile.edit.TileLayerEditManager; import com.clearlyspam23.GLE.level.Layer; import com.clearlyspam23.GLE.level.Level; public class TestLevelPanel extends JPanel implements ComponentListener{ // static protected Line2D gridLine = new Line2D.Double(); // static protected Rectangle2D rect = new Rectangle2D.Double(); // static protected Color gridPaint = Color.BLACK; // static protected double gridSpacing = 20; // static protected float lineSpacing = (float) (gridSpacing/4); // static protected Stroke gridStroke = new BasicStroke(1, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER, 1.0f, new float[]{lineSpacing, lineSpacing}, lineSpacing/2); // static protected Stroke startStroke = new BasicStroke(1, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER, 1.0f, new float[]{lineSpacing/2, lineSpacing}, 0); private final PSwingCanvas canvas; private Level level; private double currWidth; private double currHeight; public TestLevelPanel() { canvas = new PSwingCanvas(); setLayout(new BorderLayout()); Template t = new Template(); TileLayerDefinition def = new TileLayerDefinition(); TileLayerTemplate template = new TileLayerTemplate(def); template.setDefaultGridDimensions(32, 32); level = new Level(t); level.setDimensions(320, 320); Layer layer = template.createLayer(); layer.onResize(level, level.getWidth(), level.getHeight()); level.addLayer(layer); add(canvas, BorderLayout.CENTER); PNode base = new PNode(); canvas.getLayer().addChild(base); for(Layer l : level.getLayers()) { base.addChild(l.getLayerGUI()); } //need some way to determine currentLayer, for now this will have to do Layer<?> currentLayer = level.getLayers().get(level.getLayers().size()-1); TileLayerEditManager data = new TileLayerEditManager(); // data.setCurrentTileset(new Tileset(new Image[][]{{tile}})); // data.setSelectedIndex(0, 0); // for(PInputEventListener l : currentLayer.getListeners()) // canvas.addInputEventListener(l); // // for(LayerEditorDialog d : currentLayer.getEditors((Frame)this.getParent())){ // d.setVisible(true); // } PLayer pLayer = canvas.getLayer(); canvas.getPanEventHandler().setEventFilter(new PInputEventFilter(InputEvent.BUTTON3_MASK)); canvas.removeInputEventListener(canvas.getZoomEventHandler()); PMouseWheelZoomEventHandler eh = new PMouseWheelZoomEventHandler(); eh.zoomAboutMouse(); eh.setScaleFactor(-0.1); canvas.addInputEventListener(eh); addComponentListener(this); // System.out.println("initial: " + canvas.getWidth() + ", " + canvas.getHeight()); this.setVisible(true); this.validate(); } @Override public void componentHidden(ComponentEvent arg0) { } @Override public void componentMoved(ComponentEvent arg0) { } @Override public void componentResized(ComponentEvent arg0) { // System.out.println("current: " + canvas.getWidth() + ", " + canvas.getHeight()); PBounds bounds = canvas.getCamera().getViewBounds(); double x; double y; if(currWidth<=0) x = level.getWidth()/2-canvas.getWidth()/2; else x = bounds.x - (canvas.getWidth()-currWidth)/2; if(currHeight<=0) y = level.getHeight()/2 - canvas.getHeight()/2; else y = bounds.y - (canvas.getHeight()-currHeight)/2; canvas.getCamera().setViewBounds(new Rectangle2D.Double(x, y, canvas.getWidth(), canvas.getHeight())); currWidth = canvas.getWidth(); currHeight = canvas.getHeight(); // canvas.getCamera().setViewBounds(new Rectangle2D.Double(level.getWidth()/2-canvas.getWidth()/2, level.getHeight()/2-canvas.getHeight()/2, canvas.getWidth(), canvas.getHeight())); // System.out.println("location :" + canvas.getCamera().getViewBounds().x + ", " + canvas.getCamera().getViewBounds().y); } @Override public void componentShown(ComponentEvent arg0) { // TODO Auto-generated method stub } }