From ae35416cf9f6c0388483fdac068555955bc3758b Mon Sep 17 00:00:00 2001 From: Wesley Date: Thu, 12 Mar 2015 22:10:15 +0100 Subject: [PATCH] Added border when selected --- Applicatie/DrawObject.java | 28 +++++++++++++++++++- Applicatie/Panel.java | 22 ++++++++++++++++ Listeners/Mouse.java | 28 +++++++++++++++++++- Listeners/MouseMotion.java | 53 ++++++++++++++++++++++---------------- 4 files changed, 107 insertions(+), 24 deletions(-) diff --git a/Applicatie/DrawObject.java b/Applicatie/DrawObject.java index 22b1ad3..37ca5ff 100644 --- a/Applicatie/DrawObject.java +++ b/Applicatie/DrawObject.java @@ -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; + } } diff --git a/Applicatie/Panel.java b/Applicatie/Panel.java index d63aa40..d81c24c 100644 --- a/Applicatie/Panel.java +++ b/Applicatie/Panel.java @@ -29,6 +29,8 @@ public class Panel extends JPanel { ArrayList 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; + } } diff --git a/Listeners/Mouse.java b/Listeners/Mouse.java index 3e4083a..6e55622 100644 --- a/Listeners/Mouse.java +++ b/Listeners/Mouse.java @@ -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(); } } diff --git a/Listeners/MouseMotion.java b/Listeners/MouseMotion.java index 248158f..0388ec8 100644 --- a/Listeners/MouseMotion.java +++ b/Listeners/MouseMotion.java @@ -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); }