1+ package uno.awt
2+
3+ import gln.GL_COLOR_BUFFER_BIT
4+ import org.lwjgl.opengl.GL30C
5+ import java.awt.*
6+ import java.awt.event.KeyAdapter
7+ import java.awt.event.KeyEvent
8+ import javax.swing.*
9+ import java.awt.event.WindowAdapter
10+ import java.awt.event.WindowEvent
11+ import javax.swing.JPanel
12+ import kotlin.system.exitProcess
13+ import javax.swing.RepaintManager
14+
15+
16+
17+
18+ lateinit var test: Test
19+
20+ fun main () {
21+ test = Test ()
22+ }
23+
24+ class Test : JFrame () {
25+
26+ lateinit var borderPanel: BorderPanel
27+ lateinit var centerPanel: CenterPanel
28+ var viewer: Viewer
29+
30+ init {
31+ JFrame .setDefaultLookAndFeelDecorated(false )
32+ isUndecorated = false
33+
34+ val rm = RepaintManager .currentManager(this )
35+ val b = rm.isDoubleBufferingEnabled()
36+ rm.setDoubleBufferingEnabled(false )
37+
38+ // Set Look & Feel
39+ UIManager .setLookAndFeel(UIManager .getSystemLookAndFeelClassName())
40+
41+ initComponents()
42+
43+ addWindowListener(object : WindowAdapter () {
44+ override fun windowClosing (event : WindowEvent ) = println (" windowClosing" )
45+ })
46+
47+ JPopupMenu .setDefaultLightWeightPopupEnabled(false )
48+
49+ viewer = Viewer ().apply {
50+ isVisible = true
51+ size = Dimension (500 ,500 )
52+ }
53+ centerPanel.add(viewer, BorderLayout .CENTER )
54+
55+ size = Dimension (500 , 500 )
56+ location = Point (100 , 50 )
57+ isVisible = true
58+
59+
60+ }
61+
62+ fun makeScreenShot (){
63+ viewer.renderImmediatly()
64+ System .err.println (" 1" )
65+ viewer.renderImmediatly()
66+ System .err.println (" 2" )
67+ viewer.renderImmediatly()
68+ System .err.println (" 3" )
69+
70+ }
71+
72+ fun initComponents () {
73+
74+ borderPanel = BorderPanel ().apply { size = Dimension (50 , 50 ) }
75+ centerPanel = CenterPanel ().apply {
76+ size = Dimension (50 , 50 )
77+ }
78+
79+ defaultCloseOperation = WindowConstants .DISPOSE_ON_CLOSE
80+
81+ centerPanel.layout = BorderLayout ()
82+ borderPanel.add(centerPanel, BorderLayout .CENTER )
83+
84+ contentPane.add(borderPanel, BorderLayout .CENTER )
85+
86+ pack()
87+
88+ borderPanel.isVisible = true
89+ centerPanel.isVisible = true
90+ }
91+
92+ override fun paint (g : Graphics ) {
93+ super .paint(g)
94+ println (" [Test] paint" )
95+ }
96+ }
97+
98+ class CenterPanel : JPanel () {
99+ override fun paint (g : Graphics ) {
100+ super .paint(g)
101+ test.viewer.paint(g)
102+ println (" [CenterPanel] paint" )
103+ }
104+ }
105+
106+ class BorderPanel : JPanel () {
107+ override fun paint (g : Graphics ) {
108+ super .paint(g)
109+ println (" [BorderPanel] paint" )
110+ }
111+ }
112+
113+ class Viewer : LwjglCanvas () {
114+ var count = 0 ;
115+ var halloCount = 0 ;
116+ init {
117+ animated = false
118+ focusTraversalKeysEnabled = false
119+ val rm = RepaintManager .currentManager(this )
120+ val b = rm.isDoubleBufferingEnabled()
121+ rm.setDoubleBufferingEnabled(false )
122+
123+ addKeyListener(object : KeyAdapter () {
124+ override fun keyPressed (e : KeyEvent ) {
125+ println (" keyPressed" )
126+ if (e.keyCode == KeyEvent .VK_F10 ) {
127+ (test.centerPanel as JComponent ).paintImmediately(0 , 0 , 500 , 500 )
128+ } else if (e.keyCode == KeyEvent .VK_F11 ){
129+
130+ test.makeScreenShot()
131+
132+ } else if (e.keyCode == KeyEvent .VK_ESCAPE )
133+ exitProcess(0 )
134+ }
135+ })
136+ }
137+
138+ fun renderImmediatly (){
139+ val g = test.viewer.graphics;
140+ if (g != null ) {
141+ halloCount++
142+ test.viewer.paint(g)
143+
144+ // g.clearRect(0,0,500,500)
145+ // g.drawString(" HALLO!"+ halloCount, 350, 250);
146+ g.dispose()
147+ }
148+ }
149+
150+ override fun render () {
151+ val time = System .currentTimeMillis()
152+ GL30C .glClearColor((time % 1000 ) / 1000f , 0.5f , 0f , 1f )
153+ GL30C .glClear(GL_COLOR_BUFFER_BIT .i)
154+ }
155+ }
0 commit comments