/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jada.ngeditor.guiviews.editors;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
/**
*
* @author cris
*/
public class ImageModeCanvas extends javax.swing.JPanel {
private ImageModeModel model;
private final Image image;
private ImageModePresenter painter;
/**
* Creates new form ImageModeCanvas
*/
public ImageModeCanvas(ImageModeModel model) {
initComponents();
this.model = model;
MediaTracker tracker = new MediaTracker(this);
this.image = Toolkit.getDefaultToolkit().createImage(this.model.getImage());
tracker.addImage(image, 0);
try {
tracker.waitForID(0);
} catch (InterruptedException ex) {
Logger.getLogger(ImageModeCanvas.class.getName()).log(Level.SEVERE, null, ex);
}
this.painter = new ResizePainter((ResizeImageMode)model, image.getWidth(null), image.getHeight(null));
this.addMouseListener(painter);
this.addMouseMotionListener(painter);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.clearRect(0, 0, this.image.getWidth(null), this.image.getHeight(null));
g.drawImage(this.image, 0, 0, null);
g.clipRect(0, 0, this.image.getWidth(null), this.image.getHeight(null));
painter.paint(g);
}
public static void main(String[] args) {
JFrame pr = new JFrame("BALDFA");
pr.getContentPane().add(new ImageModeCanvas(new ResizeImageMode("C:/Users/cris/Documents/JMonkeyProject/BasicGame/assets/Interface/Leaf.png","","resize:15,2,15,15,15,2,15,2,15,2,15,15")));
pr.setVisible(true);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 244, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 215, Short.MAX_VALUE)
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables
private static interface ImageModePresenter extends MouseListener,MouseMotionListener {
public abstract void paint(Graphics g);
}
private class SubImagePainter extends MouseAdapter implements ImageModePresenter{
private final SubImageModel model;
private final byte DIR_N=0;
private final byte DIR_E=1;
private final byte DIR_S=2;
private final byte DIR_W=3;
private final byte DIR_SE=4;
private final byte MOV=5;
private final byte NOP=-1;
private byte curDir;
public SubImagePainter(SubImageModel model) {
this.model = model;
}
@Override
public void paint(Graphics g) {
Rectangle temp = model.getRectangle();
g.setColor(new Color(255, 0, 0, 70));
g.fillRect(temp.x, temp.y, temp.width, temp.height);
}
@Override
public void mouseDragged(MouseEvent e) {
Rectangle selected = this.model.getRectangle();
int to;
switch (curDir) {
case DIR_E:
to = (int) (e.getX() - selected.getMaxX());
if ((selected.width + to) > 0) {
selected.width += to;
}
break;
case DIR_W:
to = (int) (selected.getMinX() - e.getX());
if ((selected.width + to) > 0) {
selected.x = e.getX();
selected.width += to;
}
break;
case DIR_S:
to = (int) (e.getY() - selected.getMaxY());
if ((selected.height + to) > 0) {
selected.height += to;
}
break;
case DIR_SE:
to = (int) (e.getX() - selected.getMaxX());
int toy = (int) (e.getY() - selected.getMaxY());
if (((selected.width + to) > 0) && (selected.height + to) > 0) {
if (e.isControlDown()) {
selected.height += to;
} else {
selected.height += toy;
}
selected.width += to;
}
break;
case DIR_N:
to = (int) (selected.getMinY() - e.getY());
if ((selected.height + to) > 0) {
selected.height += to;
selected.y = e.getY();
}
break;
case MOV:
selected.x = e.getX() - selected.width/2;
selected.y = e.getY() - selected.height/2;
break;
default:
}
updateUI();
}
@Override
public void mouseMoved(MouseEvent e) {
Rectangle selected = this.model.getRectangle();
if(e.getX()>selected.getMaxX()-5 && e.getX()<selected.getMaxX()+5
&& e.getY()>selected.getMaxY()-5
&& e.getY()<selected.getMaxY()+5
){
e.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));
curDir=DIR_SE;
}else if(e.getX()==selected.getMinX() && (e.getY()<selected.getMaxY() && e.getY()>selected.getMinY() )){
e.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
curDir=DIR_W;
}else if(e.getX()==selected.getMaxX() && (e.getY()<selected.getMaxY() && e.getY()>selected.getMinY() )){
e.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
curDir=DIR_E;
}
else if(e.getY()<selected.getMaxY()+5 && e.getY()>selected.getMaxY()-5
&& (e.getX()<selected.getMaxX() && e.getX()>selected.getMinX() )){
e.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR));
curDir=DIR_S;
}
else if(e.getY()==selected.getMinY() && (e.getX()<selected.getMaxX() && e.getX()>selected.getMinX() )){
curDir=DIR_N;
e.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
}else if(e.getY()<selected.getCenterY()+10 &&
e.getY()>selected.getCenterY()-10 && (e.getX()<(selected.getCenterX()+10) && e.getX()>selected.getCenterX()-10 )){
e.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
curDir = MOV;
}
else{
e.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
curDir=NOP;
}
}
}
private class SpritePainter extends MouseAdapter implements ImageModePresenter{
private final SpriteImageMode mode;
private final int imgWidth;
private final int imgHeight;
public SpritePainter(SpriteImageMode mode,int imgWidth,int imgHeight) {
this.mode = mode;
this.imgWidth = imgWidth;
this.imgHeight = imgHeight;
}
@Override
public void paint(Graphics g) {
for(int i=0;i<imgHeight;i+=mode.getHeigth()){
g.drawLine(0, i, this.imgWidth, i);
}
for(int i=0;i<imgWidth;i+=mode.getWidth()){
g.drawLine(i, 0, i, this.imgHeight);
}
int ind = mode.getIndex();
int max_index = this.imgWidth/mode.getWidth();
int x = (ind%max_index)*mode.getWidth();
int y = (ind/max_index)*mode.getHeigth();
g.setColor(new Color(255, 0, 0, 70));
g.fillRect(x, y, mode.getWidth(),mode.getHeigth());
}
}
private class ResizePainter extends MouseAdapter implements ImageModePresenter{
private final ResizeImageMode mode;
private final int imgWidth;
private final int imgHeight;
public ResizePainter(ResizeImageMode mode,int imgWidth,int imgHeight) {
this.mode = mode;
this.imgWidth = imgWidth;
this.imgHeight = imgHeight;
}
@Override
public void paint(Graphics g) {
g.setColor(Color.BLUE);
g.drawLine(mode.getX0(), 0,mode.getX0(),imgHeight );
g.fillPolygon(new int[]{mode.getX0()+5,mode.getX0()-5,mode.getX0()}, new int[]{0,0,5}, 3);
g.setColor(Color.GREEN);
int x = this.imgWidth-mode.getX2();
g.fillPolygon(new int[]{x+5,x-5,x}, new int[]{0,0,5}, 3);
g.drawLine(x, 0, x,imgHeight );
g.setColor(Color.RED);
g.drawLine(0, mode.getY0(),imgWidth, mode.getY0() );
g.fillPolygon( new int[]{0,0,5},new int[]{mode.getY0()+5,mode.getY0()-5,mode.getY0()}, 3);
g.setColor(Color.PINK);
g.drawLine(0, mode.getY2(),imgWidth, mode.getY2() );
g.fillPolygon( new int[]{0,0,5},new int[]{mode.getY2()+5,mode.getY2()-5,mode.getY2()}, 3);
g.setColor(Color.YELLOW);
g.drawLine(mode.getX6(), 0,mode.getX6(),imgHeight );
g.fillPolygon(new int[]{mode.getX6()+5,mode.getX6()-5,mode.getX6()}, new int[]{0,0,5}, 3);
g.setColor(Color.BLACK);
int x1 = this.imgWidth-mode.getX8();
g.fillPolygon(new int[]{x1+5,x1-5,x1}, new int[]{0,0,5}, 3);
g.drawLine(x1, 0, x1,imgHeight );
}
}
}