Changed license to Creative Commons Zero (CC0).
[sixth-3d.git] / src / main / java / eu / svjatoslav / sixth / e3d / gui / ViewFrame.java
1 /*
2  * Sixth 3D engine. Author: Svjatoslav Agejenko. 
3  * This project is released under Creative Commons Zero (CC0) license.
4  *
5 *
6  */
7
8 package eu.svjatoslav.sixth.e3d.gui;
9
10 import javax.swing.*;
11 import java.awt.*;
12 import java.awt.event.ComponentEvent;
13 import java.awt.event.ComponentListener;
14 import java.awt.event.WindowEvent;
15 import java.awt.event.WindowListener;
16
17 public class ViewFrame extends JFrame implements WindowListener {
18
19     private static final long serialVersionUID = -7037635097739548470L;
20
21     private final ViewPanel viewPanel;
22
23     public ViewFrame() {
24         setTitle("3D engine");
25
26         addWindowListener(new java.awt.event.WindowAdapter() {
27             @Override
28             public void windowClosing(final java.awt.event.WindowEvent e) {
29                 exit();
30             }
31         });
32
33         viewPanel = new ViewPanel();
34
35         add(getViewPanel());
36
37         setSize(800, 600);
38
39         // maximize window
40         setExtendedState(JFrame.MAXIMIZED_BOTH);
41         setVisible(true);
42
43         addResizeListener();
44         addWindowListener(this);
45     }
46
47     private void addResizeListener() {
48         addComponentListener(new ComponentListener() {
49             // This method is called after the component's size changes
50             @Override
51             public void componentHidden(final ComponentEvent e) {
52             }
53
54             @Override
55             public void componentMoved(final ComponentEvent e) {
56             }
57
58             @Override
59             public void componentResized(final ComponentEvent evt) {
60
61                 final Component c = (Component) evt.getSource();
62
63                 // Get new size
64                 final Dimension newSize = c.getSize();
65
66                 boolean sizeFixed = false;
67
68                 if (newSize.width < 400) {
69                     newSize.width = 400;
70                     sizeFixed = true;
71                 }
72
73                 if (newSize.height < 400) {
74                     newSize.height = 400;
75                     sizeFixed = true;
76                 }
77
78                 if (sizeFixed)
79                     setSize(newSize);
80
81             }
82
83             @Override
84             public void componentShown(final ComponentEvent e) {
85                 viewPanel.repaintDuringNextViewUpdate();
86             }
87
88         });
89     }
90
91     public void exit() {
92         if (getViewPanel() != null) {
93             getViewPanel().stop();
94             getViewPanel().setEnabled(false);
95             getViewPanel().setVisible(false);
96         }
97         dispose();
98     }
99
100     @Override
101     public java.awt.Dimension getPreferredSize() {
102         return new java.awt.Dimension(640, 480);
103     }
104
105     /**
106      * @return the view
107      */
108     public ViewPanel getViewPanel() {
109         return viewPanel;
110     }
111
112     @Override
113     public void windowActivated(final WindowEvent e) {
114         viewPanel.repaintDuringNextViewUpdate();
115     }
116
117     @Override
118     public void windowClosed(final WindowEvent e) {
119     }
120
121     @Override
122     public void windowClosing(final WindowEvent e) {
123     }
124
125     @Override
126     public void windowDeactivated(final WindowEvent e) {
127     }
128
129     @Override
130     public void windowDeiconified(final WindowEvent e) {
131         viewPanel.repaintDuringNextViewUpdate();
132     }
133
134     @Override
135     public void windowIconified(final WindowEvent e) {
136     }
137
138     @Override
139     public void windowOpened(final WindowEvent e) {
140         viewPanel.repaintDuringNextViewUpdate();
141     }
142
143 }