Added border when selected

This commit is contained in:
Wesley
2015-03-12 22:10:15 +01:00
parent 72383c9ccc
commit ae35416cf9
4 changed files with 107 additions and 24 deletions
+27 -1
View File
@@ -1,7 +1,8 @@
package Applicatie;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
@@ -16,6 +17,7 @@ public class DrawObject {
double scale;
Image image;
protected boolean selected;
private Rectangle2D rektAngle;
public DrawObject(String filename, Point2D position)
{
@@ -29,6 +31,14 @@ public class DrawObject {
{
AffineTransform tx = getTransform();
g.drawImage(image, tx, null);
if(selected) {
g.setColor(Color.BLACK);
g.setStroke(new BasicStroke(7));
rektAngle = new Rectangle2D.Double((int) position.getX(), (int) position.getY(), image.getWidth(null), image.getHeight(null));
tx = getTransformRectangle(rektAngle.getWidth(),rektAngle.getHeight());
Shape transformedRektAngle = tx.createTransformedShape(rektAngle);
g.draw(transformedRektAngle);
}
}
protected AffineTransform getTransform() {
@@ -39,6 +49,19 @@ public class DrawObject {
return tx;
}
/**
* Special transformation for the selection rectangle, because the translation of the image one places the rectangle translated from the image.
* @param width
* @param height
* @return
*/
private AffineTransform getTransformRectangle(double width, double height) {
AffineTransform tx = new AffineTransform();
tx.scale(scale, scale);
tx.rotate(Math.toRadians(rotation), width / 2, height / 2);
return tx;
}
public boolean contains(Point2D clickPoint) {
Shape shape = new Rectangle2D.Double(0,0,image.getWidth(null), image.getHeight(null));
return getTransform().createTransformedShape(shape).contains(clickPoint);
@@ -85,5 +108,8 @@ public class DrawObject {
return selected;
}
public Rectangle2D getRectangle() {
return rektAngle;
}
}
+22
View File
@@ -29,6 +29,8 @@ public class Panel extends JPanel {
ArrayList<DrawObject> objects = new ArrayList<>();
DrawObject dragObject = null;
private DrawObject selectedObject;
private String clickedOption = "drag";
Point2D cameraPoint = new Point2D.Double(getWidth()/2,getHeight()/2);
float cameraScale = 1;
@@ -171,6 +173,26 @@ public class Panel extends JPanel {
public void setLastMousePosition(Point lastMousePosition) {
this.lastMousePosition = lastMousePosition;
}
public DrawObject getSelectedObject() {
return selectedObject;
}
public void setSelectedObject(DrawObject selectedObject) {
this.selectedObject = selectedObject;
}
public String getClickedOption() {
return clickedOption;
}
public void setClickedOption(String clickedOption) {
this.clickedOption = clickedOption;
}
}
+27 -1
View File
@@ -13,10 +13,12 @@ import Applicatie.Panel;
public class Mouse extends MouseAdapter {
private Panel panel;
private DrawObject selectedObject;
public Mouse(Panel panel)
{
this.panel = panel;
selectedObject = null;
}
public void mousePressed(MouseEvent e) {
@@ -35,13 +37,37 @@ public class Mouse extends MouseAdapter {
else
{
for(DrawObject o : panel.getObjects())
if(o.contains(clickPoint))
if(o.contains(clickPoint)) {
if(o == selectedObject) {
boolean upperLeft = clickPoint.getX() > o.getRectangle().getX() && clickPoint.getX() < o.getRectangle().getX()+o.getRectangle().getWidth()/10
&& clickPoint.getY() > o.getRectangle().getY() && clickPoint.getY() < o.getRectangle().getY()+o.getRectangle().getHeight()/10;
if(upperLeft) {
System.out.println("lal");
panel.setClickedOption("upperLeft");
}
else {
panel.setClickedOption("drag");
}
}
if(selectedObject != null)
selectedObject.setSelected(false);
panel.setDragObject(o);
o.setSelected(true);
selectedObject = o;
System.out.println("selected");
}
}
if(panel.getDragObject() == null && selectedObject != null) {
System.out.println("deselected");
selectedObject.setSelected(false);
selectedObject = null;
}
panel.repaint();
}
public void mouseReleased(MouseEvent e) {
panel.setDragObject(null);
panel.repaint();
}
}
+31 -22
View File
@@ -21,31 +21,40 @@ public class MouseMotion extends MouseMotionAdapter {
public void mouseDragged(MouseEvent e) {
Point2D clickPoint = panel.getClickPoint(e.getPoint());
if(panel.getDragObject() != null)
{
if(SwingUtilities.isLeftMouseButton(e)){
panel.getDragObject().setPosition(new Point2D.Double(
switch(panel.getClickedOption()) {
case "drag":
if(panel.getDragObject() != null)
panel.getDragObject().setPosition(new Point2D.Double(
panel.getDragObject().getPosition().getX() - (panel.getLastClickPosition().getX() - clickPoint.getX()),
panel.getDragObject().getPosition().getY() - (panel.getLastClickPosition().getY() - clickPoint.getY())));
}
else
{
double tempval = panel.getDragObject().getRotation() + (panel.getLastClickPosition().getX() - clickPoint.getX());
panel.getDragObject().setRotation(tempval);
}
panel.repaint();
}
else
{
panel.setCameraPoint(new Point2D.Double(
panel.getCameraPoint().getX() + (panel.getLastMousePosition().getX() - e.getX()),
panel.getCameraPoint().getY() + (panel.getLastMousePosition().getY() - e.getY())
));
panel.repaint();
break;
}
panel.repaint();
// if(panel.getDragObject() != null)
// {
// if(SwingUtilities.isLeftMouseButton(e)){
//
//
//
// }
// else
// {
//double tempval = panel.getDragObject().getRotation() + (panel.getLastClickPosition().getX() - clickPoint.getX());
//panel.getDragObject().setRotation(tempval);
//
// }
// panel.repaint();
// }
// else
// {
// panel.setCameraPoint(new Point2D.Double(
// panel.getCameraPoint().getX() + (panel.getLastMousePosition().getX() - e.getX()),
// panel.getCameraPoint().getY() + (panel.getLastMousePosition().getY() - e.getY())
// ));
// panel.repaint();
// }
panel.setLastMousePosition(e.getPoint());
panel.setLastClickPosition(clickPoint);
}