From 8088590686a45e71278f9a52bb9cc37943dc0c37 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sun, 23 Jun 2019 08:18:35 -0400
Subject: [PATCH] Full-screen mode.

---
 ObjEditor.java   |   99 ++++++++++++++++++-
 BoundaryRep.java |    2 
 CameraPane.java  |   56 +++++++----
 Globals.java     |    3 
 GroupEditor.java |   97 ++++++++++++++++---
 Object3D.java    |   13 ++
 6 files changed, 222 insertions(+), 48 deletions(-)

diff --git a/BoundaryRep.java b/BoundaryRep.java
index 6c09eda..883e363 100644
--- a/BoundaryRep.java
+++ b/BoundaryRep.java
@@ -4155,6 +4155,8 @@
     
     void MergeNormals()
     {
+        assert(!trimmed);
+        
         boolean smooth = Grafreed.smoothmode;
         boolean link = Grafreed.linkUV;
         Grafreed.smoothmode = true;
diff --git a/CameraPane.java b/CameraPane.java
index aef9761..76ad7dc 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -37,7 +37,6 @@
     static boolean[] selectedstack = new boolean[65536];
     static int materialdepth = 0;
 
-    static boolean DEBUG = false;
     static boolean FRUSTUM = false; // still bogus true; // frustum culling
 
     // camera change fix
@@ -2267,7 +2266,7 @@
     
     void ToggleDebug()
     {
-        DEBUG ^= true;
+        Globals.DEBUG ^= true;
     }
 
     void ToggleLookAt()
@@ -11459,6 +11458,24 @@
 
     static boolean zoomonce = false;
     
+    void CreateSelectedPoint()
+    {
+        if (selectedpoint == null)
+        {
+            debugpointG = new Sphere();
+            debugpointP = new Sphere();
+            debugpointC = new Sphere();
+            debugpointR = new Sphere();
+            
+            selectedpoint = new Superellipsoid();
+            
+            for (int i=0; i<8; i++)
+            {
+                debugpoints[i] = new Sphere();
+            }
+        }
+    }
+    
     void DrawObject(GL gl, boolean draw)
     {
         //System.out.println("DRAW OBJECT " + mouseDown);
@@ -11539,8 +11556,9 @@
             
             if (DrawMode() == DEFAULT)
             {
-                if (DEBUG)
+                if (Globals.DEBUG)
                 {
+                    CreateSelectedPoint();
                     float radius = 0.05f;
                     if (selectedpoint.radius != radius)
                     {
@@ -14902,8 +14920,14 @@
                 RevertCamera();
                 repaint();
                 break;
-            case 'L':
             case 'l':
+                lightMode ^= true;
+                Globals.lighttouched = true;
+                manipCamera = renderCamera = lightMode ? lightCamera : eyeCamera;
+                targetLookAt.set(manipCamera.lookAt);
+                repaint();
+                break;
+            case 'L':
                 if (lightMode)
                 {
                     lightMode = false;
@@ -15050,16 +15074,14 @@
                 kompactbit = 6;
                 break;
             case ' ':
-                lightMode ^= true;
-                Globals.lighttouched = true;
-                manipCamera = renderCamera = lightMode ? lightCamera : eyeCamera;
-                targetLookAt.set(manipCamera.lookAt);
+                ObjEditor.theFrame.ToggleFullScreen();
                 repaint();
                 break;
             //case '`' :
             case ESC:
                 RENDERPROGRAM += 1;
                 RENDERPROGRAM %= 3;
+
                 repaint();
                 break;
             case 'Z':
@@ -17235,23 +17257,15 @@
     int AAbuffersize = 0;
     
     //double[] selectedpoint = new double[3];
-    static Superellipsoid selectedpoint = new Superellipsoid();
+    static Superellipsoid selectedpoint;
     static Sphere previousselectedpoint = null;
-    static Sphere debugpointG = new Sphere();
-    static Sphere debugpointP = new Sphere();
-    static Sphere debugpointC = new Sphere();
-    static Sphere debugpointR = new Sphere();
+    static Sphere debugpointG;
+    static Sphere debugpointP;
+    static Sphere debugpointC;
+    static Sphere debugpointR;
     
     static Sphere debugpoints[] = new Sphere[8];
  
-    static
-    {
-        for (int i=0; i<8; i++)
-        {
-            debugpoints[i] = new Sphere();
-        }
-    }
-    
     static void InitPoints(float radius)
     {
         for (int i=0; i<8; i++)
diff --git a/Globals.java b/Globals.java
index 3e1e257..3cb946a 100644
--- a/Globals.java
+++ b/Globals.java
@@ -1,7 +1,8 @@
 
 public class Globals
 {
-        public static boolean ADVANCED = true; //false;
+        public static boolean DEBUG = false;
+        public static boolean ADVANCED = false;
         
     static iCameraPane theRenderer;
     
diff --git a/GroupEditor.java b/GroupEditor.java
index bae9769..14b61ed 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -246,7 +246,7 @@
 
                 cameraMenu.add(toggleDebugItem = new CheckboxMenuItem("Debug"));
                 toggleDebugItem.addItemListener(this);
-                toggleDebugItem.setState(CameraPane.DEBUG);
+                toggleDebugItem.setState(Globals.DEBUG);
 
                 cameraMenu.add(toggleFrustumItem = new CheckboxMenuItem("Frustum"));
                 toggleFrustumItem.addItemListener(this);
@@ -535,6 +535,18 @@
 	
 	void SetupUI2(ObjEditor oe)
 	{
+            // June 2019
+            if (oe == null)
+            {
+                //super.SetupUI2(this);
+                //return;
+            }
+            
+            if (copy != group)
+            {
+                //super.SetupUI2(this);
+            }
+            
             //new Exception().printStackTrace();
                 
         oe.radioPanel = new JPanel(new GridBagLayout());
@@ -565,15 +577,27 @@
          */
                 //this.AddOptions(oe.toolbarPanel, oe.aConstraints);
                 
-		oe.toolbarPanel.add(undoButton = new cButton("Undo", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+		//oe.toolbarPanel.add(minButton = new cButton("Min", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                //minButton.setToolTipText("Minimize window");
+		//minButton.addActionListener(this);
+                
+		oe.toolbarPanel.add(maxButton = new cButton("\u271A", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                maxButton.setToolTipText("Maximize window");
+		maxButton.addActionListener(this);
+                
+		oe.toolbarPanel.add(fullButton = new cButton("\u2b1c", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                fullButton.setToolTipText("Full-screen window");
+		fullButton.addActionListener(this);
+                
+		oe.toolbarPanel.add(undoButton = new cButton("\u21a9", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 undoButton.setToolTipText("Undo changes");
 		undoButton.addActionListener(this);
                 
-		oe.toolbarPanel.add(redoButton = new cButton("Redo", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+		oe.toolbarPanel.add(redoButton = new cButton("\u21aa", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 redoButton.setToolTipText("Redo changes");
 		redoButton.addActionListener(this);
                 
-		oe.toolbarPanel.add(saveButton = new cButton("Save", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+		oe.toolbarPanel.add(saveButton = new cButton("\u21e3", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 saveButton.setToolTipText("Save changes");
 		saveButton.addActionListener(this);
                 
@@ -581,7 +605,7 @@
                 liveCB.setToolTipText("Enable animation");
                                 liveCB.addItemListener(this);
 
-		oe.toolbarPanel.add(oneStepButton = new cButton("Step", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+		oe.toolbarPanel.add(oneStepButton = new cButton("\u29f4", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 oneStepButton.setToolTipText("Animate one step forward");
 		oneStepButton.addActionListener(this);
                 
@@ -589,7 +613,7 @@
                 fastCB.setToolTipText("Fast mode");
                                 fastCB.addItemListener(this);
                                 
-                oe.toolbarPanel.add(trackCB = new cCheckBox("Track", CameraPane.TRACK)); //, oe.aConstraints);
+                oe.toolbarPanel.add(trackCB = new cCheckBox(":", CameraPane.TRACK)); //, oe.aConstraints);
                 trackCB.setToolTipText("Enable tracking");
                                 trackCB.addItemListener(this);
 
@@ -817,6 +841,8 @@
         
         void SetupViews(ObjEditor oe)
         {
+                    theFrame = this;
+                    
             oe.SetupViews();
             
 		System.out.println("SetupViews");
@@ -1978,6 +2004,18 @@
 		{
                     DumpObject();
 		} else
+		if (source == minButton)
+		{
+			Minimize();
+		} else
+		if (source == maxButton)
+		{
+			Maximize();
+		} else
+		if (source == fullButton)
+		{
+			ToggleFullScreen();
+		} else
 		if (source == undoButton)
 		{
 			Undo();
@@ -2899,6 +2937,24 @@
                     bigThree.ClearUI();
                     bigThree.add(centralPanel);
                     bigThree.FlushUI();
+                    
+                    cameraView.requestFocusInWindow();
+                    
+//                    refreshContents(true);
+//                    
+//                    try
+//                    {
+//                        java.awt.Robot bot = new java.awt.Robot();
+//                        int mask = InputEvent.BUTTON1_MASK;
+//                        bot.mouseMove(100, 100);           
+//                        bot.mousePress(mask);     
+//                        bot.mouseRelease(mask);                    
+//                    }
+//                    catch (Exception e)
+//                    {
+//                        
+//                    }
+                    
                 } else
 		if (source == threeButton)
 		{
@@ -2935,6 +2991,8 @@
                     bigThree.add(centralPanel);
                     bigThree.add(XYZPanel);
                     bigThree.FlushUI();
+                    
+                    cameraView.requestFocusInWindow();
                 } else
 		if (source == fourButton)
 		{
@@ -2970,6 +3028,8 @@
                     bigThree.ClearUI();
                     bigThree.add(scenePanel);
                     bigThree.FlushUI();
+                    
+                    cameraView.requestFocusInWindow();
                 } else
 		if (source == sixButton)
 		{
@@ -3006,6 +3066,8 @@
                     bigThree.add(scenePanel);
                     bigThree.add(centralPanel);
                     bigThree.FlushUI();
+                    
+                    cameraView.requestFocusInWindow();
                 } else
 		if (source == sevenButton)
 		{
@@ -3043,6 +3105,8 @@
                     bigThree.add(centralPanel);
                     bigThree.add(XYZPanel);
                     bigThree.FlushUI();
+                    
+                    cameraView.requestFocusInWindow();
                 } else
 		if (source == rootButton)
 		{
@@ -3054,6 +3118,7 @@
                                 EditObject(obj);
                     }
 
+                    cameraView.requestFocusInWindow();
                     refreshContents(true);
 		} else
 		if (source == closeButton)
@@ -3075,6 +3140,8 @@
                                 break;
                             }
                     }
+                    
+                    cameraView.requestFocusInWindow();
                     refreshContents(true);
 		} else
 		if (source == editItem || source == editButton)
@@ -3179,7 +3246,7 @@
                     }
                     
 // fix "+" issue
-                    group.editWindow = this;
+                    //group.editWindow = this;
                     
                     /*
                     currentLayout = radio.layout;
@@ -3192,6 +3259,8 @@
                     //group.parent = null; // ROOT
                     //group.attributes = -1;
                     ResetModel();
+                    
+                    cameraView.requestFocusInWindow();
                     refreshContents(true);
                 } else if (event.getSource() == editCameraItem)
                 {
@@ -3215,7 +3284,6 @@
 	}
         
         boolean useclient = false;
-        cRadio radio;
         
         void ToggleRoot()
         {
@@ -5219,9 +5287,12 @@
 	cButton clearpanelButton;
 	cButton unselectButton;
 	
-	cButton saveButton;
+	cButton minButton;
+	cButton maxButton;
+	cButton fullButton;
 	cButton undoButton;
 	cButton redoButton;
+	cButton saveButton;
 	cButton oneStepButton;
         
 	cButton screenfitButton;
@@ -5234,14 +5305,6 @@
 	cButton closeButton;
 
 	cButton setsupportButton;
-        
-	cButton twoButton;
-	cButton sixButton;
-	cButton threeButton;
-	cButton sevenButton;
-	cButton fourButton; // full panel
-	cButton oneButton; // full XYZ
-        //cButton currentLayout;
         
 	//
         //Composite
diff --git a/ObjEditor.java b/ObjEditor.java
index 877fe87..9be4ae9 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -36,6 +36,8 @@
     GroupEditor callee;
     JFrame frame;
     
+    static ObjEditor theFrame;
+    
     // SCRIPT
     
     transient JFrame textpanel = null;
@@ -244,6 +246,7 @@
         //localCopy.parent = null;
 
         frame = new JFrame();
+                frame.setUndecorated(true);
         objEditor = this;
         this.callee = callee;
 
@@ -583,19 +586,89 @@
         }
     }
 
+static GraphicsDevice device = GraphicsEnvironment
+        .getLocalGraphicsEnvironment().getScreenDevices()[0];
+
+    Rectangle keeprect;
+        cRadio radio;
+        
+cButton keepButton;
+	cButton twoButton; // Full 3D
+	cButton sixButton;
+	cButton threeButton;
+	cButton sevenButton;
+	cButton fourButton; // full panel
+	cButton oneButton; // full XYZ
+        //cButton currentLayout;
+        
+        boolean maximized;
+    
+        void Minimize()
+        {
+            frame.setState(Frame.ICONIFIED);
+        }
+        
+        void Maximize()
+        {
+            if (maximized)
+            {
+                frame.setBounds(keeprect.x, keeprect.y, keeprect.width, keeprect.height);
+            }
+            else
+            {
+                keeprect = frame.getBounds();
+                Rectangle rect = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
+                Dimension rect2 = frame.getToolkit().getScreenSize();
+                frame.setBounds(0, rect2.height - rect.height, rect.width, rect.height);
+//                frame.setState(Frame.MAXIMIZED_BOTH);
+            }
+            
+            maximized ^= true;
+        }
+        
         void ToggleFullScreen()
         {
                 if (CameraPane.FULLSCREEN)
                 {
-                    frame.getContentPane().remove(/*"Center",*/bigThree);
-                    framePanel.add(bigThree);
-                    frame.getContentPane().add(/*"Center",*/framePanel);
+                    device.setFullScreenWindow(null);
+                    //frame.setVisible(false);
+//                frame.removeNotify();
+//                frame.setUndecorated(false);
+//                frame.addNotify();
+                //frame.setBounds(keeprect.x, keeprect.y, keeprect.width, keeprect.height);
+                    
+// X                   frame.getContentPane().remove(/*"Center",*/bigThree);
+// X                   framePanel.add(bigThree);
+// X                   frame.getContentPane().add(/*"Center",*/framePanel);
+                    framePanel.setDividerLocation(1);
+                    
+                    //frame.setVisible(true);
+                    radio.layout = keepButton;
+                    //theFrame = null;
+                    keepButton = null;
+                    radio.layout.doClick();
+                    
                 } else
                 {
-                    frame.getContentPane().remove(/*"Center",*/framePanel);
-                    framePanel.remove(bigThree);
-                    frame.getContentPane().add(/*"Center",*/bigThree);
+                    keepButton = radio.layout;
+                    //keeprect = frame.getBounds();
+//                frame.setBounds(0, 0, frame.getToolkit().getScreenSize().width,
+//                        frame.getToolkit().getScreenSize().height);
+                    //frame.setVisible(false);
+                    device.setFullScreenWindow(frame);
+//                frame.removeNotify();
+//                frame.setUndecorated(true);
+//                frame.addNotify();
+// X                   frame.getContentPane().remove(/*"Center",*/framePanel);
+// X                   framePanel.remove(bigThree);
+// X                   frame.getContentPane().add(/*"Center",*/bigThree);
+                    framePanel.setDividerLocation(0);
+
+                    radio.layout = twoButton;
+                    radio.layout.doClick();
+                    //frame.setVisible(true);
                 }
+                
                 cameraView.ToggleFullScreen();
         }
 
@@ -947,7 +1020,7 @@
         rewindCB.setToolTipText("Rewind animation");
         
         randomCB = AddCheckBox(setupPanel2, "Rand", copy.random);
-        randomCB.setToolTipText("Rewind or Go back and forth randomly");
+        randomCB.setToolTipText("Randomly Rewind or Go back and forth");
 
         if (Globals.ADVANCED)
         {
@@ -1184,8 +1257,11 @@
         //worldPanel.setName("World");
 	centralPanel = new cGridBag();
         centralPanel.preferredWidth = 20;
-	timelinePanel = new JPanel(new BorderLayout());
-        timelineMenubar = new timeflow.app.TimeflowApp().TimeFlowWindow(timelinePanel);
+        
+        if (Globals.ADVANCED)
+        {
+            timelinePanel = new JPanel(new BorderLayout());
+            timelineMenubar = new timeflow.app.TimeflowApp().TimeFlowWindow(timelinePanel);
 
         cameraPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, cameraView, timelinePanel);
         cameraPanel.setContinuousLayout(true);
@@ -1194,7 +1270,10 @@
 //        cameraPanel.setDividerSize(9);
         cameraPanel.setResizeWeight(1.0);
         
+        }
+        
         centralPanel.add(cameraView);
+        centralPanel.setFocusable(true);
         //frame.setJMenuBar(timelineMenubar);
         //centralPanel.add(timelinePanel);
         
@@ -1392,6 +1471,8 @@
         frame.setSize(1280, 860);
         frame.setVisible(true);
 
+                    cameraView.requestFocusInWindow();
+                    
         gridPanel.setDividerLocation(1.0);
 
         frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
diff --git a/Object3D.java b/Object3D.java
index 7b52765..a5ae9d9 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -2387,6 +2387,10 @@
         }
          */
         }
+        else
+        {
+            //((ObjEditor)editWindow).SetupUI2(null);
+        }
     }
 
     void createEditWindow(GroupEditor callee, boolean newWindow) //, boolean root)
@@ -6361,6 +6365,11 @@
                 return;
             }
             
+            if (dontselect)
+            {
+                //bRep.GenerateNormalsMINE();
+            }
+            
             display.DrawGeometry(bRep, flipV, selectmode);
         } else // catch (Error e)
         {
@@ -7796,6 +7805,10 @@
             editWindow = null;
         } // ?
         }
+        else
+        {
+            //editWindow.closeUI();
+        }
     }
     
     boolean root; // patch for edit windows

--
Gitblit v1.6.2