Browse Source

Fixes ViewSizeDialog

TomTroppmann 2 years ago
parent
commit
55c0f3a32c

+ 14 - 6
src/holeg/ui/view/canvas/Canvas.java

@@ -45,6 +45,7 @@ public class Canvas extends JPanel {
         initPopupMenu();
     }
 
+
     private void initPopupMenu() {
         componentPopupMenu.add(deleteMenu);
         componentPopupMenu.addSeparator();
@@ -88,6 +89,10 @@ public class Canvas extends JPanel {
     public void paintComponent(java.awt.Graphics g) {
         super.paintComponent(g);
         Graphics2D g2d = Rendering.initGraphics2D(g);
+        g2d.setColor(Color.gray);
+        g2d.fillRect(0,0,getWidth(), getHeight());
+        g2d.setColor(Color.white);
+        g2d.fillRect(0,0,GuiSettings.canvasSize.getX(), GuiSettings.canvasSize.getY());
         Rendering.drawSelection(g2d);
         paintEdges(g2d);
         groupNode.getHolonObjects().forEach(hO -> Rendering.drawHolonObject(g2d, hO));
@@ -149,6 +154,14 @@ public class Canvas extends JPanel {
         ).findAny();
     }
 
+    public static Vec2i boundsToCanvas(Vec2i pos){
+        Vec2i position = new Vec2i(pos);
+        position.clampX(GuiSettings.getPictureScaleDiv2(), GuiSettings.canvasSize.getX() - GuiSettings.getPictureScaleDiv2());
+        position.clampY(GuiSettings.getPictureScaleDiv2(), GuiSettings.canvasSize.getY() - GuiSettings.getPictureScaleDiv2());
+        return position;
+    }
+
+
     /**
      * Microsoft Windows10 selection & dragging behavior
      */
@@ -340,12 +353,7 @@ public class Canvas extends JPanel {
                 });
             }
         }
