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