diff --git a/Applicatie/DrawObject.java b/Applicatie/DrawObject.java index 22b1ad3..adc10f4 100644 --- a/Applicatie/DrawObject.java +++ b/Applicatie/DrawObject.java @@ -1,9 +1,12 @@ 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.Ellipse2D; +import java.awt.geom.NoninvertibleTransformException; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; @@ -14,12 +17,24 @@ public class DrawObject { Point2D position; double rotation; double scale; - Image image; + private Image image; + private Image rotateImage; protected boolean selected; + private Rectangle2D rektAngle; + private Rectangle2D upperLeftCorner; + private Rectangle2D upperRightCorner; + private Rectangle2D bottomLeftCorner; + private Rectangle2D bottomRightCorner; + private Ellipse2D rotateDot; + static final int UPPERLEFT = 0; + static final int UPPERRIGHT = 1; + static final int BOTTOMLEFT = 2; + static final int BOTTOMRIGHT = 3; public DrawObject(String filename, Point2D position) { image = new ImageIcon(filename).getImage(); + rotateImage = new ImageIcon("rotate.png").getImage(); scale = 1; rotation = 0; this.position = position; @@ -29,6 +44,26 @@ 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.setFrame(tx.createTransformedShape(rektAngle).getBounds()); + g.draw(rektAngle); + g.setColor(Color.YELLOW); + upperLeftCorner = new Rectangle2D.Double(rektAngle.getX()-7,rektAngle.getY()-7,15,15); + upperRightCorner = new Rectangle2D.Double(rektAngle.getX() + rektAngle.getWidth()-8,rektAngle.getY()-7,15,15); + bottomLeftCorner = new Rectangle2D.Double(rektAngle.getX()-7,rektAngle.getY() + rektAngle.getHeight()-8,15,15); + bottomRightCorner = new Rectangle2D.Double(rektAngle.getX() + rektAngle.getWidth()-8,rektAngle.getY() + rektAngle.getHeight()-8,15,15); + g.fill(upperLeftCorner); //upperleft + g.fill(upperRightCorner); //upperright + g.fill(bottomLeftCorner); //bottomleft + g.fill(bottomRightCorner); //bottomright + g.setColor(Color.RED); + rotateDot = new Ellipse2D.Double((rektAngle.getX() + (rektAngle.getWidth()/2))-8,rektAngle.getY()-8,15,15); + g.fill(rotateDot); + } } protected AffineTransform getTransform() { @@ -38,14 +73,83 @@ public class DrawObject { tx.rotate(Math.toRadians(rotation), image.getWidth(null) / 2, image.getHeight(null) / 2); return tx; } + + protected AffineTransform getTransformSelection() { + AffineTransform tx = new AffineTransform(); + tx.scale(scale, scale); + tx.translate(position.getX(), position.getY()); + 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); + /** + * Special transformation for the selection rectangle, because the translation of the image one places the rectangle translated from the image. + * @return affineTransform + */ + private AffineTransform getTransformRectangle() { + AffineTransform tx = new AffineTransform(); + tx.scale(scale, scale); + return tx; } - public void setSelected(boolean b) - { + public boolean contains(Point2D clickPoint) { + Shape shape; + if(rektAngle == null) { + shape = new Rectangle2D.Double(0,0,image.getWidth(null), image.getHeight(null)); + return getTransform().createTransformedShape(shape).contains(clickPoint); + } + else { + shape = new Rectangle2D.Double(-7,-7,image.getWidth(null)+7, image.getHeight(null)+7); + return getTransformSelection().createTransformedShape(shape).contains(clickPoint); + } + + } + + public Point2D getObjectPoint(Point2D point) { + try { + return getTransform().inverseTransform(point, null); + } catch (NoninvertibleTransformException e) { + e.printStackTrace(); + } + return null; + } + + /** + * This method checks if the place thats clicked is inside one of the corners. + * + * @param point + * @param corner + * @return if the clicked point is inside one of the corners + */ + public boolean containsCorner(Point2D point, int corner) { + Rectangle2D chosenCorner = null; + switch(corner) { + case 0: + chosenCorner = upperLeftCorner; + break; + case 1: + chosenCorner = upperRightCorner; + break; + case 2: + chosenCorner = bottomLeftCorner; + break; + case 3: + chosenCorner = bottomRightCorner; + break; + case 4: + if(point.getX() > rotateDot.getX() && point.getX() < rotateDot.getX() + rotateDot.getWidth() + && point.getY() > rotateDot.getY() && point.getY() < rotateDot.getY() + rotateDot.getHeight()) + return true; + else + return false; + } + if(point.getX() > chosenCorner.getX() && point.getX() < chosenCorner.getX() + chosenCorner.getWidth() + && point.getY() > chosenCorner.getY() && point.getY() < chosenCorner.getY() + chosenCorner.getHeight()) + return true; + else + return false; + } + + public void setSelected(boolean b) { selected = b; } @@ -85,5 +189,12 @@ public class DrawObject { return selected; } + public Rectangle2D getRectangle() { + return rektAngle; + } + + public void setRectangle(Rectangle2D rectangle) { + rektAngle = rectangle; + } } diff --git a/Applicatie/Panel.java b/Applicatie/Panel.java index 0270e30..9d23516 100644 --- a/Applicatie/Panel.java +++ b/Applicatie/Panel.java @@ -1,4 +1,5 @@ package Applicatie; + import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; @@ -26,34 +27,36 @@ import Objects.Wall; @SuppressWarnings("serial") public class Panel extends JPanel { - + BufferedImage background; - BufferedImage podiumImage, toiletImage, entranceImage, pathImage,wallImage; - - private int panelInfox, panelInfoy,scrollfactor; - + BufferedImage podiumImage, toiletImage, entranceImage, pathImage, + wallImage; + + private int panelInfox, panelInfoy, scrollfactor; + private ArrayList panelInfo = new ArrayList(); -// private ArrayList panelTypes = new ArrayList(); - + // private ArrayList panelTypes = new ArrayList(); + ArrayList objects = new ArrayList<>(); DrawObject dragObject = null; - - Point2D cameraPoint = new Point2D.Double(getWidth()/2,getHeight()/2); - float cameraScale = 1; - - PropertiesPanel pp; - - - Point2D lastClickPosition = new Point(0,0); - Point lastMousePosition = new Point(0,0); - - //how to nieuwe dingen aan het panel toe te voegen: - //maak bufferedimage global aan, voeg er een image aan toe, en voeg de image aan panelInfo toe en het object aan panelTypes. - //en maak een case statement die een new Object returnt in createNewDrawObject. - + private DrawObject selectedObject; + private String clickedOption = "drag"; - Panel(PropertiesPanel pp) - { + Point2D cameraPoint = new Point2D.Double(getWidth() / 2, getHeight() / 2); + float cameraScale = 1; + + PropertiesPanel pp; + + Point2D lastClickPosition = new Point(0, 0); + Point lastMousePosition = new Point(0, 0); + + // how to nieuwe dingen aan het panel toe te voegen: + // maak bufferedimage global aan, voeg er een image aan toe, en voeg de + // image aan panelInfo toe en het object aan panelTypes. + // en maak een case statement die een new Object returnt in + // createNewDrawObject. + + Panel(PropertiesPanel pp) { this.pp = pp; pp.setPanel(this); try { @@ -71,38 +74,34 @@ public class Panel extends JPanel { panelInfo.add(entranceImage); panelInfo.add(pathImage); panelInfo.add(wallImage); - + panelInfox = 0; panelInfoy = 0; scrollfactor = 0; - -// objects.add(new Podium(new Point2D.Double(100, 100))); -// objects.add(new Podium(new Point2D.Double(500, 100))); -// objects.add(new Podium(new Point2D.Double(300, 400))); - + + // objects.add(new Podium(new Point2D.Double(100, 100))); + // objects.add(new Podium(new Point2D.Double(500, 100))); + // objects.add(new Podium(new Point2D.Double(300, 400))); + addMouseListener(new Mouse(this)); - + addMouseMotionListener(new MouseMotion(this)); - + addMouseWheelListener(new MouseWheel(this)); - + } - - public int getPanelInfoLength() - { + + public int getPanelInfoLength() { int panelInfoLength = 0; - for(BufferedImage image : panelInfo) - { + for (BufferedImage image : panelInfo) { panelInfoLength += image.getWidth(); } - + return panelInfoLength; } - - public DrawObject createNewDrawObject(int index) - { - switch(index) - { + + public DrawObject createNewDrawObject(int index) { + switch (index) { case 0: return new Podium(null); case 1: @@ -117,54 +116,50 @@ public class Panel extends JPanel { return null; } } - - public void add(DrawObject dragObject) - { + + public void add(DrawObject dragObject) { objects.add(dragObject); } - - public void paintComponent(Graphics g) - { - super.paintComponent(g); - Graphics2D g2 = (Graphics2D)g; - g2.setClip(new Rectangle2D.Double(0,0, getWidth(), 300)); -// g2.fill(new Ellipse2D.Double(0,0,300,300)); - -// g2.drawImage(podiumImage, 0, 0, null); - for(BufferedImage image : panelInfo) - { + public void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + g2.setClip(new Rectangle2D.Double(0, 0, getWidth(), 300)); + + // g2.fill(new Ellipse2D.Double(0,0,300,300)); + + // g2.drawImage(podiumImage, 0, 0, null); + for (BufferedImage image : panelInfo) { g2.drawImage(image, panelInfox + scrollfactor, panelInfoy, null); panelInfox += image.getWidth(); } panelInfox = 0; - - g2.setClip(new Rectangle2D.Double(0,150, getWidth(), getHeight())); + + g2.setClip(new Rectangle2D.Double(0, 150, getWidth(), getHeight())); AffineTransform oldTransform = g2.getTransform(); g2.setTransform(getCamera()); - - TexturePaint p = new TexturePaint(background, new Rectangle2D.Double(0, 0, 100, 100)); + + TexturePaint p = new TexturePaint(background, new Rectangle2D.Double(0, + 0, 100, 100)); g2.setPaint(p); - g2.fill(new Rectangle2D.Double(-1920,-1080,3840,2160)); - - for(DrawObject o : objects){ + g2.fill(new Rectangle2D.Double(-1920, -1080, 3840, 2160)); + + for (DrawObject o : objects) { o.draw(g2); } - - - + g2.setClip(null); g2.setTransform(oldTransform); } public AffineTransform getCamera() { AffineTransform tx = new AffineTransform(); - tx.translate(-cameraPoint.getX() + getWidth()/2, -cameraPoint.getY() + getHeight()/2); + tx.translate(-cameraPoint.getX() + getWidth() / 2, -cameraPoint.getY() + + getHeight() / 2); tx.scale(cameraScale, cameraScale); - return tx; } - + public Point2D getClickPoint(Point point) { try { return getCamera().inverseTransform(point, null); @@ -174,94 +169,74 @@ public class Panel extends JPanel { return null; } - - public void setBackground(BufferedImage background) { this.background = background; } - - public ArrayList getObjects() { return objects; } - public void setObjects(ArrayList objects) { this.objects = objects; } - public DrawObject getDragObject() { return dragObject; } - public void setDragObject(DrawObject dragObject) { this.dragObject = dragObject; } - public Point2D getCameraPoint() { return cameraPoint; } - public void setCameraPoint(Point2D cameraPoint) { this.cameraPoint = cameraPoint; } - public float getCameraScale() { return cameraScale; } - public void setCameraScale(float cameraScale) { this.cameraScale = cameraScale; } - public Point2D getLastClickPosition() { return lastClickPosition; } - public void setLastClickPosition(Point2D lastClickPosition) { this.lastClickPosition = lastClickPosition; } - public Point getLastMousePosition() { return lastMousePosition; } - public void setLastMousePosition(Point lastMousePosition) { this.lastMousePosition = lastMousePosition; } - public BufferedImage getPodiumImage() { return podiumImage; } - public void setPodiumImage(BufferedImage podiumImage) { this.podiumImage = podiumImage; } - public ArrayList getPanelInfo() { return panelInfo; } - public void setPanelInfo(ArrayList panelInfo) { this.panelInfo = panelInfo; } - public int getScrollfactor() { return scrollfactor; } @@ -277,15 +252,28 @@ public class Panel extends JPanel { public void setPanelInfox(int panelInfox) { this.panelInfox = panelInfox; } - - public PropertiesPanel getPP() - { + + public PropertiesPanel getPP() { return pp; } - public void update() - { + public void update() { repaint(); } + 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/Applicatie/PropertiesPanel.java b/Applicatie/PropertiesPanel.java index 7a5e7dc..2d9c128 100644 --- a/Applicatie/PropertiesPanel.java +++ b/Applicatie/PropertiesPanel.java @@ -27,18 +27,16 @@ public class PropertiesPanel extends JPanel { JTextField scaleField; JTextField rotationField; - PropertiesPanel() - { + PropertiesPanel() { super(); BoxLayout box = new BoxLayout(this, BoxLayout.PAGE_AXIS); setLayout(box); - setPreferredSize(new Dimension(200,0)); - setBorder(BorderFactory.createLineBorder(new Color(180,180,180))); + setPreferredSize(new Dimension(200, 0)); + setBorder(BorderFactory.createLineBorder(new Color(180, 180, 180))); setBackground(new Color(220, 220, 220)); - - //NAME "PROPERTIES" + // NAME "PROPERTIES" JPanel propPanel = new JPanel(); JLabel propLabel = new JLabel("Properties"); propLabel.setFont(new Font("Segoe UI", Font.BOLD, 30)); @@ -47,8 +45,7 @@ public class PropertiesPanel extends JPanel { propPanel.add(propLabel); add(propPanel); - - //LOCATION + // LOCATION JPanel locationPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JLabel locationLabel = new JLabel("Location"); locationLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20)); @@ -69,17 +66,25 @@ public class PropertiesPanel extends JPanel { locationXField.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { - try{ + + try { locationXField.setBackground(Color.WHITE); - double xpos = Double.parseDouble(locationXField.getText()); - selectedObject.setPosition(new Point2D.Double(xpos, selectedObject.getPosition().getY())); + double xpos = Double.parseDouble(locationXField + .getText()); + selectedObject.setPosition(new Point2D.Double(xpos, + selectedObject.getPosition().getY())); p.update(); } catch (NumberFormatException nfe) { locationXField.setBackground(Color.RED); } + + } + + public void keyReleased(KeyEvent e) { + } + + public void keyPressed(KeyEvent e) { } - public void keyReleased(KeyEvent e) {} - public void keyPressed(KeyEvent e) {} }); } locationXPanel.add(locationXField); @@ -97,24 +102,32 @@ public class PropertiesPanel extends JPanel { locationYField.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { - try{ + try { locationYField.setBackground(Color.WHITE); - double ypos = Double.parseDouble(locationYField.getText()); - selectedObject.setPosition(new Point2D.Double(selectedObject.getPosition().getX(), ypos));; + double ypos = Double.parseDouble(locationYField + .getText()); + selectedObject.setPosition(new Point2D.Double( + selectedObject.getPosition().getX(), ypos)); + ; p.update(); } catch (NumberFormatException nfe) { + locationYField.setBackground(Color.RED); + } } - public void keyReleased(KeyEvent e) {} - public void keyPressed(KeyEvent e) {} + + public void keyReleased(KeyEvent e) { + } + + public void keyPressed(KeyEvent e) { + } }); } locationYPanel.add(locationYField); } - - //SCALE + // SCALE JPanel scalePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JLabel scaleLabel = new JLabel("Scale"); scaleLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20)); @@ -135,24 +148,30 @@ public class PropertiesPanel extends JPanel { scaleField.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { - try{ + + try { scaleField.setBackground(Color.WHITE); - double scale = Double.parseDouble(scaleField.getText()); + double scale = Double.parseDouble(scaleField + .getText()); selectedObject.setScale(scale); p.update(); } catch (NumberFormatException nfe) { scaleField.setBackground(Color.RED); } + + } + + public void keyReleased(KeyEvent e) { + } + + public void keyPressed(KeyEvent e) { } - public void keyReleased(KeyEvent e) {} - public void keyPressed(KeyEvent e) {} }); } scalePanel2.add(scaleField); } - - //ROTATION + // ROTATION JPanel rotationPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JLabel rotationLabel = new JLabel("Rotation"); rotationLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20)); @@ -173,31 +192,38 @@ public class PropertiesPanel extends JPanel { rotationField.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { - try{ + + try { rotationField.setBackground(Color.WHITE); - int rotation = Integer.parseInt(rotationField.getText()) % 360; - rotationField.setText(rotation +""); + int rotation = Integer.parseInt(rotationField + .getText()) % 360; + rotationField.setText(rotation + ""); selectedObject.setRotation(rotation); p.update(); } catch (NumberFormatException nfe) { rotationField.setBackground(Color.RED); } + + } + + public void keyReleased(KeyEvent e) { + } + + public void keyPressed(KeyEvent e) { } - public void keyReleased(KeyEvent e) {} - public void keyPressed(KeyEvent e) {} }); } rotationPanel2.add(rotationField); } - //SPACER + // SPACER JPanel spacerPanel = new JPanel(); spacerPanel.setPreferredSize(new Dimension(200, 50)); spacerPanel.setMaximumSize(new Dimension(200, 50)); spacerPanel.setBackground(new Color(220, 220, 220)); add(spacerPanel); - //EXAMPLE + // EXAMPLE JPanel examplePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JLabel exampleLabel = new JLabel("Example"); exampleLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20)); @@ -209,16 +235,13 @@ public class PropertiesPanel extends JPanel { enableComponents(this, false); } - - public void setSelected(DrawObject drOb) - { + public void setSelected(DrawObject drOb) { selectedObject = drOb; fillFields(); enableComponents(this, true); } - public void clearSelected() - { + public void clearSelected() { enableComponents(this, false); clearFields(this); selectedObject = null; @@ -233,7 +256,7 @@ public class PropertiesPanel extends JPanel { for (Component component : components) { component.setEnabled(enable); if (component instanceof Container) { - enableComponents((Container)component, enable); + enableComponents((Container) component, enable); } } } @@ -245,24 +268,28 @@ public class PropertiesPanel extends JPanel { ((JTextField) component).setText(""); } if (component instanceof Container) { - clearFields((Container)component); + clearFields((Container) component); } } } private void fillFields() { - if(selectedObject != null) - { - locationXField.setText(Math.round(selectedObject.getPosition().getX()) + ""); - locationYField.setText(Math.round(selectedObject.getPosition().getY()) + ""); - scaleField.setText((double)Math.round(selectedObject.getScale()*10)/10 + ""); - rotationField.setText(Math.round(selectedObject.getRotation()%360) + ""); + if (selectedObject != null) { + locationXField.setText(Math.round(selectedObject.getPosition() + .getX()) + ""); + locationYField.setText(Math.round(selectedObject.getPosition() + .getY()) + ""); + scaleField + .setText((double) Math.round(selectedObject.getScale() * 10) + / 10 + ""); + rotationField + .setText(Math.round(selectedObject.getRotation() % 360) + + ""); } - + } - public void setPanel(Panel p) - { + public void setPanel(Panel p) { this.p = p; } } diff --git a/Listeners/Mouse.java b/Listeners/Mouse.java index e6993aa..5fb37e3 100644 --- a/Listeners/Mouse.java +++ b/Listeners/Mouse.java @@ -12,30 +12,30 @@ import Applicatie.Panel; import Objects.Podium; public class Mouse extends MouseAdapter { - - private Panel panel; - public Mouse(Panel panel) - { + private Panel panel; + private DrawObject selectedObject; + + public Mouse(Panel panel) { this.panel = panel; + selectedObject = null; } public void mousePressed(MouseEvent e) { Point2D clickPoint = panel.getClickPoint(e.getPoint()); panel.setLastClickPosition(clickPoint); panel.setLastMousePosition(e.getPoint()); - if(e.getY() < 150) - { -// if(e.getX() < 51) //51 = width podium image -// panel.setDragObject(new Podium(clickPoint)); -// else -// panel.setDragObject(new Toilet(clickPoint)); + if (e.getY() < 150) { + // if(e.getX() < 51) //51 = width podium image + // panel.setDragObject(new Podium(clickPoint)); + // else + // panel.setDragObject(new Toilet(clickPoint)); int i = 0; int last = 0; - for(BufferedImage image : panel.getPanelInfo()) - { - if(e.getX() >= panel.getScrollfactor() && e.getX() < last + image.getWidth() + panel.getScrollfactor()) - { + for (BufferedImage image : panel.getPanelInfo()) { + if (e.getX() >= panel.getScrollfactor() + && e.getX() < last + image.getWidth() + + panel.getScrollfactor()) { DrawObject tempDrawObj = panel.createNewDrawObject(i); tempDrawObj.setPosition(clickPoint); panel.setDragObject(tempDrawObj); @@ -43,29 +43,55 @@ public class Mouse extends MouseAdapter { } i++; last += image.getWidth(); - + } - if(panel.getDragObject() != null) - { + if (panel.getDragObject() != null) { panel.add(panel.getDragObject()); } - } - else - { - for(DrawObject o : panel.getObjects()) - { - if(o.contains(clickPoint)) - { + } else { + for (DrawObject o : panel.getObjects()) { + if (o.contains(clickPoint)) { + if (o == selectedObject) { + boolean upperLeft = o.containsCorner(clickPoint, 0); + boolean upperRight = o.containsCorner(clickPoint, 1); + boolean bottomLeft = o.containsCorner(clickPoint, 2); + boolean bottomRight = o.containsCorner(clickPoint, 3); + boolean rotate = o.containsCorner(clickPoint, 4); + if (upperLeft) { + panel.setClickedOption("upperLeft"); + } else if (upperRight) { + panel.setClickedOption("upperRight"); + } else if (bottomLeft) { + panel.setClickedOption("bottomLeft"); + } else if (bottomRight) { + panel.setClickedOption("bottomRight"); + } else if (rotate) { + panel.setClickedOption("rotate"); + } else { + panel.setClickedOption("drag"); + } + } + if (selectedObject != null) + selectedObject.setSelected(false); + panel.setDragObject(o); + o.setSelected(true); + selectedObject = o; panel.setDragObject(o); panel.getPP().setSelected(o); - return; } } - panel.getPP().clearSelected(); } + 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.setClickedOption("drag"); + panel.repaint(); } -} +} \ No newline at end of file diff --git a/Listeners/MouseMotion.java b/Listeners/MouseMotion.java index 66def0f..a9c927c 100644 --- a/Listeners/MouseMotion.java +++ b/Listeners/MouseMotion.java @@ -1,13 +1,8 @@ package Listeners; -import Applicatie.Panel; - import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.geom.Point2D; -import javax.swing.JPanel; -import javax.swing.SwingUtilities; - import Applicatie.Panel; public class MouseMotion extends MouseMotionAdapter { @@ -21,33 +16,76 @@ 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( - panel.getDragObject().getPosition().getX() - (panel.getLastClickPosition().getX() - clickPoint.getX()), - panel.getDragObject().getPosition().getY() - (panel.getLastClickPosition().getY() - clickPoint.getY()))); + if(panel.getDragObject() != null) { + Point2D objectPoint = panel.getDragObject().getObjectPoint(panel.getDragObject().getPosition()); + 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()) )); + break; + case "upperLeft": + if(clickPoint.getX() < panel.getDragObject().getPosition().getX() && clickPoint.getY() < panel.getDragObject().getPosition().getY()) { + resizeBigger(); + } + else if (clickPoint.getX() > panel.getDragObject().getPosition().getX() && clickPoint.getY() > panel.getDragObject().getPosition().getY()) { + resizeSmaller(); + } + break; + case "upperRight": + if(clickPoint.getX() > panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() < panel.getDragObject().getRectangle().getY()) { + resizeBigger(); + } + else if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() > panel.getDragObject().getRectangle().getY()) { + resizeSmaller(); + } + break; + case "bottomLeft": + if(clickPoint.getX() < panel.getDragObject().getRectangle().getX() && clickPoint.getY() > panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) { + resizeBigger(); + } + else if (clickPoint.getX() > panel.getDragObject().getRectangle().getX() && clickPoint.getY() < panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) { + resizeSmaller(); + } + break; + case "bottomRight": + if(clickPoint.getX() > panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() > panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) { + resizeBigger(); + } + else if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() < panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) { + resizeSmaller(); + } + break; + case "rotate": + double tempval = panel.getDragObject().getRotation() + (panel.getLastClickPosition().getX() - clickPoint.getX()); + panel.getDragObject().setRotation(tempval); + break; } - else - { - - double tempval = panel.getDragObject().getRotation() + (panel.getLastClickPosition().getX() - clickPoint.getX()); - panel.getDragObject().setRotation(tempval); - } - panel.repaint(); } - else - { + 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.getCameraPoint().getX() + (panel.getLastMousePosition().getX() - e.getX()), + panel.getCameraPoint().getY() + (panel.getLastMousePosition().getY() - e.getY()) + )); + } + panel.repaint(); panel.setLastMousePosition(e.getPoint()); panel.setLastClickPosition(clickPoint); panel.getPP().update(); } + + private void resizeBigger() { + double scale = panel.getDragObject().getScale()*1 + 0.02; + panel.getDragObject().setScale(scale); + panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX()-2,panel.getDragObject().getPosition().getY()-2)); + } + + private void resizeSmaller() { + if(panel.getDragObject().getScale() > 0.2) { + double scale = panel.getDragObject().getScale()*1 - 0.02; + panel.getDragObject().setScale(scale); + panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX()+2,panel.getDragObject().getPosition().getY()+2)); + } + } } diff --git a/Listeners/MouseWheel.java b/Listeners/MouseWheel.java index 1b9269c..c92c43f 100644 --- a/Listeners/MouseWheel.java +++ b/Listeners/MouseWheel.java @@ -11,19 +11,17 @@ public class MouseWheel implements MouseWheelListener { private Panel panel; private int scrollfactor; - public MouseWheel(Panel panel) - { + public MouseWheel(Panel panel) { this.panel = panel; scrollfactor = 20; } public void mouseWheelMoved(MouseWheelEvent e) { Point2D clickPoint = panel.getClickPoint(e.getPoint()); - for(DrawObject o : panel.getObjects()) - { - if(o.contains(clickPoint)) - { - double scale = o.getScale()* 1 + (e.getPreciseWheelRotation()/10.0); + for (DrawObject o : panel.getObjects()) { + if (o.contains(clickPoint)) { + double scale = o.getScale() * 1 + + (e.getPreciseWheelRotation() / 10.0); o.setScale(scale); panel.getPP().update(); panel.repaint(); @@ -31,36 +29,31 @@ public class MouseWheel implements MouseWheelListener { } } - if(e.getY() < 150) - { + if (e.getY() < 150) { - if(e.getPreciseWheelRotation() < 0) - { - if(panel.getScrollfactor() + scrollfactor + panel.getPanelInfoLength() < panel.getWidth()) - { - panel.setScrollfactor(panel.getScrollfactor() + scrollfactor); + if (e.getPreciseWheelRotation() < 0) { + if (panel.getScrollfactor() + scrollfactor + + panel.getPanelInfoLength() < panel.getWidth()) { + panel.setScrollfactor(panel.getScrollfactor() + + scrollfactor); } - - } - else - { - if(panel.getScrollfactor() - scrollfactor >= 0) - { - panel.setScrollfactor(panel.getScrollfactor() - scrollfactor); + + } else { + if (panel.getScrollfactor() - scrollfactor >= 0) { + panel.setScrollfactor(panel.getScrollfactor() + - scrollfactor); } - + } - } - else - { - // cameraPoint - double cameraScale = panel.getCameraScale() * 1 - (e.getPreciseWheelRotation()/10); + } else { + // cameraPoint + double cameraScale = panel.getCameraScale() * 1 + - (e.getPreciseWheelRotation() / 10); panel.setCameraScale((float) cameraScale); } - panel.repaint(); } -} +} \ No newline at end of file