-        private Vec2i boundsToCanvas(Vec2i pos){
-            Vec2i position = new Vec2i(pos);
-            position.clampX(GuiSettings.getPictureScaleDiv2(), GuiSettings.canvasSize.getX() - GuiSettings.getPictureScaleDiv2());
-            position.clampY(GuiSettings.getPictureScaleDiv2(), GuiSettings.canvasSize.getY() - GuiSettings.getPictureScaleDiv2());
-            return position;
-        }
+
 
         Rectangle getRectangleOfSelectionBox() {
             return Geometry.createRectangleFromCorners(lastPosition, pressedPosition);

+ 10 - 0
src/holeg/ui/view/canvas/CanvasCollectionPanel.java

@@ -3,6 +3,7 @@ package holeg.ui.view.canvas;
 import holeg.model.GroupNode;
 import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
+import holeg.ui.model.GuiSettings;
 import holeg.ui.view.image.Import;
 
 import javax.swing.*;
@@ -35,6 +36,15 @@ public class CanvasCollectionPanel extends JTabbedPane {
         createMainCanvas();
     }
 
+
+    public void resetCanvasSizes(){
+        Dimension dimension = new Dimension(GuiSettings.canvasSize.getX(), GuiSettings.canvasSize.getY());
+        for (Map.Entry<Component, Canvas> entry : componentCanvasMap.entrySet()) {
+            entry.getValue().setPreferredSize(dimension);
+            entry.getKey().revalidate();
+        }
+    }
+
     private void tabChangeEvent(ChangeEvent changeEvent) {
         Optional.ofNullable(componentCanvasMap.get(this.getSelectedComponent())).ifPresentOrElse(canvas -> {
             actual = canvas;

+ 22 - 49
src/holeg/ui/view/dialog/CanvasResizePopUp.java

@@ -5,81 +5,54 @@ import javax.swing.*;
 import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
 import holeg.ui.model.GuiSettings;
-import holeg.model.Model;
 import holeg.ui.view.canvas.Canvas;
-import holeg.ui.view.canvas.CanvasCollectionPanel;
 import holeg.ui.view.image.Import;
+import holeg.ui.view.main.Gui;
 import holeg.utility.math.vector.Vec2i;
 
 import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 
 public class CanvasResizePopUp extends JDialog {
-    private final JButton btnOk = new JButton("OK");
-	private final JButton btnCancel = new JButton("Cancel");
-	JTabbedPane tabbedPane;
 	Control controller;
-	Canvas canvas;
-    private JPanel mainPanel = new JPanel();
-    private JTextField tFieldWidht = new JTextField();
-    private JTextField tFieldHeight = new JTextField();
-    private JLabel lblWidth = new JLabel("Width:");
-    private JLabel lblHeight = new JLabel("Height:");
-    private JPanel buttonPanel = new JPanel();
+	private final JTextField widthTextField = new JTextField();
+    private final JTextField heightTextField = new JTextField();
 
-	public CanvasResizePopUp(Control controller, JFrame parentFrame) {
-        super((java.awt.Frame) null, true);
+	public CanvasResizePopUp(Control controller, Gui gui) {
+        super(gui, true);
 		this.controller = controller;
-
 		// properties and stuff
 		this.setIconImage(Import.loadImage(ImagePreference.Logo,30,30));
 		this.setTitle("Set the Size of the View");
 		setBounds(200, 100, 200, 100);
-        setLocationRelativeTo(parentFrame);
+        setLocationRelativeTo(gui);
 
 		// MainPanel
-		tFieldWidht.setText("" + GuiSettings.canvasSize.getX());
-		tFieldHeight.setText("" + GuiSettings.canvasSize.getY());
+		widthTextField.setText("" + GuiSettings.canvasSize.getX());
+		heightTextField.setText("" + GuiSettings.canvasSize.getY());
+		JPanel mainPanel = new JPanel();
+		JLabel lblWidth = new JLabel("Width:");
 		mainPanel.add(lblWidth);
-		mainPanel.add(tFieldWidht);
+		mainPanel.add(widthTextField);
+		JLabel lblHeight = new JLabel("Height:");
 		mainPanel.add(lblHeight);
-		mainPanel.add(tFieldHeight);
+		mainPanel.add(heightTextField);
 		mainPanel.setBackground(Color.WHITE);
 
 		// Button Panel
+		JButton btnOk = new JButton("OK");
 		btnOk.addActionListener(e -> {
-			GuiSettings.canvasSize.setX(Integer.parseInt(tFieldWidht.getText()));
-			GuiSettings.canvasSize.setY(Integer.parseInt(tFieldHeight.getText()));
-			Vec2i actualCanvasSize = GuiSettings.canvasSize;
-
-			Dimension preferedSize = new Dimension(actualCanvasSize.getX(), actualCanvasSize.getY());
-			canvas.setPreferredSize(new Dimension(preferedSize));
-			for (int i = 1; i < tabbedPane.getTabCount(); i++) {
-				if (tabbedPane.getComponentAt(i) != null) {
-					JScrollPane scollPane = (JScrollPane) tabbedPane.getComponentAt(i);
-					Canvas groupNodeCanvas = ((Canvas) (scollPane)
-							.getViewport().getComponent(0));
-					groupNodeCanvas.setPreferredSize(new Dimension(preferedSize));
-					groupNodeCanvas.repaint();
-				}
-			}
-			canvas.revalidate();
-			canvas.repaint();
-
+			GuiSettings.canvasSize.setX(Integer.parseInt(widthTextField.getText()));
+			GuiSettings.canvasSize.setY(Integer.parseInt(heightTextField.getText()));
+			gui.canvasCollection.resetCanvasSizes();
 			controller.getModel().getCanvas().getAllObjectsRecursive().forEach(obj -> {
-				Vec2i position = obj.getPosition();
-				position.clampX(0, actualCanvasSize.getX());
-				position.clampY(0, actualCanvasSize.getY());
+				obj.setPosition(Canvas.boundsToCanvas(obj.getPosition()));
 			});
+			controller.OnCanvasUpdate.broadcast();
 			dispose();
 		});
-		btnCancel.addActionListener(new ActionListener() {
-			@Override
-			public void actionPerformed(ActionEvent e) {
-				dispose();
-			}
-		});
+		JButton btnCancel = new JButton("Cancel");
+		btnCancel.addActionListener(clicked -> dispose());
+		JPanel buttonPanel = new JPanel();
 		buttonPanel.add(btnOk);
 		buttonPanel.add(btnCancel);
 		buttonPanel.setBackground(Color.WHITE);

+ 9 - 1
src/holeg/ui/view/main/Gui.java

@@ -40,7 +40,7 @@ public class Gui extends JFrame {
     private final Control control;
 
     private final CategoryPanel categoryPanel;
-    private final CanvasCollectionPanel canvasCollection;
+    public final CanvasCollectionPanel canvasCollection;
     private final Inspector inspector;
     private final HolonInformationPanel informationPanel;
     private final TimePanel timePanel;
@@ -130,6 +130,11 @@ public class Gui extends JFrame {
         return this.canvasCollection.getActualCanvas();
     }
 
+
+
+
+
+
     private class GuiMenuBar extends JMenuBar {
         //Menus
         private final JMenu fileMenu = new JMenu("File");
@@ -359,6 +364,9 @@ public class Gui extends JFrame {
             flexMenuButton.setAccelerator(KeyStroke.getKeyStroke('F', InputEvent.ALT_DOWN_MASK));
         }
 
+
+
+
         private void saveFile() {
             GuiSettings.getActualSaveFile().ifPresentOrElse(control::saveFile, this::saveNewFile);
         }

+ 6 - 3
src/holeg/utility/math/Maths.java

@@ -25,10 +25,13 @@ public class Maths {
 		else return (value - min) / (max - min);
 	}
 
-//	public static double Clamp(double value, double min, double max){
-//		return Math.max(min, Math.min(max, value));
-//	}
+	public static int Clamp(int value, int min, int max){
+		return Math.max(min, Math.min(max, value));
+	}
 	public static float Clamp(float value, float min, float max){
 		return Math.max(min, Math.min(max, value));
 	}
+	public static double Clamp(double value, double min, double max){
+		return Math.max(min, Math.min(max, value));
+	}
 }