From 4806109ad6dc226d64613a43776d4db92d1bd032 Mon Sep 17 00:00:00 2001 From: Eideen Date: Tue, 2 Mar 2021 16:00:49 +0100 Subject: [PATCH 1/3] Add help scrollbar and window limitation --- src/lsystem/screen/MainFrame.java | 32 +++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/lsystem/screen/MainFrame.java b/src/lsystem/screen/MainFrame.java index 7681cd5..4cedf87 100644 --- a/src/lsystem/screen/MainFrame.java +++ b/src/lsystem/screen/MainFrame.java @@ -12,6 +12,7 @@ public class MainFrame extends JFrame { private static final long serialVersionUID = -7898079642230075807L; private int nbTabs; + private int nbHelpWindow; private JPanel basePanel; private JTabbedPane tabs; private JButton newGen; @@ -45,18 +46,29 @@ public class MainFrame extends JFrame { } public void newHelp() { - JFrame aide = new JFrame(); - aide.setTitle("Aide"); - aide.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); - aide.setSize(700,800); - aide.setLocationRelativeTo(null); - aide.setVisible(true); + if(nbHelpWindow>0){ + JOptionPane.showMessageDialog(null, "Une fenêtre d'aide est déjà ouverte."); + } + else { + nbHelpWindow++; - JTextArea helpText = new JTextArea(); - helpText.setText(Constants.HELP); - helpText.setEditable(false); + JFrame aide = new JFrame(); + aide.setTitle("Aide"); + aide.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + aide.setSize(700,500); + aide.setLocationRelativeTo(null); + aide.setVisible(true); - aide.add(helpText); + JTextArea helpText = new JTextArea(); + helpText.setText(Constants.HELP); + helpText.setEditable(false); + + JScrollPane scrollbar = new JScrollPane(helpText); + scrollbar.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); + scrollbar.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); + + aide.add(scrollbar); + } } public void newTab() { if(nbTabs>2) From 44250cd124a346923a606f70eacd24fc0d5f5808 Mon Sep 17 00:00:00 2001 From: Arthur <78031901+Arthur7770@users.noreply.github.com> Date: Tue, 2 Mar 2021 17:13:43 +0100 Subject: [PATCH 2/3] Scroll works --- src/lsystem/Main.java | 4 +- .../screen/listener/JoglEventListener.java | 3 ++ .../screen/listener/JoglMouseListener.java | 41 +++++++++++++++---- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/lsystem/Main.java b/src/lsystem/Main.java index 0aaf338..77ce7a1 100644 --- a/src/lsystem/Main.java +++ b/src/lsystem/Main.java @@ -3,10 +3,12 @@ package lsystem; import lsystem.screen.MainFrame; import lsystem.screen.SwingGLCanvas; +import java.util.Arrays; + public class Main { public static void main(String[] args) { - + System.out.println(-180%360); MainFrame frame = new MainFrame(); frame.setVisible(true); SwingGLCanvas canvas = new SwingGLCanvas(); diff --git a/src/lsystem/screen/listener/JoglEventListener.java b/src/lsystem/screen/listener/JoglEventListener.java index 680f400..7019b91 100644 --- a/src/lsystem/screen/listener/JoglEventListener.java +++ b/src/lsystem/screen/listener/JoglEventListener.java @@ -84,6 +84,9 @@ public class JoglEventListener implements GLEventListener { @Override public void display(GLAutoDrawable glAutoDrawable) { + for (int i = 0; i < canvas.camera.length; i++) { + canvas.camera[i] = canvas.camera[i] % 360; + } GL2 gl = glAutoDrawable.getGL().getGL2(); gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity(); diff --git a/src/lsystem/screen/listener/JoglMouseListener.java b/src/lsystem/screen/listener/JoglMouseListener.java index ced2645..c9790bd 100644 --- a/src/lsystem/screen/listener/JoglMouseListener.java +++ b/src/lsystem/screen/listener/JoglMouseListener.java @@ -64,9 +64,6 @@ public class JoglMouseListener implements MouseListener, MouseMotionListener, Mo } origine = e.getPoint(); } - for (int i = 0; i < canvas.camera.length; i++) { - canvas.camera[i] = canvas.camera[i] % 360; - } } @Override @@ -75,15 +72,41 @@ public class JoglMouseListener implements MouseListener, MouseMotionListener, Mo @Override public void mouseWheelMoved(MouseWheelEvent e) { - if( 45 > Math.abs(canvas.camera[3]) && 45>Math.abs(canvas.camera[4])) + // Gestion de la position x: + if(Math.abs(canvas.camera[3]) < 90 || Math.abs(canvas.camera[3]) > 270 ) { canvas.camera[0] += e.getWheelRotation() * Math.tan(Math.toRadians(-canvas.camera[3])) * 0.25; - else + } + else if(Math.abs(canvas.camera[3]) > 90 || Math.abs(canvas.camera[3]) < 270){ canvas.camera[0] += e.getWheelRotation() * Math.tan(Math.toRadians(canvas.camera[3])) * 0.25; - canvas.camera[1] += e.getWheelRotation() * Math.tan(Math.toRadians(canvas.camera[4])) * 0.25; - if( 45 < Math.abs(canvas.camera[3]) || 45 < Math.abs(canvas.camera[4])) - canvas.camera[2] += -e.getWheelRotation()*0.25; - else + } + // Gestion de la position y: + if(Math.abs(canvas.camera[4]) < 90 || Math.abs(canvas.camera[4]) > 270) { + canvas.camera[1] += e.getWheelRotation() * Math.tan(Math.toRadians(canvas.camera[4])) * 0.25; + } + else if(Math.abs(canvas.camera[4]) > 90 || Math.abs(canvas.camera[4]) < 270){ + canvas.camera[1] += e.getWheelRotation() * Math.tan(Math.toRadians(-canvas.camera[4])) * 0.25; + } + + if( 90 == canvas.camera[3]){ + canvas.camera[0] +=e.getWheelRotation()*0.25; + canvas.camera[2] += 0; + } + if( 90 == canvas.camera[4]){ + canvas.camera[1] +=e.getWheelRotation()*0.25; + canvas.camera[2] += 0; + } + if( -90 == canvas.camera[3]){ + canvas.camera[0] +=-e.getWheelRotation()*0.25; + canvas.camera[2] += 0; + } + if( -90 == canvas.camera[4]){ + canvas.camera[1] +=e.getWheelRotation()*0.25; + canvas.camera[2] += 0; + } + if(Math.abs(canvas.camera[3]) < 90 || Math.abs(canvas.camera[3]) > 270 && Math.abs(canvas.camera[4]) < 90 || Math.abs(canvas.camera[4]) > 270){ canvas.camera[2] += e.getWheelRotation()*0.25; + }else + canvas.camera[2] += -e.getWheelRotation()*0.25; } } From 4878df85f7a62d3ae6d57e0cbbb1427891cf9e8c Mon Sep 17 00:00:00 2001 From: Arthur <78031901+Arthur7770@users.noreply.github.com> Date: Tue, 2 Mar 2021 17:49:59 +0100 Subject: [PATCH 3/3] Control key update but still an acceleration problem --- .../screen/listener/JoglMouseListener.java | 2 +- .../screen/listener/KeyboardListener.java | 32 ++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/lsystem/screen/listener/JoglMouseListener.java b/src/lsystem/screen/listener/JoglMouseListener.java index c9790bd..90a6d3d 100644 --- a/src/lsystem/screen/listener/JoglMouseListener.java +++ b/src/lsystem/screen/listener/JoglMouseListener.java @@ -53,7 +53,7 @@ public class JoglMouseListener implements MouseListener, MouseMotionListener, Mo if(origine != null) { double xDiff = origine.getX() - e.getPoint().getX(); double yDiff = origine.getY() - e.getPoint().getY(); - /* if(button == 2) { + /* if(button == 1) { canvas.camera[0] += Math.cos(canvas.camera[3]) * xDiff * 0.01; canvas.camera[1] += Math.cos(canvas.camera[4]) * yDiff * 0.01; canvas.camera[2] += Math.sin(canvas.camera[3]) * xDiff * 0.01; diff --git a/src/lsystem/screen/listener/KeyboardListener.java b/src/lsystem/screen/listener/KeyboardListener.java index dcd8d26..07ebda9 100644 --- a/src/lsystem/screen/listener/KeyboardListener.java +++ b/src/lsystem/screen/listener/KeyboardListener.java @@ -19,16 +19,40 @@ public class KeyboardListener implements KeyListener { switch (e.getKeyChar()) { case 'z': - canvas.camera[2] -= 0.1f; + if(Math.abs(canvas.camera[3]) < 90 || Math.abs(canvas.camera[3])>270 ){ + canvas.camera[2] -= 0.1f; + canvas.camera[0] += 0.1f*Math.tan(Math.toRadians(canvas.camera[3])); + }else{ + canvas.camera[2] += 0.1f; + canvas.camera[0] -= 0.1f*Math.tan(Math.toRadians(canvas.camera[3])); + } break; case 's': - canvas.camera[2] += 0.1f; + if(Math.abs(canvas.camera[3]) < 90 || Math.abs(canvas.camera[3])>270 ){ + canvas.camera[2] += 0.1f; + canvas.camera[0] -= 0.1f*Math.tan(Math.toRadians(canvas.camera[3])); + }else{ + canvas.camera[2] -= 0.1f; + canvas.camera[0] += 0.1f*Math.tan(Math.toRadians(canvas.camera[3])); + } break; case 'q': - canvas.camera[0] -= 0.1f; + if(Math.abs(canvas.camera[3]) < 90 || Math.abs(canvas.camera[3])>270 ){ + canvas.camera[0] -= 0.1f; + canvas.camera[2] -= 0.1f*Math.tan(Math.toRadians(canvas.camera[3])); + }else{ + canvas.camera[0] += 0.1f; + canvas.camera[2] -= 0.1f*Math.tan(Math.toRadians(canvas.camera[3])); + } break; case 'd': - canvas.camera[0] += 0.1f; + if(Math.abs(canvas.camera[3]) < 180 || Math.abs(canvas.camera[3])>0 ){ + canvas.camera[0] += 0.1f; + canvas.camera[2] += 0.1f*Math.tan(Math.toRadians(canvas.camera[3])); + }else{ + canvas.camera[0] -= 0.1f; + canvas.camera[2] += 0.1f*Math.tan(Math.toRadians(canvas.camera[3])); + } break; case 'a': canvas.camera[3] -= 1;